天天看點

對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 位址",我就是這麼做的,确實可行!