arrow_back

為 Google Kubernetes Engine 設定永久儲存空間

登录 加入
访问 700 多个实验和课程

為 Google Kubernetes Engine 設定永久儲存空間

实验 1 小时 universal_currency_alt 5 积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

總覽

在本研究室中,您將設定 PersistentVolume (永久磁碟區) 和 PersistentVolumeClaim (永久磁碟區要求)。PersistentVolume 是適用於 Kubernetes 叢集的儲存空間。Pod 可以透過 PersistentVolumeClaim 存取 PersistentVolume。若沒有 PersistentVolumeClaim,Pod 多為暫存空間。因此若希望資料在 Pod 資源調度、更新或遷移後仍可持續使用,就必須使用 PersistentVolumeClaim。

目標

在本研究室中瞭解如何執行下列工作:

  • 為 Google Cloud 永久磁碟的 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 建立資訊清單 (動態建立或既有清單)
  • 在 Pod 將 Google Gloud 永久磁碟 PVC 掛接為磁碟區
  • 使用資訊清單建立 StatefulSet
  • 在 StatefulSet 將 Google Cloud 永久磁碟 PVC 掛接為磁碟區
  • 在 Pod 停止和重新啟動時,驗證 StatefulSet 中 Pod 和特定 PV 的連結

設定研究室

存取研究室

每個實驗室都會提供新的 Google Cloud 專案和一組資源,讓您在時限內免費使用。

  1. 按一下「Start Lab」按鈕。如果研究室會產生費用,畫面中會出現選擇付款方式的彈出式視窗。左側的「Lab Details」窗格會顯示下列項目:

    • 「Open Google Cloud console」按鈕
    • 剩餘時間
    • 必須在這個研究室中使用的臨時憑證
    • 完成這個實驗室所需的其他資訊 (如有)
  2. 點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」

    接著,實驗室會啟動相關資源並開啟另一個分頁,當中顯示「登入」頁面。

    提示:您可以在不同的視窗中並排開啟分頁。

    注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」
  3. 如有必要,請將下方的 Username 貼到「登入」對話方塊。

    {{{user_0.username | "Username"}}}

    您也可以在「Lab Details」窗格找到 Username

  4. 點選「下一步」

  5. 複製下方的 Password,並貼到「歡迎使用」對話方塊。

    {{{user_0.password | "Password"}}}

    您也可以在「Lab Details」窗格找到 Password

  6. 點選「下一步」

    重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。 注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
  7. 按過後續的所有頁面:

    • 接受條款及細則。
    • 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
    • 請勿申請免費試用。

Google Cloud 控制台稍後會在這個分頁開啟。

注意:如要查看列出 Google Cloud 產品和服務的選單,請點選左上角的「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。 「導覽選單」圖示

啟動 Google Cloud Shell

Google Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。

Google Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。

  1. 在 Cloud 控制台的右上方找到工具列,然後按一下「開啟 Cloud Shell」按鈕。

    特別標明的「Cloud Shell」圖示

  2. 按一下「繼續」

佈建並連線至環境的作業需要一些時間才能完成。連線建立完成即代表已通過驗證,而且專案已設為您的「PROJECT_ID」。示例如下:

在 Cloud Shell 終端機中,特別標明了專案 ID

gcloud 是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵完成功能。

  • 您可以使用下列指令來列出使用中的帳戶:
gcloud auth list

輸出內容:

Credentialed accounts: - @.com (active)

輸出內容示例:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以使用下列指令來列出專案 ID:
gcloud config list project

輸出內容:

[core] project =

輸出內容示例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注意事項:如需 gcloud 的完整說明,請參閱 gcloud CLI 總覽指南

工作 1:建立 PV 和 PVC

在這項工作中建立 PVC,觸發 Kubernetes 自動建立一個 PV。

連結到研究室 GKE 叢集

  1. 在 Cloud Shell 輸入下列指令,設定可用區和叢集名稱的環境變數:
export my_region={{{project_0.default_region|Region}}} export my_cluster=autopilot-cluster-1
  1. 為 kubectl 指令列工具設定 Tab 鍵完成功能:
source <(kubectl completion bash)
  1. 為 kubectl 設定對叢集的存取權:
gcloud container clusters get-credentials $my_cluster --region $my_region

使用 PVC 建立和套用資訊清單

大多數情況下,不需直接設定 PV 物件或建立 Compute Engine 永久磁碟。若改為建立 PVC,Kubernetes 就會自動佈建永久磁碟。

讓我們建立名為 hello-web-disk 的 PVC,容量為 30 GB,可以做為讀取和寫入磁碟區,一次掛接至單一節點。

  1. 使用下列指令建立 pvc-demo.yaml 檔案,並在 nano 編輯器中開啟檔案:
nano pvc-demo.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 pvc-demo.yaml 檔案:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: hello-web-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

  3. 如要顯示您目前沒有 PVC,請執行以下指令:

kubectl get persistentvolumeclaim

輸出內容:

No resources found in default namespace.
  1. 若要建立 PVC,請執行以下指令:
kubectl apply -f pvc-demo.yaml
  1. 若要顯示新建立的 PVC,請執行以下指令:
kubectl get persistentvolumeclaim

部分輸出內容:

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE hello-web-disk Pending standard-rwo unset 15s 注意:在完成下個步驟前,此狀態會一直維持在「Pending」(待處理)。

點選「Check my progress」確認目標已達成。

建立 PV 和 PVC

工作 2:在 Pod 掛接和驗證 Google Cloud 永久磁碟 PVC

在這項工作中,將永久磁碟 PVC 連接到 Pod。將 PVC 掛接為磁碟區,作為 Pod 資訊清單的一部分。

將 PVC 掛接至 Pod

建立用來部署 nginx 容器的資訊清單檔案 pod-volume-demo.yaml,將 pvc-demo-volume 連接至 Pod,並將該磁碟區掛接至 nginx 容器中的路徑 /var/www/html。儲存至容器中該目錄的檔案會保留在永久磁碟區,即使關閉和重新建立 Pod 與容器,檔案也會保留下來。

  1. 使用下列指令建立 pod-volume-demo.yaml 檔案,並在 nano 編輯器中開啟檔案:
nano pod-volume-demo.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 pod-volume-demo.yaml 檔案:
kind: Pod apiVersion: v1 metadata: name: pvc-demo-pod spec: containers: - name: frontend image: nginx volumeMounts: - mountPath: "/var/www/html" name: pvc-demo-volume volumes: - name: pvc-demo-volume persistentVolumeClaim: claimName: hello-web-disk
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

  3. 如要建立包含磁碟區的 Pod,請執行以下指令:

kubectl apply -f pod-volume-demo.yaml
  1. 在叢集中列出 Pod:
kubectl get pods

輸出內容:

NAME READY STATUS RESTARTS AGE pvc-demo-pod 0/1 ContainerCreating 0 18s

若建立 Pod 後快速執行本操作,狀態變更為「執行中」前,您會看到掛接磁碟區時的狀態顯示為「ContainerCreating」。

  1. 若要驗證 Pod 中的 PVC 是否可以存取,必須獲得 Pod 的殼層存取權。若要開始殼層工作階段,請執行以下指令:
kubectl exec -it pvc-demo-pod -- sh
  1. 若要在 Pod 中將簡單的文字訊息建立為網頁,請輸入以下指令:
echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html
  1. 驗證文字檔案是否包含您的訊息:
cat /var/www/html/index.html

輸出內容:

Test webpage in a persistent volume!
  1. 輸入下列指令,將互動殼層留在 nginx 容器:
exit

測試 PV 的持續性

現在將從叢集中刪除 Pod,確認 PV 仍然存在,然後重新部署 Pod 並驗證 PV 的內容維持不變。

  1. 刪除 pvc-demo-pod:
kubectl delete pod pvc-demo-pod
  1. 在叢集中列出 Pod:
kubectl get pods

輸出內容:

No resources found in default namespace.

叢集上不應存在 Pod。

  1. 若要顯示 PVC,請執行下列指令:
kubectl get persistentvolumeclaim

部分輸出內容:

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE hello-web-disk Bound pvc-8...34 30Gi RWO standard-rwo unset 22m

PVC 仍然存在,且刪除 Pod 時未刪除 PVC。

  1. 重新部署 pvc-demo-pod:
kubectl apply -f pod-volume-demo.yaml
  1. 在叢集中列出 Pod:
kubectl get pods

輸出內容:

NAME READY STATUS RESTARTS AGE pvc-demo-pod 1/1 Running 0 15s

Pod 將進行部署,由於 PV 已存在且不需建立,本次狀態會更快變為「執行中」。

  1. 若要驗證 Pod 中的 PVC 是否仍可存取,必須獲得 Pod 的殼層存取權。若要開始殼層工作階段,請執行以下指令:
kubectl exec -it pvc-demo-pod -- sh
  1. 若要驗證文字檔案是否仍包含訊息,請執行以下指令:
cat /var/www/html/index.html

輸出內容:

Test webpage in a persistent volume!

即使 Pod 已從叢集刪除並重新建立,永久磁碟區的內容仍不會遭到刪除:

  1. 輸入下列指令,將互動殼層留在 nginx 容器:
exit

點選「Check my progress」 驗證目標。

在 Pod 掛接和驗證 Google Cloud 永久磁碟 PVC

工作 3:使用 PVC 建立 StatefulSet

在這項工作中,在 StatefulSet 內使用 PVC。StatefulSet 類似於 Deployment,不同之處在於 Pod 可明確識別身分。

釋出 PVC

  1. 透過 Statefulset 使用 PVC 前,必須刪除目前正在使用 PVC 的 Pod。執行以下指令刪除 Pod:
kubectl delete pod pvc-demo-pod
  1. 確認已移除 Pod:
kubectl get pods

輸出內容:

No resources found in default namespace.

建立 StatefulSet

讓我們建立資訊清單檔案 statefulset-demo.yaml,此檔案會建立 StatefulSet,包括 LoadBalancer 服務和三個 Pod 備用資源,內含 nginx 容器和 volumeClaimTemplates,後者會建立名為 hello-web-disk 的 PVC,容量為 30 GB。與上一個工作相同,nginx 容器會將名為 hello-web-disk 的 PVC 掛接至 /var/www/html

  1. 使用下列指令建立 statefulset-demo.yaml 檔案,並在 nano 編輯器中開啟檔案:
nano statefulset-demo.yaml
  1. 開啟 nano 編輯器後,將下列指令貼到 statefulset-demo.yaml 檔案:
kind: Service apiVersion: v1 metadata: name: statefulset-demo-service spec: ports: - protocol: TCP port: 80 targetPort: 9376 type: LoadBalancer --- apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-demo spec: selector: matchLabels: app: MyApp serviceName: statefulset-demo-service replicas: 3 updateStrategy: type: RollingUpdate template: metadata: labels: app: MyApp spec: containers: - name: stateful-set-container image: nginx ports: - containerPort: 80 name: http volumeMounts: - name: hello-web-disk mountPath: "/var/www/html" volumeClaimTemplates: - metadata: name: hello-web-disk spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 30Gi
  1. 依序按下 Ctrl+OEnter 鍵,儲存編輯過的檔案。

  2. 按下 Ctrl+X 鍵,退出 nano 文字編輯器。

  • 如要建立包含磁碟區的 StatefulSet,請執行以下指令:
kubectl apply -f statefulset-demo.yaml

輸出內容:

service "statefulset-demo-service" created statefulset.apps "statefulset-demo" created

現在有一個 Statefulset 在服務後方執行,名稱為 statefulset-demo-service

驗證 StatefulSet 中的 Pod 連結

  1. 使用「kubectl describe」查看 StatefulSet 的詳細資料:
kubectl describe statefulset statefulset-demo

注意輸出內容結尾的事件狀態。已成功建立服務和 Statefulset。

Normal SuccessfulCreate 10s statefulset-controller Message: create Claim hello-web-disk-statefulset-demo-0 Pod statefulset-demo-0 in StatefulSet statefulset-demo success Normal SuccessfulCreate 10s statefulset-controller Message: create Pod statefulset-demo-0 in StatefulSet statefulset-demo successful
  1. 在叢集中列出 Pod:
kubectl get pods

輸出內容:

NAME READY STATUS RESTARTS AGE statefulset-demo-0 1/1 Running 0 6m statefulset-demo-1 1/1 Running 0 3m statefulset-demo-2 1/1 Running 0 2m
  1. 若要列出 PVC,請執行以下指令:
kubectl get pvc

輸出內容:

NAME STATUS VOLUME CAPACITY ACCESS hello-web-disk Bound pvc-86117ea6-...34 30Gi RWO hello-web-disk-st...-demo-0 Bound pvc-92d21d0f-...34 30Gi RWO hello-web-disk-st...-demo-1 Bound pvc-9bc84d92-...34 30Gi RWO hello-web-disk-st...-demo-2 Bound pvc-a526ecdf-...34 30Gi RWO

原始的 hello-web-disk 仍然存在,可以在新的 Statefulset Pod 中看到為每個 Pod 所建立的個別 PVC。

  1. 使用「kubectl describe」查看 StatefulSet 內第一個 PVC 的詳細資料:
kubectl describe pvc hello-web-disk-statefulset-demo-0

點選「Check my progress」驗證目標。 使用 PVC 建立 StatefulSet

工作 4:驗證 StatefulSet 管理的 Pod 與永久磁碟區的連接持續性

在本工作中,當 Pod 停止和重新啟動時,需驗證 StatefulSet 中的 Pod 與特定 PV 的連結。

  1. 若要驗證 Pod 中的 PVC 是否可以存取,必須獲得 Pod 的殼層存取權。若要開始殼層工作階段,請執行以下指令:
kubectl exec -it statefulset-demo-0 -- sh
  1. 驗證 /var/www/html 目錄中是否不存在 index.html 文字檔案:
cat /var/www/html/index.html
  1. 若要在 Pod 中將簡單的文字訊息建立為網頁,請輸入以下指令:
echo Test webpage in a persistent volume!>/var/www/html/index.html chmod +x /var/www/html/index.html
  1. 驗證文字檔案是否包含您的訊息:
cat /var/www/html/index.html

輸出內容:

Test webpage in a persistent volume!
  1. 輸入下列指令,將互動殼層留在 nginx 容器:
exit
  1. 刪除您在 PVC 上更新文件的 Pod:
kubectl delete pod statefulset-demo-0
  1. 在叢集中列出 Pod:
kubectl get pods

您會看見 StatefulSet 正在自動重新啟動 statefulset-demo-0 Pod。

注意: 請等到 Pod 狀態顯示再次執行,再繼續進行操作。
  1. 連結到新的 statefulset-demo-0 Pod 上的殼層:
kubectl exec -it statefulset-demo-0 -- sh
  1. 驗證文字檔案是否包含訊息:
cat /var/www/html/index.html

輸出內容:

Test webpage in a persistent volume!

StatefulSet 會重新啟動 Pod,將現有的專用 PVC 重新連線到新的 Pod,確保能保留 Pod 的資料。

  1. 輸入下列指令,將互動殼層留在 nginx 容器:
exit

關閉研究室

如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。

您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)

星級評等代表您的滿意程度:

  • 1 星 = 非常不滿意
  • 2 星 = 不滿意
  • 3 星 = 普通
  • 4 星 = 滿意
  • 5 星 = 非常滿意

如果不想提供意見回饋,您可以直接關閉對話方塊。

如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。

Copyright 2022 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。