編者按:本文由Wercker CTO Andy Smith 分享,他分享了Kubernetes如何幫助他們節省時間並加速開發。本文是關於Kubernetes 1.3新功能一系列深入文章的第九篇。
我們在Wercker執行數百萬容器執行使用者的CI/ CD工作。這些容器的生命週期大多是短暫的,構建、測試和部署完成後,這些容器的生命週期隨之結束。
雖然多數容器的生命是短暫的,但我們傾向於持續執行我們的基礎設施。通常情況下我們需要跨多節點執行多個容器,所以一個高度可擴充套件的排程程式就顯得非常有必要。我們決定使用Kubernetes。
Wercker 是容器中心自動化平臺,它幫助開發人員構建、測試並部署應用程式。
我們支援任何數量的pipelines,從程式碼構建、測試微服務間的API協議、上傳映象和部署到排程器。
所有這些pipeline都執行在Docker容器中,而且每個環節都是一個Docker容器。
當然,我們使用Wercker自身來構建Wercker並部署到Kubernetes中!
概述
我們是一個執行雲原生應用的平臺,在隔離上做了很多設計決策。在底層,我們使用CoreOS和cloud-init 啟動一個異構節點的叢集,我把這些節點命名為Patricians(貴族)、Peasants(農民)、 Controller(控制器)。
對於Controller 節點,也許我們應該使用Constables(警察)這個叫法。
貴族節點佔據我們基礎設施的一大部分,這些節點有適當的網路介面與後端服務通訊,同時還作為各種負載均衡器的 endpoints。
這些節點上還執行著下面三類服務:
1.日誌蒐集服務,併傳送到日誌服務
2.很多用於報告和處理job執行結果的服務
3.處理API 呼叫的微服務
農民節點用於執行公共服務,包括處理job的Pod,它用於從job 佇列讀取job,並聲稱新的pod以處理job的執行。
job 本身是開源CLI工具的化身,你可以用Docker安裝並執行在你的筆記本上。
農民節點對基礎設施的訪問許可權十分有限,執行job的容器也是高度隔離的。
Controllers是控制器,對於這類節點的功能,你儘管望文生義就對了。
動態Pods
我們的服務對Kubernetes API 有重度依賴,每一個job啟動時,系統都會動態建立Pod,這個Pod為job提供了執行環境。
從佇列中獲取 job 描述後,我們定義了一個新的 pod,新的Pod 包含執行檢查程式碼、快取管理、執行job並上傳結果的相關環境。
我們啟動pod,監控它的程式,並在 job 結束後銷燬它。
Ingresses
為了給 HTTP API 提供後端服務,並提供自注冊功能,我們使用了Kubernetes 的 Ingress 功能。
設定 Ingress 並不是很簡單,但是通過閱讀nginx 例子,我們最終發現了一個將後端服務連線到前端的好方法。
1.3 即將釋出的功能
儘管我們把pods和容器當成是短暫的,並期望它能夠在故障時快速重啟,同時我們也期待使用Pet Sets 和Init Containers 優化我們的工作流。
對於Minikube得到官方支援,我們也很欣慰,因為它提高了我們的本地測試和開發的效率。
結論
Kubernetes在管理跨節點的多個容器時,為我們省掉了大量的關鍵工作。
它提供了一個強大的API和工具來檢視,包含多內建日誌支援、度量、監控和除錯。
僅服務發現和網路這兩項就為我們節省了很多時間,大大加速了開發進度。
祝 Kubernetes 正式版一週年快樂,也祝願它越來越好:)。