作為一款重要的容器編排工具,Kubenetes Deployment能夠為我們帶來出色的部署能力——但在實際操作中,我們該如何將其整合至自己的Codeship工作流當中?這個問題的具體答案取決于您所使用的實際Kubernetes主機,而在今天的文章中,我們將選擇Google Cloud作為目標平臺進行探討。
將Codeship與Kubernetes相結合
Codeship本身已經在其CI Platform for Docker當中內置有部分Google Cloud集成機制,因此我們可以直接在Google Cloud上驗證并部署新鏡像。
在動手進行之前,我們還需要利用Codeship的CLI工具創建一個加密環境文件,旨在進行面向Google Cloud的身份驗證。
該環境的變量應設置為如下形式:
Google Cloud Key: GOOGLE_AUTH_JSON.
Google Authentication Email: GOOGLE_AUTH_EMAIL.
Google Project ID: GOOGLE_PROJECT_ID.
在完成了加密環境文件的創建并將Google Cloud環境變量保存至gc.env.encrypted后,接下來我們需要在codeship-services.yml文件內定義Google Cloud服務。
請注意,這里定義了兩項服務而非一項。這是因為其一用于同Google Cloud各服務進行交互(google_cloud_deployment),而其二則用于啟用將Docker鏡像推送至Google Cloud Registry(gcr_dockercfg)的功能。
然而到這里問題只解決了一半。雖然其已經創建了與Google Cloud交換所需要的服務,但并不能自動部署新構建的鏡像或者更新Kubernetes Deployment。
谷歌容器注冊表推送
由于Codeship內置有推送機制,因此我們能夠輕松將Docker鏡像部署在遠程注冊表內。利用前文中定義的gcr_dockercfg服務,我們只需要將谷歌容器注冊表URL作為目的地向codeshipsteps.yml文件中添加即可。
重要的是,由于我們需要部署自己的應用鏡像,所以請務必確保將應用服務名稱替換為您自己希望運行的應用服務名稱。
以上參數已經非常清晰,相信不必過多解釋,其基本思路是利用之前定義的gcr_dockercfg服務進行身份驗證,并將應用鏡像推送至谷歌容器注冊表當中。
雖然此步驟能夠將更新鏡像推送至注冊表,但當前定義仍然存在問題。由于未設置Docker鏡像標簽,因此Codeship將把更新鏡像推送至latest標簽。盡管就目前來看這并不會造成什么麻煩,但為了觸發Kubernetes Deployment的自動更新機制,我們還需要為各個推送設置不同標簽。
為了實現這一點,Codeship提供一條image_tag聲明,允許我們為需要推送的鏡像設置除latest以外的任何標簽。出于簡單起見,這里我們直接使用Unix時間戳以保證其惟一性與可重復性。
使用新的image_tag聲明,此前步驟將如下所示:
現在當我們將應用鏡像推送至谷歌容器注冊表時,系統即會使用當前版本的Unix時間戳作為其標簽。
原文標題:Continuous Deployment of Docker Apps to Kubernetes