本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

輕鬆上手 Kubernetes

Kelsey Hightower 寫了一本關於 Kubernetes 的寶貴指南,名為《Kubernetes 難上手指南》。對於那些希望深入瞭解 Kubernetes 的人來說,這是一個很棒的資源,但如果您想以輕鬆模式使用 Kubernetes 呢?這是我們一直與 Google Cloud 合作的內容。在本指南中,我們將向您展示如何啟動和執行叢集,以及如何實際將程式碼部署到該叢集並執行它。

這就是輕鬆使用 Kubernetes 的方法。

我們將完成的任務

  1. 1.設定叢集
  2. 2.將應用程式部署到叢集
  3. 3.透過滾動更新自動化部署

先決條件

  • 一個容器化應用程式
  • 您也可以使用一個演示應用程式
  • 一個 Google Cloud 賬戶或在其他提供商上執行的 Kubernetes 叢集
  • 叢集建立之後的所有步驟都與所有提供商相同。
  • 一個Codefresh的免費賬戶
  • Codefresh 是一項處理 Kubernetes 部署配置和自動化的服務。

我們為開源專案免費提供 Codefresh,併為私人專案每月免費提供 200 次構建,以儘可能簡化 Kubernetes 的採用。您可以隨意在任意數量的叢集上部署任意數量的內容。

設定叢集

  1. cloud.google.com 上建立一個賬戶並登入。

注意:如果您使用的是 Google Cloud 之外的叢集,可以跳過此步驟。

Google Container Engine 是 Google Cloud 的託管 Kubernetes 服務。根據我們的測試,它既強大又易於使用。

如果您是平臺新手,可以在此過程結束時獲得 500 美元的信用額度。

  1. 開啟選單,向下滾動到 Container Engine。然後選擇 Container Clusters

  1. 點選建立叢集。

第 1 步已完成。根據我的經驗,建立叢集通常需要不到 5 分鐘。

將應用程式部署到 Kubernetes

首先訪問 Codefresh 並使用 GitHub、Bitbucket 或 Gitlab 建立賬戶。如前所述,Codefresh 對開源和小型私有專案都是免費的。我們將使用它來建立部署應用程式到 Kubernetes 所需的配置 Yaml。然後我們將部署我們的應用程式並自動化該過程,使其在每次提交程式碼更改時都發生。以下是步驟:

  1. 1. 建立 Codefresh 賬戶
  2. 2. 連線到 Google Cloud(或其他叢集)
  3. 3. 新增叢集
  4. 4. 部署靜態映象
  5. 5. 構建並部署映象
  6. 6. 自動化流程

連線到 Google Cloud

要連線您在 Google Container Engine 中的叢集,請轉到 賬戶設定 > 整合 > Kubernetes,然後點選認證。這將提示您使用 Google 憑據登入。

登入後,所有叢集都可在 Codefresh 中使用。

新增叢集

要新增您的叢集,請點擊向下箭頭,然後點選新增叢集,選擇專案和叢集名稱。您現在可以部署映象了!

可選:使用備用叢集

要連線非 GKE 叢集,我們需要向 Codefresh 新增令牌和證書。轉到 帳戶設定(左下)> 整合 > Kubernetes > 配置 > 新增提供商 > 自定義提供商。展開下拉選單並點選新增叢集

按照說明生成所需資訊,然後點選儲存。您的叢集現在將顯示在 Kubernetes 選項卡下。

將靜態映象部署到 Kubernetes

現在是最有趣的部分了!Codefresh 提供了一個易於修改的樣板,它負責為您的應用程式配置 Kubernetes 的繁重工作。

  1. 單擊Kubernetes選項卡:這將顯示名稱空間的列表。

可以將名稱空間視為在 Kubernetes 叢集上有點像 VLAN 的作用。每個名稱空間可以包含所有需要相互通訊的服務。目前,我們只使用預設名稱空間(簡單方法!)。

  1. 點選新增服務並填寫詳細資訊。

您可以使用我之前提到的帶有 Node.js 前端和 MongoDB 的演示應用程式

以下是我們所需的資訊:

叢集 - 這是我們之前新增的叢集,我們的應用程式將部署到該叢集。
名稱空間 - 我們將使用預設名稱空間,但如果您願意,可以建立並使用新的名稱空間。名稱空間是用於對與應用程式關聯的所有服務進行分組的離散單元。
服務名稱 - 您可以隨意命名服務。由於我們正在部署 Mongo,我將其命名為 mongo!
暴露埠 - 我們不需要將埠暴露到叢集外部,所以暫時不勾選此框,但我們會指定一個埠,其他容器可以透過此埠與此服務通訊。Mongo 的預設埠是“27017”。
映象 - Mongo 是 Dockerhub 上的一個公共映象,所以我可以透過名稱和標籤“mongo:latest”引用它。
內部埠 - 這是 mongo 應用程式監聽的埠,在本例中仍然是“27017”。

我們暫時可以忽略其他選項。

  1. 向下滾動並單擊部署

砰!您剛剛將此映象部署到 Kubernetes。透過點選狀態,您可以看到服務、部署、副本和 Pod 都已配置並正在執行。如果點選編輯 > 高階,您可以檢視和編輯與此應用程式關聯的所有原始 YAML 檔案,或者複製它們並將其放入您的儲存庫中,以便在任何叢集上使用。

構建並部署映象

為了讓我們的演示應用程式的其餘部分啟動並執行,我們需要構建並部署應用程式的 Node.js 部分。為此,我們需要將我們的儲存庫新增到 Codefresh。

  1. 點選 儲存庫 > 新增儲存庫,然後複製並貼上 demochat 儲存庫 URL(或使用您自己的儲存庫)。

我們可以選擇使用 Dockerfile,或者如果需要幫助建立 Dockerfile,則可以使用模板。在這種情況下,demochat 儲存庫已經有一個 Dockerfile,所以我們將選擇它。點選接下來的幾個螢幕,直到映象構建完成。

構建完成後,映象會自動儲存在 Codefresh Docker 登錄檔中。您也可以將任何其他登錄檔新增到您的賬戶並使用它。

要部署映象,我們需要:

  • 一個拉取金鑰
  • 映象名稱和登錄檔
  • 將使用的埠

建立拉取金鑰

拉取金鑰是 Kubernetes 叢集用來訪問私有 Docker 登錄檔的令牌。要建立一個,我們需要生成令牌並將其儲存到 Codefresh。

  1. 點選使用者設定(左下角)並生成一個新的令牌。

  2. 將令牌複製到剪貼簿。

  1. 轉到 賬戶設定 > 整合 > Docker 登錄檔 > 添加註冊表 並選擇 Codefresh 登錄檔。貼上您的令牌並輸入您的使用者名稱(區分大小寫)。您的使用者名稱必須與螢幕左下角顯示的名稱匹配。

  2. 測試並儲存。

稍後部署映象時,我們將能夠建立我們的 secret。

獲取映象名稱

  1. 點選映象並開啟您剛剛構建的映象。在註釋下,您將看到以 r.cfcr.io 開頭的映象名稱。

  1. 複製映象名稱;我們稍後需要貼上它。

將私有映象部署到 Kubernetes

我們現在可以部署我們構建的映象了。

  1. 轉到 Kubernetes 頁面,像我們部署 mongo 一樣,點選新增服務並填寫頁面。請務必選擇您之前部署 mongo 時使用的相同名稱空間。

現在讓我們暴露埠,以便我們可以訪問此應用程式。這將配置一個 IP 地址並自動配置入口。

  1. 點選部署:您的應用程式將在幾秒鐘內啟動並執行!IP 地址的配置可能需要更長時間,具體取決於您的叢集位置。

在此檢視中,您可以擴充套件副本、檢視應用程式狀態以及執行類似任務。

  1. 點選 IP 地址檢視正在執行的應用程式。

至此,您的整個應用程式應該已經啟動並運行了!沒那麼糟吧?現在開始自動化部署!

自動化部署到 Kubernetes

每次我們更改應用程式時,我們都希望構建新映象並將其部署到叢集中。我們已經設定了自動化構建,但要自動化部署,請按以下步驟操作:

  1. 點選儲存庫(左上角)。

  2. 點選 demochat 儲存庫的管道(齒輪圖示)。

  1. 最好在部署前執行一些測試。在構建和單元測試下,為單元測試指令碼新增 npm test。

  2. 點選部署指令碼並選擇Kubernetes (Beta)。輸入您已部署的服務資訊。

您可以看到使用儲存庫中的部署檔案或使用剛剛生成的部署檔案的選項。

  1. 點選儲存

您已完成部署自動化!現在,每當發生更改時,映象都會進行構建、測試和部署。

結論

我們希望讓每個團隊(而不僅僅是大型企業團隊)都能輕鬆採用 Kubernetes,同時保留 Kubernetes 的所有強大功能和靈活性。在 Kubernetes 服務螢幕上的任何時候,您都可以切換到 YAML 檢視,檢視您在此演練中執行的配置所生成的所有 YAML 檔案。您可以調整檔案內容,複製並貼上到本地檔案等。

本演練為所有人提供了一個堅實的起點。準備就緒後,您可以直接調整實體以指定所需的精確配置。

我們很樂意聽取您的反饋!請在Twitter上與我們分享,或直接聯絡我們

附錄

您有影片指導我完成此過程嗎? 當然有

這適用於 Helm Chart 嗎? 是的!我們目前正在與有限的使用者群試用 Helm Chart。如果您想提前試用,請聯絡我們。

這適用於任何 Kubernetes 叢集嗎? 它應該適用於任何 Kubernetes 叢集,並且已針對 Kubernetes 1.5 及更高版本進行測試。

我可以在自己的資料中心部署 Codefresh 嗎? 當然,Codefresh 基於 Kubernetes 構建,並使用 Helm Chart。Codefresh 雲版對開源專案免費,每月提供 200 次構建。Codefresh 本地部署目前僅供企業使用者使用。

每次更新都會清除資料庫嗎? 是的,在這種情況下,我們跳過了建立持久卷。配置持久卷需要更多工作,如果您願意,請隨時聯絡我們,我們很樂意提供幫助!