<未完成> 使用地區性的永久磁碟部署 Apps 到 Kubernetes Engine

概述

本章節中, 我們將學習如何藉由使用 regional persistent disks (地區性永久磁碟) 在 Kubernetes Engine 部署 WordPress, 配置一個高可用的應用。 Regional persistent disks 提供的兩個 zones 之間的同步, 這確保了你的應用可以正常運行, 就算其中一個區域發生了故障或停電事故。 使用 regional persistent disks 來部署 Kubernetes Engine 叢集將會讓你的應用更穩定, 安全, 可信賴。


你將實作的內容

  • 建立一個 regional Kubernetes Engine 叢集
  • 建立一個 Kubernetes StorageClass 資源, 這個資源是針對複製的 zone 所配置
  • 使用 StorageClass 的 regional disk 部署 WordPress
  • 藉由刪除 node 來模擬區域性的故障
  • 確認 WordPress app 以及資料成功的遷徙到另一個複製的 zone


進行此章節的建議具備知識

這是 進階 課程, 在開始前, 至少有熟悉 Kubernetes 以及 WordPress 的基礎。 這邊有列出一些 Qwiklabs 可以讓你跟上進度:

準備好了的話我們就往下吧!




設定及要求

在你按下 Start Lab 按鈕之前

詳讀所有的教學。 Labs 是有時間限制的, 而且你不可以停止時間倒數。 倒數計時器在你按下 Start Lab 按鈕後開始倒數, 上面顯示的時間為你還能使用 Cloud 資源的時間。

Qwiklabs 的手把手環境, 讓你可以在真實環境中來操作進行 Qwiklabs 上提供的課程, 而不是在一個模擬或是展示的環境。 我們透過提供你一個全新的、暫時的帳號密碼, 在計時器歸零之前, 你可以用來登入並存取 Google Cloud Platform。

你需要什麼?

要完成這個 lab, 你需要:

  • 一個一般的網路瀏覽器(推薦 Chrome)
  • 完成這個 lab 的時間

備註: 如果你已經有你自己的個人 GCP 帳號或專案,請不要使用在這一個 lab

現在你已經開始你的 lab, 你將會登入 Google Cloud Shell 主控台, 然後開啟命令列工具

如何開始你的 lab, 然後登入 Console?

  • 按下 Start Lab 按鈕。 如果你需要付費, 會有一個彈出視窗來讓你選擇付費的方式。 在左方你會看到一個面板, 上面有暫時的帳號密碼, 你必須使用這些帳號密碼在此次 lab

  • 複製 username, 然後點擊 Open Google Console。 Lab 會開啟另外一個視窗, 顯示選擇帳號的頁面

tip: 開啟一個全新的視窗,然後跟原本的頁面並排

  • 選擇帳號頁面, 點擊 Use Another Account

  • 登入頁面開啟, 貼上之前複製的 username 以及 password, 然後貼上

重要: 必須使用之前於 Connection Details 面板 取得的帳號密碼,不要使用你自己的 Qwiklabs 帳號密碼。 如果你有自己的 GCP 帳號, 請不要用在這裡(避免產生費用)

  • 點擊並通過接下來的頁面:
    • 接受 terms 以及 conditions
    • 不要增加 recovery optoinstwo factor authentication (因為這只是一個臨時帳號)
    • 不要註冊免費體驗

稍待一些時候, GCP 控制台將會在這個視窗開啟。

注意: 按下左上方位於 Google Cloud Platform 隔壁的 Navigation menu, 你可以瀏覽選單, 裡面有一系列的 GCP 產品以及服務


啟動 Google Cloud Shell

Google Cloud Shell 是載有開發工具的虛擬機器。 它提供了5GB的 home 資料夾, 並且運行在 Google Cloud 上。 Google Cloud Shell 讓你可以利用 command-line 存取 GCP 資源

  • GCP 控制台, 右上的工具列,點擊 Open Cloud Shell 按鈕

  • 在打開的對話框裡, 按下 START CLOUD SHELL:

你可以立即按下 START CLOUD SHELL 當對話視窗打開。

連結並提供環境會需要一點時間。 當你連結成功, 這代表你已成功獲得授權, 且此專案已被設為你的專案ID, 例如:

gcloudGoogle Cloud Platform 的 command-line 工具, 他已事先被安裝在 Cloud Shell 並且支援自動補齊

使用這個 command, 你可以列出有效帳戶名稱:

gcloud auth list

輸出:

Credentialed accounts:
- <myaccount>@<mydomain>.com (active)

範例輸出:

Credentialed accounts:
- google1623327_student@qwiklabs.net

你可以使用以下 command 來列出專案 ID

gcloud config list project

輸出:

[core]
project = <project_ID>

範例輸出:

[core]
project = qwiklabs-gcp-44776a13dea667a6

gcloud 的完整文件可以參閱 Google Cloud gcloud Overview




建立 Regional Kubernetes Engine 叢集

打開新的 Cloud Shell 視窗, 先建立 regional Kubernetes Engine 叢集, 它橫跨了位於 us-west1 的 3 個 zones 。 首先, 透過以下指令, 取得 us-west1 的 server 配置, 並將結果匯出到環境變數:

  • 取得 server 配置
    CLUSTER_VERSION=$(gcloud container get-server-config --region us-west1 --format='value(validMasterVersions[0])')
    export CLOUDSDK_CONTAINER_USE_V1_API_CLIENT=false

現在建立一個標轉的 Kubernetes Engine 叢集 (會花一些時間, 請忽略認為有關 node auto repairs 的警告)

gcloud container clusters create repd \
--cluster-version=${CLUSTER_VERSION} \
--machine-type=n1-standard-4 \
--region=us-west1 \
--num-nodes=1 \
--node-locations=us-west1-a,us-west1-b,us-west1-c

輸出:

Creating cluster repd...done.
Created [https://container.googleapis.com/v1beta1/projects/qwiklabs-gcp-e8f5f22705c770ab/zones/us-west1/clusters/repd].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-west1/repd?project=qwiklabs-gcp-e8f5f22705c770ab
kubeconfig entry generated for repd.
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
repd us-west1 1.12.6-gke.7 35.247.50.133 n1-standard-4 1.12.6-gke.7 3 RUNNING

我們剛建立了一個 regional 的叢集 (位於 us-west1), 並且在每個 zone 都個開 1 個 node (us-west1-a, us-west1-b, us-west1-c)
從左邊選單到 Compute Engine 來檢視你的 instances:

gcloud 指令同時也自動的設置了 kubectl 指令連接到叢集




使用 Regional Disk 部署 App

現在你的 Kubernetes 叢集已經在運行中了, 你將做以下三件事:


安裝以及初始化 Helm, 以安裝 chart package

chart package 是由 Helm 所安裝的, 它含有運行 WordPress 所需的所有東西

  • 執行以下指令安裝 Helm 到 Cloud Shell

    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
    chmod 700 get_helm.sh
    ./get_helm.sh
  • 初始化 Helm:

    kubectl create serviceaccount tiller --namespace kube-system
    kubectl create clusterrolebinding tiller-cluster-rule \
    --clusterrole=cluster-admin \
    --serviceaccount=kube-system:tiller
    helm init --service-account=tiller
    until (helm version --tiller-connection-timeout=1 >/dev/null 2>&1); do echo "Waiting for tiller install..."; sleep 2; done && echo "Helm install complete"

現在 Helm 已經安裝完畢


建立 StorageClass

接下來你將建立 StorageClass, 被 chart 使用來定義 regional disk 的 zones。 列在 StorageClass 中的 zones 須符合 Kubernetes Engine 叢集的 zones

執行以下指令建立 StorageClass, 為 regional disk 所用:

kubectl apply -f - <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: repd-west1-a-b-c
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: regional-pd
zones: us-west1-a, us-west1-b, us-west1-c
EOF

輸出:

storageclass "repd-west1-a-b-c" created




Questions and Answers

解釋以下的 command
  • command:

    helm init --service-account=tiller
    until (helm version --tiller-connection-timeout=1 >/dev/null 2>&1); do echo "Waiting for tiller install..."; sleep 2; done && echo "Helm install complete"
  • Answer:

    • until: 如果 until 後的判斷為 true 的話, 就停止迴圈, 否則就一直執行 do 後的指令
    • do echo 字串, sleep 2 秒
    • doneuntil 的判斷為 true 時, 停止迴圈, 並 echo 字串
解釋以下的 gcloud command
  • Command:

    kubectl create clusterrolebinding tiller-cluster-rule \
    --clusterrole=cluster-admin \
    --serviceaccount=kube-system:tiller
  • Answer:

    • 建立 clusterrolebinding, 名為 tiller-cluster-rule
    • 要綁定的 clusterrole 為 cluster-admin, 為叢集中最高權限
    • 要綁定的 service account 為 kube-system namespace 下面的 tiller
以下的 gcloud command 的意思是?
  • Command:

    kubectl create serviceaccount tiller --namespace kube-system
  • Answer:
    建立 service account, 名為 tiller, 建立在 kube-system 這個 namespace

以下的 gcloud command 的意思是?
  • Command:

    CLUSTER_VERSION=$(gcloud container get-server-config --region us-west1 --format='value(validMasterVersions[0])')
    export CLOUDSDK_CONTAINER_USE_V1_API_CLIENT=false
  • Answer:

    • 取得 Kubernetes Engine 的 server config
    • 地區為 us-west1
    • 從格式可知, 目標是取得 version
    • 不使用 V1 版本的 API
解釋以下的 gcloud command
  • Command:

    gcloud container clusters create repd \
    --cluster-version=${CLUSTER_VERSION} \
    --machine-type=n1-standard-4 \
    --region=us-west1 \
    --num-nodes=1 \
    --node-locations=us-west1-a,us-west1-b,us-west1-c
  • Answer:

    • 建立一個 cluster, 名為 repd
    • 指定 cluster-version
    • 指定 machine-type 為 n1-standard-4
    • 指定 region 為 us-west1
    • node 的數量為 1
    • node 的 location 為 us-west1-a, us-west1-b, us-west1-c, 所以就是每個區域都會開一台 node, 雖然上面是說 node = 1, 但是總共會開 3 台
Laravel - The Basics - Controllers (官方文件原子化翻譯) Laravel - The Basics - CSRF Protection

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×