检查点
Deploy GKE clusters
/ 30
Deploy Pods to GKE clusters
/ 35
Deploy a new pod using a Yaml file
/ 35
透過 Cloud Shell 部署 GKE Autopilot 叢集
總覽
在本研究室中,您將透過指令列建構 GKE 叢集、檢查 kubeconfig 檔案,並使用 kubectl
控制叢集。
目標
在這個研究室中,您會瞭解如何執行下列工作:
- 使用
kubectl
建構及控制 GKE 叢集 - 透過
kubectl
和設定檔部署 Pod - 使用 Container Registry 儲存及部署容器
設定研究室
存取 Qwiklabs
在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。
-
請透過無痕式視窗登入 Qwiklabs。
-
請記下研究室的存取時間 (例如
1:15:00
),並確保自己能在時間限制內完成作業。
研究室不提供暫停功能。如有需要,您可以重新開始,但原先的進度恕無法保留。 -
準備就緒後,請按一下「Start lab」。
-
請記下研究室憑證 (使用者名稱和密碼),這組資訊將用於登入 Google Cloud 控制台。
-
按一下「Open Google Console」。
-
按一下「Use another account」,然後複製這個研究室的憑證,並貼入提示訊息。
如果使用其他憑證,系統會顯示錯誤或向您收取費用。 -
接受條款,然後略過資源復原頁面。
完成初始登入步驟後,就會看到專案資訊主頁。
開啟 Cloud Shell
您將在 Cloud Shell 中進行大部分的工作。Cloud Shell 是在 Google Cloud 中運作的指令列環境,這種以 Debian 為基礎的虛擬機器,搭載各種您需要的管理工具 (例如 docker
、gcloud、gsutil
和 kubectl
),而且主目錄配備 5 GB 的永久磁碟儲存空間。
- 在 Google Cloud 控制台的標題列中,點選「啟用 Cloud Shell」圖示 。
- 點選「繼續」。
系統會花費一些時間佈建,然後顯示下列 Cloud Shell 提示:
工作 1:部署 GKE 叢集
您將在這項工作中,使用 Cloud Shell 部署 GKE 叢集。
- 在 Cloud Shell 輸入下列指令,設定可用區和叢集名稱的環境變數:
- 在 Cloud Shell 輸入下列指令,建立 Kubernetes 叢集:
這種形式的指令會將大部分的選項設為預設值。如要查看完整的可用選項組合,請參閱 gcloud container clusters create 參考資料。
系統會顯示多則警告,說明 GKE 已採行數項預設 GKE 叢集設定變更,而這些變更是以新版 Kubernetes 的形式導入。
部署完畢後,Google Cloud 控制台的「Kubernetes Engine」>「叢集」頁面應該會如下列螢幕截圖所示:
點選「Check my progress」,確認目標已達成。
工作 2:連線至 GKE 叢集
在這項工作中,您會透過 Cloud Shell 向 GKE 叢集進行驗證,然後檢查 kubectl 設定檔。
以下兩種情況皆適用 Kubernetes 驗證機制:透過在主要節點上運作的 kube-APIserver 從外部用戶端與叢集進行通訊,以及叢集容器在叢集內或外部進行通訊。
在 Kubernetes 中,可透過數種形式進行驗證。就 GKE 而言,驗證通常是透過 OAuth2 權杖處理,而且在整個專案中皆可以整體形式透過 Cloud Identity and Access Management 進行管理。您也可以選擇套用角色式存取權控管機制 (可在各個叢集內定義及設定),以此做為驗證措施。
在 GKE 中,叢集容器可透過服務帳戶向外部資源進行驗證並存取該資源。
- 如要以目前使用者的憑證建立 kubeconfig 檔案 (目的為允許驗證),並提供特定叢集的端點詳細資料 (以允許透過
kubectl
指令列工具與該叢集通訊),請執行下列指令:
如果相關設定尚未存在的話,這個指令會在主目錄中建立 .kube
目錄,然後在 .kube
目錄中建立一個用來儲存驗證和設定資訊的檔案,名稱為 config
。這個設定檔通常稱為 kubeconfig 檔案。
- 使用 nano 文字編輯器開啟 kubeconfig 檔案:
您現在可以檢查檔案中儲存的所有驗證和端點設定資料。畫面上應該會顯示叢集的資訊,這項資訊是在叢集建立時填入。
- 按下 CTRL+X 鍵,退出 nano 編輯器。
current-context
屬性會指出現行環境 (即 kubectl
指令所控制的叢集)。
由於這個叢集建立時,系統便已填入相關叢集的詳細資料,因此您不必再執行 gcloud container clusters get-credentials
指令,為同一個環境 (同一個使用者在同一個環境) 中建立的叢集填入 kubeconfig 檔案。不過,如要連線至在其他環境中或由其他使用者建立的叢集,就必須執行這個指令。這個指令還可讓您輕鬆將現行環境切換成其他叢集。
工作 3:透過 kubectl 檢查 GKE 叢集
您將在這項工作中,使用 Cloud Shell 和 kubectl 檢查 GKE 叢集。
填入 kubeconfig 檔案並將現行環境設為特定叢集後,便可使用 kubectl
指令列工具對該叢集執行指令。這類指令大多最終都會對主要 API 伺服器觸發 REST API 呼叫,進而觸發相關的操作。
- 在 Cloud Shell 中執行下列指令,系統就會顯示 kubeconfig 檔案的內容:
系統會將機密的憑證資料更換為「DATA+OMITTED」。
- 在 Cloud Shell 中執行下列指令,系統就會顯示現行環境的叢集資訊:
輸出內容會描述現行環境叢集。
輸出內容:
- 在 Cloud Shell 中執行下列指令,系統就會顯示現行環境:
畫面上會顯示一行輸出內容,指出現行環境叢集。
輸出內容:
PROJECT_ID
是您的專案 ID。這項資訊和 kubeconfig 檔案中 current-context
屬性提供的資訊一樣。
- 在 Cloud Shell 中執行下列指令,系統就會顯示 kubeconfig 檔案中所有叢集環境的某些詳細資料:
畫面上會顯示數行輸出內容,提供您建立的叢集詳細資料,並指出哪一個是現行環境叢集。一般來說,這個指令會將使用者在 kubeconfig 檔案中建立的任何其他叢集,以及手動加入該 kubeconfig 檔案之所有叢集的部分詳細資料列出。
- 在 Cloud Shell 執行下列指令,變更現行環境:
就本例而言,您只有一個叢集,所以這個指令並未造成任何變更。
不過,之後在同一個專案中,您可能會有不只一個叢集。屆時如果 kubeconfig 檔案已填入數個叢集的憑證和設定,您便可利用這個方法切換現行環境。如要使用這個方法,則需提供叢集的全名,當中包括 gke
前置字串、專案 ID、位置和顯示名稱,並以底線相互串連。
- 在 Cloud Shell 執行下列指令,為
kubectl
啟用 Bash 自動完成功能:
這個指令不會產生任何輸出內容。
- 在 Cloud Shell 中輸入 kubectl,後面加上一個空格,然後按 Tab 鍵兩次。
殼層就會輸出所有可用的指令:
- 在 Cloud Shell 中輸入 kubectl co,然後按 Tab 鍵兩次。
殼層就會輸出所有開頭為「co」(或您輸入的任何其他文字) 的指令。
工作 4:將 Pod 部署至 GKE 叢集
您將在這項工作中,使用 Cloud Shell 將 Pod 部署至 GKE 叢集。
使用 kubectl 將 Pod 部署至 GKE
Kubernetes 導入 Pod 這個抽象層,將一或多個相關容器歸類為單一實體,在同一個節點上以一個單位的形式來排程及部署。您可以部署代表單一容器 (來源為某個容器映像檔) 的 Pod。一個 Pod 也可以包含來源為多個容器映像檔的多個容器。
- 在 Cloud Shell 中執行下列指令,以名為 nginx-1 的 Pod 形式部署 nginx:
這個指令會建立一個名為 nginx 的 Pod,內含一個執行 nginx 映像檔的容器。如未指定存放區,系統的預設行為,就是試著在本機或 Docker 公開登錄檔尋找該映像檔。就本例而言,該映像檔是從 Docker 公開登錄檔提取而來。
- 在 Cloud Shell 中執行下列指令,查看現行環境叢集中所有部署的 Pod:
輸出內容應如下所示,但 Pod 名稱可能稍有不同。
輸出內容:
- 在 Cloud Shell 執行下列指令,查看叢集所有節點的資源使用情形:
輸出內容應如下列範例所示。
輸出內容:
如果執行另一個 top
指令 (kubectl top pods
),系統也會為叢集中所有部署的 Pod 顯示類似資訊。
- 在變數中輸入 Pod 名稱,本研究室活動全程都會使用該變數。使用這類變數可幫助您大幅減少輸入長名稱時可能出現的人為錯誤。
[your_pod_name]
這個部分需改為 Pod 的專屬名稱:
範例:
- 使用 echo 指令讓殼層向您回報值,確認環境變數已設定成功:
輸出內容:
- 在 Cloud Shell 中執行下列指令,查看您剛建立的 Pod 的完整詳細資料:
輸出內容應如下列範例所示。系統會顯示 Pod 的詳細資料、狀態與狀況,以及生命週期中的事件。
輸出內容:
將檔案推送至容器
您需要建立檔案並將該檔案放到容器中,才能透過 nginx 網路伺服器提供靜態內容。
- 在 Cloud Shell 中輸入下列指令,以在 nano 文字編輯器中開啟名為
test.html
的檔案:
- 將下列文字 (殼層指令碼) 新增至空白的
test.html
檔案:
-
依序按下 CTRL+X 鍵、Y 鍵和 Enter 鍵,即可儲存檔案並退出 nano 編輯器。
-
在 Cloud Shell 中執行下列指令,將檔案放到 nginx Pod 中 nginx 容器內的適當位置,以透過靜態方式提供該內容:
這個指令會將本機主目錄中的 test.html
檔案複製到 nginx Pod 中第一個容器的 /usr/share/nginx/html
目錄。您可以使用 -c
選項,後面加上容器名稱,藉此指定多容器 Pod 中的其他容器。
公開 Pod 來進行測試
如要向叢集外的用戶端公開 Pod,必須要有 Service。本課程的其他段落會探討 Service,其他研究室也會廣泛使用 Service。您可以使用簡單的指令,建立 Service 來公開 Pod。
- 在 Cloud Shell 中執行下列指令,建立 Service 以對外公開 nginx Pod:
這個指令會建立 LoadBalancer Service,這樣就能將 nginx Pod 的存取權開放給叢集外的網際網路位址。
- 在 Cloud Shell 中執行下列指令,查看叢集中的 Service 相關詳細資料:
輸出內容應如下列範例所示。下一步會用到外部 IP 位址。
輸出內容:
這個 Kubernetes Service 是叢集建立或使用的其中一項預設 Service。輸出結果中也會顯示您建立的 nginx Service。
您可能需要重新執行這個指令數次,系統才會顯示外部 IP 位址。
輸出內容:
點選「Check my progress」確認目標已達成。
- 在 Cloud Shell 中執行下列指令,確認 nginx 容器是否提供您複製的靜態 HTML 檔案。
請將 [EXTERNAL_IP] 改為您在上一步輸出內容中取得的 Service 外部 IP 位址。
輸出結果中會顯示檔案內容。您可以透過瀏覽器前往同一個位址,查看以 HTML 形式呈現的檔案。
範例:
- 在 Cloud Shell 中執行下列指令,查看 nginx Pod 正在使用的資源:
輸出內容:
工作 5:執行 GKE Pod 自我檢查
在這項工作中,您將連線至 Pod,然後調整設定、編輯檔案,以及對該 Pod 進行其他即時變更。
準備環境
如要將 Pod 及其他資源部署至 Kubernetes,建議您透過設定檔 (有時又稱為「資訊清單檔案」)。設定檔通常是以 YAML 語法編寫,註明資源的詳細資料。如要指定複雜的選項,使用設定檔會比編寫一行冗長的指令列引數來得簡單方便。
YAML 語法和 JSON 語法很類似,但前者較為精簡,且支援同一種物件和屬性階層結構。本研究室的來源存放區中有我們為您準備的範例 YAML 檔案。
- 在 Cloud Shell 中輸入下列指令,將存放區複製到研究室 Cloud Shell:
- 建立一個軟連結,做為工作目錄的捷徑:
- 切換到包含研究室範例檔案的目錄:
我們已為您提供一個 Pod 適用的範例資訊清單 YAML 檔案,名為 new-nginx-pod.yaml
:
- 如要部署資訊清單,請執行下列指令:
點選「Check my progress」,確認目標已達成。
- 如要查看 Pod 清單,請執行下列指令:
輸出內容應如範例所示。
輸出內容:
您可以看到新的 nginx Pod,以及先前在研究室中建立的 Pod。
使用殼層重新導向功能連線至 Pod
某些容器映像檔包含可啟動的殼層環境。相較於透過 kubectl
執行個別指令,使用這個殼層環境可能會比較方便。舉例來說,nginx 映像檔包含 Bash 殼層。在這項工作中,您將使用殼層重新導向功能連線至新 nginx Pod 中的 Bash 殼層,以執行一連串的操作。
- 在 Cloud Shell 中執行下列指令,啟動 nginx 容器中的互動式 Bash 殼層:
畫面上會出現新的殼層提示。
輸出內容:
您已啟動 new-nginx Pod 容器中的互動式 Bash 殼層。如果該 Pod 有數個容器,可透過 -c
選項使用名稱來指定容器。
根據預設,nginx 容器映像檔沒有文字編輯工具,因此您需要自行安裝。
- 使用 Cloud Shell 在 nginx Bash 殼層中執行下列指令,安裝 nano 文字編輯器:
收到「Do you want to continue (Y/n)」這個提示時,按下 Y 鍵即可確認操作。
您需要在 nginx 容器上靜態提供的目錄中建立 test.html
檔案。
- 使用 Cloud Shell 在 nginx Bash 殼層中執行下列指令,切換至靜態檔案目錄並建立
test.html
檔案:
- 在 Cloud Shell 的 nginx Bash 殼層 nano 工作階段,輸入下列文字:
- 依序按下 CTRL+X 鍵、Y 鍵和 Enter 鍵,即可儲存檔案並退出 nano 編輯器。
- 使用 Cloud Shell 在 nginx Bash 殼層中執行下列指令,退出 nginx Bash 殼層:
如要連線至修改後的 nginx 容器 (含有新的靜態 HTML 檔案) 並進行測試,可建立 Service。另一個更簡單的方法,就是直接從 Cloud Shell 透過通訊埠轉送功能連線至 Pod。
- 在 Cloud Shell 中執行下列指令,設定從 Cloud Shell 到 nginx Pod (從 Cloud Shell VM 的通訊埠 10081 到 nginx 容器的通訊埠 80) 的通訊埠轉送作業:
輸出內容應如範例所示。
輸出內容:
由於這是前景程序,如要進行測試,請另開一個 Cloud Shell 介面。
- 在 Cloud Shell 選單列中,點選加號 (+) 圖示,即可啟動新的 Cloud Shell 工作階段。
Cloud Shell 視窗中會出現第二個 Cloud Shell 工作階段。只要按一下選單列中的標題,即可切換工作階段。
- 在第二個 Cloud Shell 工作階段執行下列指令,透過通訊埠轉送測試修改後的 nginx 容器:
畫面上會顯示您先前新增到 test.html
檔案的 HTML 文字。
查看 Pod 的記錄檔
- 在 Cloud Shell 選單列中,點選加號 (+) 圖示,即可啟動另一個新的 Cloud Shell 工作階段。
Cloud Shell 視窗中會出現第三個 Cloud Shell 工作階段。和之前一樣,只要在選單列中點選對應的項目,即可切換工作階段。
- 在第三個 Cloud Shell 視窗中執行下列指令,以顯示 new-nginx Pod 的設定檔,並在新記錄檔送達時串流內容 (並加上時間戳記):
- 這個新視窗中會顯示相關記錄檔。
- 回到第二個 Cloud Shell 視窗,重新執行 curl 指令,在 Pod 上產生一些流量。
- 在第三個 Cloud Shell 視窗中出現額外的記錄訊息時,查看訊息內容。
- 關閉第三個 Cloud Shell 視窗,停止顯示記錄訊息。
- 關閉原本的 Cloud Shell 視窗,停止通訊埠轉送程序。
關閉研究室
如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。