對CloudFoundry的一些提問和回答

這是的一半內容從vcap_dev郵件列表中整理出來關於CloudFoundry的一些問答,另一半內容是作者本人在實現使用中遇到的問題和解決思路。如果你在布暑/安裝過程中遇到類似問題,將會很容易從這裏得到答案。我整理別人遇到的問題因爲下次沒準我也會遇到,幫助別人的同時也是幫助自己,希望本文對您一定參考作用。


怎樣在一個dea節點裏安裝warden?怎麼安裝dea-ng? 


能從外部訪問數據庫嗎?我指的是通過host, port等直接操作服務,而不是通過Caldecott。
答:不行。從設計上(主要是出於安全考慮),CF不允許外部直接訪問服務節點。

我按照 adding_a_system_service
成功安裝並啓動了echo服務,但在服務列表裏卻查看不到,並且也不能使用它。
[題外話]將日誌調到DEBUG能看到更多的日誌信息,echo_gateway和cloud_controller應該在同一臺服務器上。
答:CC/GW之間的協議已更新,而上面的教程沒有提到。在echo_gataway.yml裏你需要做相應更改

dev_setup安裝失敗,錯誤提示和"cloudfoundry-identity-uaa"有關

[ERROR]     The project org.cloudfoundry.identity:cloudfoundry-identity-parent:1.1.1 (/home/scf/cloudfoundry/vcap/uaa/pom.xml) has 1 error
[ERROR]     Unresolveable build extension: Plugin org.springframework.build.aws:org.springframework.build.aws.maven:3.0.0.RELEASE or one of its dependencies could not be resolved: The following artifacts could not be resolved: org.springframework.build.aws:org.springframework.build.aws.maven:jar:3.0.0.RELEASE, commons-httpclient:commons-httpclient:jar:3.1, commons-logging:commons-logging:jar:1.0.4, net.java.dev.jets3t:jets3t:jar:0.7.2, org.codehaus.plexus:plexus-utils:jar:1.1: Could not transfer artifact org.springframework.build.aws:org.springframework.build.aws.maven:jar:3.0.0.RELEASE from/to central (http://repo.maven.apache.org/maven2): GET request of: org/springframework/build/aws/org.springframework.build.aws.maven/3.0.0.RELEASE/org.springframework.build.aws.maven-3.0.0.RELEASE.jar from central failed: Connection reset -> [Help 2]

難道是被‘牆’?

答:將這個包https://repo.springsource.org/snapshot/org/cloudfoundry/runtime/cloudfoundry-identity-uaa/1.0.0.BUILD-SNAPSHOT/cloudfoundry-identity-uaa-1.0.0.BUILD-20120329.165548-2.war https://repo.springsource.org/libs-snapshot-s3-cache/org/cloudfoundry/identity/cloudfoundry-identity-uaa/1.0.0.BUILD-SNAPSHOT/cloudfoundry-identity-uaa-1.0.0.BUILD-20120427.120205-1.war 放入 ~/cloudfoundry/vcap/uaa/uaa/target 再運行一次試試看


啓動UAA報錯
[題外話]UAA請建議使用最新commit的代碼
答:UAA部分依賴於spring-security-oauth2,但這個包最近代碼有變,而UAA沒有跟進。建議在pom.xml中修改使用正確的版本

CF適用於企業級應用?
1. CF能否支持 SOA , workflow engine, rule engine?
2. 通常企業需要對應用做BI(?), 應用的數據需要放入BI數據庫。這怎麼做?CF中能做嗎?
3. 關於集羣。我們能對DEA做集羣嗎?在集羣裏dea可以分享信息,而router則可以視爲加載平衡。
4. 假設某個大應用需要頻繁的對數據進行操作。我需要(希望)將它放到單獨的mysql節點上,CF可以這麼做嗎?

[題外話]別在ubuntu 12.04上費勁。

能將一個PaaS上的應用自動移到另一個類似的PaaS上嗎?
答:不能。CF只能查看單個文件的源代碼,甚至不能對應用進行下載(雖然提供了這個接口)

我使用UAA的交互工具uaac時提示"context"(上下文)沒有設置。context是什麼東西?
答:context代表一個已驗證的用戶或者應用.

我創建了一個mysql服務,並且綁定到了app上。不修改配置文件,我能增加這個mysql服務的大小嗎?我意思是能不能通過cli/api修改services或apps的大小。
答:通常來說"不能"。你不能動態的,修改服務實例的大小或配置。這些都是事先定好了的,你可以安裝之前配置好。但不能動態更改,至少現在不能。
[snapshot API可以讓你從instance A中拷貝數據到instance B]

我最近安裝了CloudFoundry,UAA也可以註冊用戶。我想問能不能註冊成爲admin的?或者給一個已註冊的用戶admin權限?那樣該用戶通過vmc就能對其它用戶進行一些操作了(list, add, delete等)。還有就是用戶註冊得通過我批准才行。
答:當前版本的cloud_controller有一個admin白名單在cloud_controller.yml(別忘了重啓cc哦~), 如果你創建的用戶的郵箱和裏面的一樣,那他就能成爲admin。下一版本中,在UAA database裏會有一個uaa.admin的組。想讓UAA成爲真正事實上的管理用戶的工具,你得有一個痛苦的等待過程(比如:舊的cloud_controller得被廢除)。UAA提供了SCIM/Users端點(最近還有/Groups),你可以使用它們來管理用戶。。。

上傳大應用,如何解決超時問題?我從vmc client和router接收到超時。
答:更改了nginx configration以便能上傳大應用,但router或cloud_controller還是報錯,我在哪修改?


用UAA/ACM來進行SCIM, 授權,訪問控制?

服務如何備份(冗餘)?
答:通過snapshot(快照)可部分解決您的問題

題外話:cf-console編碼問題請參考 這裏

* ccdb是postgresql, 那麼我能否將ccdb從cc中分離到另一虛擬機,然後配置cc的數據庫指向ccdb即可。這樣就能間接實現H/A (高併發),你認爲這可行嗎?
* 我在某處讀到即使NATS服務掛了,cloud controller(甚至整個CF系統仍然能工作),是不是這樣啊?您能不能具體說一下細節。

* 可不可以這樣:我就用一臺單獨的虛擬機裝NATS,然後其它組件指向它?


最近,我發現:在單結點上安裝CF時新增了一個組件叫UAA,而在此之前是沒有的。

但是,當我按照"Single/Multi Node VCAP Deployment using dev_setup"多結點安裝CF,我卻發現在"rest 組件上"根本就沒有布暑/運行UAA。

那麼,我想問:有必要把UAA放到我的"rest 結點上"嗎?或者說我有必要添加UAA到我的 'deployments/devbox.yml'並重新安裝嗎?

答:UAA用於用戶賬號管理。(https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-APIs.rst). 

其基本代碼已經寫好,但(還沒成熟,所以)到目前爲止"只有你註冊郵件是 *@vmware.com 纔會用效",否則cloud controller仍會按照以前的驗證方式進行。過不了多久,這個限制也會被廢除!到時候所有的賬號都要通過UAA驗證。

[題外話]此問題已過時,但比較有意思,故保留在此。


支持自定義域名嗎?

答:目前還不支持。不過我們已經在開發,目前處於demo階段。一旦完成,到時候將會很簡單,你只需:

1. 更新你的cloud_controller配置..

allow_external_app_uris: true

# This dicatates what the uri namespace rules

# are for apps. Admins can overide any of the

# below accept taking a used uri.

app_uris:

  allow_external: true

2. 確保DNS指向的外部的 hostname, IP 運行在 nginx/router 的80端口之上。


如何在外部訪問雲裏的服務?比如用流行的SqlYog來進行管理?

答:這個需求很典型。我們把它放在了第一任務裏,您再等等吧。麪包會有的~~


vmc push 時在 Staging Application 這一步出現 504 錯誤

答:新的CF已經將 stager (打包/預編譯)剝離出來,在你安裝 cloud controller 的那配置文件(通常是 rest.yml )里加上 "- stager", 再重新安裝。這錯誤應該能解決了。

提示 "runtime no support"

答:要學會看錯誤提示,從這裏可以看出是 "executable"不對,也就是說我們期望的可執行文件的路徑不對。到rest節點下的 runtimes.yml 文件裏把和這"相關的可執行文件的路徑"改正過來,再跑一遍就OK了。此外,有時候你上傳app成功,也能啓動,但通過 "vmc apps" 卻發現 'Health' 是 0.0%也和這問題有關,解決辦法一樣的。

Ruby,錯誤日誌,CF本身,Google - 玩轉CloudFoundry你要懂的四樣東西,還有就是"熱情"。


我使用 vmc 測試自己布暑的 CloudFoundry 老是出錯,不能登錄怎麼辦?

答:這是CloudFoundry使用 gem 'cfoundry' 給我們挖的一個坑,建議您在測試時不要使用 vmc 0.3.21和vmc 0.3.23 而是 0.3.18 不過使用過程中請隨時做好出錯的準備。更新:在 cloud_controller.yml 的uaa部分顯式的指定 8080 端口,重啓也不能解決。

uaa:
  enabled: true
  url: http://uaa.youdomain.com:8080

原因可能是 我們驗證的路徑類似這樣:

url: http://uaa.vcap.me/oauth/token

而在實際中要指定8080端口才行,也就是說:http://uaa.vcap.me:8080/oauth/token


布暑CloudFoundry對機器,操作系統有什麼要求嗎?我的資源有限~~

答:官方建議操作系統目前最好用 Ubuntu 10.04  64位,內在不少於 1G ... ....當你正常布暑CF剛開始能用,但上傳應用一段時間就崩潰, 沒準是你機子性能不滿足要求(我曾經在多結點上布暑,rest 所在結點用的是VPS, dea, services結點是虛擬機,因爲VPS爲512M內存,能看出CF對資源的要求,跑一下就崩潰了 ~^.^~)


我進行多節點安裝時,安裝很勝利。但 start 時卻有的服務/組件(比如: mysql)報錯,怎麼回事?我在報錯信息裏看到有 "(Gem::LoadError)" 之類的東東,這是什麼

答:如果你對 ruby 有所瞭解就應該知道,這是你安裝的組件對部分 ruby gem 有依賴,而你的系統裏沒有安裝。你可以這麼解決直到安裝組件所在的路徑 cd ~/cloudfoundry/vcap/services/mysql 然後 source ~/.cloudfoundry_deployment_profile 再執行 bundle 就行了。當然了可能系統提示沒有'bundle',這時你需要 gem i bundler 。(提示:如果這條命令還報錯, 那你還是瞭解一下ruby吧)


我上傳代碼時經常到 staging 這一步就報錯了,CF如何對我上傳的app製件成droplet的?我想大概知道整個過程,但對具體實現不太感興趣,能幫幫我嗎?

答:您所說的功能對應着的是CF中的 stager 組件,整個過程您可以通過查看這裏https://github.com/cloudfoundry/stager/blob/master/lib/vcap/stager/task.rb#L47 得到大致瞭解,整個預編譯(打包)過程都在這。即使您不想看代碼,看註釋就夠了! —— [題外話]如果您在閱讀CloudFoundry源代碼,對預編譯(打包)階段感興趣,強烈建議從上面鏈接的 task.rb 文件開始,一步一步跟蹤如何實現的。它是整個 stager 組件的'核心'!

整個過程由您所熟悉的命令 mkdir,curl,unzip,ruby,tar 封裝而成。


我已經用 https://github.con/cloudfoundry/vcap 安裝好CF了,安裝時用的是默認的 http://api.vcap.me
現在我想換成自己的域名,比如:http://test.mydomain.com 我要怎麼做?
答:如果你可以重新安裝的話,建議在您安裝時加上 -D test.mydomain.com 選項,這樣所得到的域名就是你自己的了。
如果你認爲重新安裝麻煩,其實你還可以這麼做:
修改在 ~/cloudfoundry/.deployment/devbox/conf/ 下的 *.yml
將其中的 "api.vcap.me" 和 "localhost/127.0.0.1" 換成 "你的域名" 和 "你的 IP 地址",我就是這麼做的,確實可行!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章