文章目錄
使用 gcloud shell 建立 GKE 並使用 Filestore 做為 NFS-Client
許多目前用到的 service 都需要使用 storageclass 來動態建立 volume,雖然使用預設的 standard
可以順利讓 service 啟動,但為了保存相關資料還是需要使用外部 disk,今天就紀錄一下將 Filestore mount 給 GKE 做 nfs
基本環境說明
- macOS Catalina 10.15.7
- gcloud SDK 319.0.0
設定方式
啟用 file Google APIs
未啟用無法使用
gcloud
建立 filestoregcloud services enable file.googleapis.com
安裝
beta
gcloud components未安裝
beta
gcloud components 無法建立 filestoregcloud components install beta
建立 Filestore
{SIZE} 至少要 1024GB(1TB)
語法
gcloud beta filestore instances create {FILESTORE NAME} \ --project={PROJECT NAME} \ --zone={ZONE ID} \ --tier=STANDARD \ --file-share=name="volumes",capacity={SIZE} \ --network=name="default"
範例
gcloud beta filestore instances create testnfs \ --project=testproject \ --zone=asia-east2-a \ --tier=STANDARD \ --file-share=name="volumes",capacity=1TB \ --network=name="default"
取得 Filestore ip
先將 ip 紀錄下來,後面會用到
語法
echo $(gcloud beta filestore instances describe {FILESTORE NAME} \ --project={PROJECT NAME} \ --zone={ZONE ID} \ --format="value(networks.ipAddresses[0])")
範例
echo $(gcloud beta filestore instances describe testnfs \ --project=testproject \ --zone=asia-east2-a \ --format="value(networks.ipAddresses[0])")
建立 GKE instance 並設定權限 (已有 GKE instance 可略過)
5-1. 建立 GKE instance
語法
gcloud container clusters create {gke name}
範例
gcloud container clusters create testk8s
5.2. 取得 gke 憑證
語法
gcloud container clusters get-credentials {gke name}
範例
gcloud container clusters get-credentials testk8s
5.3. 設定 cluster-admin 權限
ACCOUNT=$(gcloud config get-value core/account) kubectl create clusterrolebinding core-cluster-admin-binding \ --user ${ACCOUNT} \ --clusterrole cluster-admin
安裝 Helm
brew install helm
安裝 nfs-client
將前面紀錄下來的 ip 填入
語法
helm install nfs-cp --set nfs.server={FILESTORE IP} --set nfs.path=/volumes stable/nfs-client-provisioner
範例
helm install nfs-cp --set nfs.server=10.94.204.42 --set nfs.path=/volumes stable/nfs-client-provisioner
移除預設
standard
為 default 並將 nfs-client 設為 default storageclasskubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' && kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
指定 nfs-client 為 storageclass 的 helm 安裝語法
helm repo add hashicorp https://helm.releases.hashicorp.com && helm install consul hashicorp/consul --set global.name=consul --set StorageClass=nfs-client
心得
絕大部操作都與 Dynamically provision GKE storage from Filestore using the NFS-Client provisioner 相同,其中只有下列幾點不同
- helm 的安裝: mac 上就直接使用 brew 安裝 3.X 版本 (文件則是使用壓縮檔安裝 2.11 版)
- rbac 設定:helm 3 之後 tiller 已不再需要,故未設定 tiller 用的 service account
- helm 語法調整:helm 3 語法與 helm 2 略有不同 (helm 3 移除
--name
flag)
參考資訊
文章作者 Yowko Tsai
上次更新 2020-11-23
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。