本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Kubernetes 的簡易方式
Kelsey Hightower 為 Kubernetes 撰寫了一份非常寶貴的指南,名為 Kubernetes Hard Way。對於那些想要了解 Kubernetes 內部運作原理的人來說,這是一份很棒的資源,但如果您想要讓 Kubernetes 進入簡易模式呢?這是我們一直與 Google Cloud 合作開發的項目。在本指南中,我們將向您展示如何啟動並執行叢集,以及如何實際將您的程式碼部署到該叢集並執行它。
這就是 Kubernetes 的簡易方式。
我們將完成的目標
- 1. 設定叢集
- 2. 將應用程式部署到叢集
- 3. 使用滾動更新自動化部署
先決條件
- 容器化的應用程式
- 您也可以使用示範應用程式。
- Google Cloud 帳戶或另一個供應商上的 Kubernetes 叢集
- 叢集建立之後的所有步驟在所有供應商上都是相同的。
- Codefresh 上的免費帳戶
- Codefresh 是一項處理 Kubernetes 部署組態和自動化的服務。
為了盡可能簡化 Kubernetes 的採用,我們讓 Codefresh 對於開源專案免費,並為私人專案提供每月 200 個免費建置。您可以隨意在任意數量的叢集上部署。
設定叢集
- 在 cloud.google.com 建立帳戶並登入。
注意:如果您使用 Google Cloud 以外的叢集,則可以跳過此步驟。
Google Container Engine 是 Google Cloud 的託管 Kubernetes 服務。在我們的測試中,它既強大又易於使用。
如果您是該平台的新手,您可以在此流程結束時獲得 500 美元的抵用金。
- 開啟選單並向下捲動至 Container Engine。然後選取 Container Clusters。
- 按一下 建立叢集。
我們已完成步驟 1。以我的經驗,建立叢集通常需要不到 5 分鐘的時間。
將應用程式部署到 Kubernetes
首先前往 Codefresh 並使用 GitHub、Bitbucket 或 Gitlab 建立帳戶。如先前所述,Codefresh 對於開源和較小的私人專案都是免費的。我們將使用它來建立部署應用程式到 Kubernetes 所需的組態 Yaml。然後我們將部署我們的應用程式並自動化該流程,使其在每次我們提交程式碼變更時發生。以下是步驟
- 1. 建立 Codefresh 帳戶
- 2. 連線到 Google Cloud(或其他叢集)
- 3. 新增叢集
- 4. 部署靜態映像檔
- 5. 建置和部署映像檔
- 6. 自動化該流程
連線到 Google Cloud
若要連線您的 Google Container Engine 中的叢集,請前往帳戶設定 > 整合 > Kubernetes 並按一下 驗證。這會提示您使用您的 Google 憑證登入。
登入後,您的所有叢集都可在 Codefresh 中使用。
新增叢集
若要新增您的叢集,請按一下向下箭頭,然後按一下 新增叢集,選取專案和叢集名稱。您現在可以部署映像檔了!
選項:使用替代叢集
若要連線非 GKE 叢集,我們需要將權杖和憑證新增到 Codefresh。前往帳戶設定(左下角)> 整合 > Kubernetes > 組態 > 新增供應商 > 自訂供應商。展開下拉式選單並按一下 新增叢集。
依照關於如何產生所需資訊的指示,然後按一下「儲存」。您的叢集現在會出現在 Kubernetes 標籤下。
將靜態映像檔部署到 Kubernetes
現在進入有趣的部分!Codefresh 提供一個易於修改的樣板,可處理為您的應用程式組態 Kubernetes 的繁重工作。
- 按一下 Kubernetes 標籤:這會顯示命名空間的清單。
將命名空間視為在 Kubernetes 叢集上作用有點像 VLAN。每個命名空間都可以包含 Kubernetes 叢集上需要彼此通訊的所有服務。目前,我們將僅使用預設命名空間(簡易方式!)。
- 按一下 新增服務 並填寫詳細資訊。
您可以使用我先前提及的示範應用程式,其具有 Node.js 前端和 MongoDB。
這是我們需要傳遞的資訊
叢集 - 這是我們稍早新增的叢集,我們的應用程式將部署在此處。
命名空間 - 我們將使用預設命名空間,但如果您願意,可以建立並使用新的命名空間。命名空間是將與應用程式相關聯的所有服務分組的離散單元。
服務名稱 - 您可以隨意命名服務。由於我們正在部署 Mongo,我將其命名為 mongo!
公開埠 - 我們不需要在叢集外部公開埠,因此我們目前不會勾選此方塊,但我們會指定其他容器可以與此服務通訊的埠。Mongo 的預設埠為「27017」。
映像檔 - Mongo 是 Dockerhub 上的公開映像檔,因此我可以依名稱和標籤「mongo:latest」來參考它。
內部埠 - 這是 mongo 應用程式接聽的埠,在此案例中,它再次是「27017」。
我們現在可以忽略其他選項。
- 向下捲動並按一下 部署。
砰!您剛剛已將此映像檔部署到 Kubernetes。您可以透過按一下狀態來看到服務、部署、副本和 Pod 都已組態並正在執行。如果您按一下「編輯」>「進階」,您可以查看和編輯與此應用程式相關聯的所有原始 YAML 檔案,或複製它們並將它們放入您的儲存庫中,以便在任何叢集上使用。
建置和部署映像檔
若要啟動並執行我們示範應用程式的其餘部分,我們需要建置和部署應用程式的 Node.js 部分。若要執行此操作,我們需要將我們的儲存庫新增到 Codefresh。
- 按一下儲存庫 > 新增儲存庫,然後複製並貼上 demochat 儲存庫 URL(或使用您自己的儲存庫)。
我們可以選擇使用 dockerfile,或者如果我們需要協助建立 dockerfile,則可以使用範本。在此案例中,demochat 儲存庫已具有 dockerfile,因此我們將選取該檔案。按一下接下來的幾個畫面,直到映像檔建置完成。
建置完成後,映像檔會自動儲存在 Codefresh docker 登錄檔中。您也可以將任何其他登錄檔新增到您的帳戶並改為使用該登錄檔。
若要部署映像檔,我們需要
- 提取密鑰
- 映像檔名稱和登錄檔
- 將使用的埠
建立提取密鑰
提取密鑰是 Kubernetes 叢集可用於存取私人 Docker 登錄檔的權杖。若要建立一個,我們需要產生權杖並將其儲存到 Codefresh。
按一下 使用者設定(左下角)並產生新的權杖。
將權杖複製到您的剪貼簿。
前往帳戶設定 > 整合 > Docker 登錄檔 > 新增登錄檔並選取 Codefresh 登錄檔。貼上您的權杖並輸入您的使用者名稱(輸入區分大小寫)。您的使用者名稱必須與螢幕左下角顯示的名稱相符。
測試並儲存它。
我們現在將能夠在稍後部署映像檔時建立我們的密鑰。
取得映像檔名稱
- 按一下 映像檔 並開啟您剛建置的映像檔。在註解下,您會看到以 r.cfcr.io 開頭的映像檔名稱。
- 複製映像檔名稱;稍後我們需要貼上它。
將私人映像檔部署到 Kubernetes
我們現在已準備好部署我們建置的映像檔。
- 前往 Kubernetes 頁面,就像我們對 mongo 所做的那樣,按一下「新增服務」並填寫頁面。請務必選取您先前用於部署 mongo 的相同命名空間。
現在讓我們公開 Port,以便存取此應用程式。這會佈建 IP 位址,並自動設定 Ingress。
- 點擊 Deploy (部署):您的應用程式將在幾秒鐘內啟動並執行!IP 位址的佈建可能需要較長時間,具體取決於您的叢集位置。
從此視窗中,您可以擴展副本數量、查看應用程式狀態以及執行類似的工作。
- 點擊 IP 位址以檢視正在執行的應用程式。
到這裡,您應該已讓整個應用程式啟動並執行!還不錯吧?現在來自動化部署!
Kubernetes 自動化部署
每次我們變更應用程式時,都希望建置新的映像並將其部署到叢集。我們已經設定了自動化建置,但若要自動化部署
點擊 Repositories (儲存庫) (左上方)。
點擊 demochat 儲存庫的 Pipeline(齒輪圖示)。
在部署之前執行一些測試是個好主意。在Build and Unit Test (建置與單元測試) 下方,為單元測試腳本新增 npm test。
點擊 Deploy Script (部署腳本) 並選取 Kubernetes (Beta)。輸入您已部署服務的資訊。
您可以看到從儲存庫中使用部署檔案,或使用您剛產生的部署檔案的選項。
- 點擊 Save (儲存)。
您已完成部署自動化!現在,每當進行變更時,就會自動建置、測試和部署映像。
結論
我們希望讓每個團隊(而不僅僅是大型企業團隊)都能輕鬆採用 Kubernetes,同時保留 Kubernetes 的所有強大功能和彈性。在 Kubernetes 服務畫面的任何時候,您都可以切換到 YAML 以檢視您在此逐步解說中執行的設定所產生的所有 YAML 檔案。您可以調整檔案內容、複製並貼到本機檔案等等。
此逐步解說為所有人提供了一個穩固的起點。準備就緒後,您可以直接調整實體,以指定您想要的確切設定。
我們非常歡迎您的意見反應!請在 Twitter 上與我們分享,或直接聯繫我們。
附錄
你們有影片逐步引導我完成此操作嗎? 當然有。
這適用於 Helm Charts 嗎? 是的!我們目前正在有限的一組使用者中試行 Helm Charts。如果您想搶先試用,請聯絡我們。
這適用於任何 Kubernetes 叢集嗎? 它應適用於任何 Kubernetes 叢集,並已針對 Kubernetes 1.5 以上版本進行測試。
我可以在自己的資料中心部署 Codefresh 嗎? 當然,Codefresh 是在 Kubernetes 之上使用 Helm Charts 建構的。Codefresh 雲端對開放原始碼專案免費,每月提供 200 次建置。Codefresh 內部部署目前僅適用於企業使用者。
每次更新時資料庫不會被清除嗎? 是的,在這種情況下,我們跳過了建立持久卷。設定持久卷需要做更多的工作,如果您需要協助,請隨時與我們聯繫,我們很樂意提供協助!