介紹如何透過 GCP (Google Cloud Platform) 的 Cloud SDK,上傳 Docker Image 及佈署到 Kubernetes。
前置準備
Cloud SDK
下載 Cloud SDK 並安裝,官網下載位置:
https://cloud.google.com/sdk/downloads
安裝完成後,打開 Cloud SDK 進行授權驗證,指令如下:
1 | gcloud auth login |
接著會跳出授權驗證的網頁,進行確認,如下圖:
建立 Kubernetes Cluster
在開始之前,請先到 GCP 的 Kubernetes Engine 建立 Cluster,如下圖:
GCP 第一年送 300 美金,讓你試用。
建立完成後,可以透過 Cloud SDK 看看自己建好的 Kubernetes Cluster,指令如下:
1 | gcloud container clusters get-credentials [CLUSTER_NAME] --zone=[CLUSTER_ZONE] --project=[PROJECT_ID] |
- CLUSTER_NAME 及 CLUSTER_ZONE
可以從 Kubernetes Engine 的管理頁面查看: - PROJECT_ID
可以從 GCP 頁面上方查看,如下圖:
Container Registry
GCP 有提供私有的 Docker Registry 叫做 Container Registry,此篇範例我將做一個 Docker 推到 GCP 提供的 Container Registry。
Build
建立一個 Ubuntu 的 Image 並安裝一些常用的小工具,Dockerfile 內容如下:
1 | FROM ubuntu:18.04 |
tail -f /dev/null
很重要,如果沒有持續性的運行,Kubernetes 會當作這個容器已經結束工作,重新把它啟用,然後就出現 CrashLoopBackOff。
接著使用 docker build
建立 Docker Image:
1 | docker build -t [HOSTNAME]/[PROJECT_ID]/[IMAGE_NAME]:[TAG] - < [DOCKERFILE_PATH] |
Docker Image 不一定要如上述命名,但為了方便以下教學,建議這樣命名。
- HOSTNAME
選項如下: gcr.io
美國 United States (未來可能會換到其他地區)us.gcr.io
美國 United Stateseu.gcr.io
歐洲 European Unionasia.gcr.io
亞洲 Asia- PROJECT_ID
同上方介紹的方式查看 - IMAGE_NAME
自行定義 - TAG
自行定義 - DOCKERFILE_PATH
Dockerfile 的檔案位置
Push
建立完 Docker Image 後,就可以透過 docker push
指令將 Docker Image 推上 GCP 的 Container Registry,如下:
1 | docker push [Hostname]/[Project Id]/[Image Name] |
參數如上方說明。
注意!首次使用必須要先取得 GCP 的 configure-docker 授權,指令如下:
1 gcloud auth configure-docker
Kubernetes 佈署
準備好 Docker Image 後,就可以透過 Kubernetes 的 kubectl run
指令,將私有的 Docker Image 佈署到 GCP 的 Kubernetes Cluster:
1 | kubectl run [DEPLOYMENT_NAME] --image=[DOCKER_REGISTRY] |
- DEPLOYMENT_NAME
自行定義的 Kubernetes 佈署名稱 - DOCKER_REGISTRY
Docker Image 的來源位置,如果是放在 Docker Hub,也可以改成 Docker Hub 的位置。
如:kubectl run busybox --image=busybox
佈署完成後,可以透過 kubectl get pods
查看已啟動的 Pods:
1 | kubectl get pods |
若狀態顯示 Running,便透過 Pod Name 進入 Container,指令如下:
1 | kubectl exec -it [POD_NAME] -- bash |
出結果如下: