【K8s 教學】第一次用 Google Kubernetes Engine 就上手

【K8s 教學】第一次用 Google Kubernetes Engine 就上手

我們用一個簡單的 scenario 來 try 一下 GKE,讓各位快速了解一下,在 GKE 上做事,比在 Kubernetes(K8s)上簡單非常多。還不熟悉 K8s 和 GKE 的人,可以先看《【K8s 是什麼】比較 Docker 容器、K8s 和 GKE 的架構與優勢》這篇文章。

這次實作完整的 Lab 連結在此:https://google.qwiklabs.com/focuses/564?parent=catalog

1.準備一支Node.js應用程式 (含範例程式碼)
2.做成Docker container image (不需要image server)
3.把image推送並儲存在Container Registry (Google免費儲存)
4.建立GKE Cluster (一條指令),部署Hello Node (一條指令)
5.讓應用程式上線expose (一條指令,並自動建立Load Balance和防火牆規則)
6.把Pod從1個擴充到4個 (一條指令)

假設你已經在GCP上了,先啟動Cloud Shell。

啟動Cloud Shell

用vi指令建一個Node.js檔案

vi server.js

var http = require(‘http’);
var handleRequest = function(request, response) {
  response.writeHead(200);
  response.end(“Hello World!”);
}
var www = http.createServer(handleRequest);
www.listen(8080);

輸入node server.js  然後用網頁預覽

會看到像這樣,表示這支程式可以運作。

接下來要做成Docker Image了

輸入指令vi Dockerfile

FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js

編輯完成後,用以下指令建立Docker Image

注意v1右邊有空一格再加上句點,代表Docker File要在原來的目錄產生

docker build -t gcr.io/your_PROJECT_ID/hello-node:v1 .

產生過程如下:

接下來再用Docker Image直接執行看看,確保Image是有效的:

docker run -d -p 8080:8080 gcr.io/YOUR_PROJECT_ID/hello-node:v1

一樣用Cloud Shell來預覽

確認結果

準備要把image放上GCP,我們要先把container停掉,停掉之前要知道container的ID

輸入指令 docker ps

docker stop [CONTAINER ID]         ….等它跑一下子

接下來要把image放上去Container Registry了,它是一個專門放image的地方。

將docker image推送到container registry
將docker image推送到container registry

輸入指令:

gcloud docker — push gcr.io/YOUR_PROJECT_ID/hello-node:v1

我們可以在console上看到它

現在可以建立cluster了

從container registry拉image來建立GKE cluster
從container registry拉image來建立GKE cluster

我們先確保部署的環境是在正確的專案上:

gcloud config set project YOUR_PROJECT_ID

設定好之後,開始部署含有2個Node的Cluster:

gcloud container clusters create hello-world –num-nodes 2 –machine-type n1-standard-1 –zone asia-east1-a

等待幾分鐘後完成

也可以在Console上點選,很方便

點hello-world可以看到有2個Node

接下來要把image拉進來部署了

kubectl run hello-node \
    –image=gcr.io/YOUR_PROJECT_ID/hello-node:v1 \
    –port=8080

來查看部署的狀態

kubectl get deployments

kubectl get pods

是開始run了沒錯,但還沒向整個internet開放 (expose)

kubectl expose deployment hello-node –type=”LoadBalancer”

這個功能很神,它可以讓相關Load Balancer外部IP、防火牆規則同建立。Google的說法如下:

The Kubernetes master creates the load balancer and related Compute Engine forwarding rules, target pools, and firewall rules to make the service fully accessible from outside of Google Cloud Platform.

看結果

kubectl get services

拿到外部IP了,在瀏覽器試試看

接下來把pod增加到4個

kubectl scale deployment hello-node –replicas=4

原本是1個

現在變4個了

Kubernetes它會自動依照資源來分配pod,所以每個Node裡面的pod不一定會平均分配,要看Node資源和Container目前的負載量。

這次先介紹到這邊,各位如想進一步體驗將 Node 加入託管範疇的 GKE Autopilot 模式,可參考《GKE Autopilot 教學―輕鬆管理 K8s,加快軟體開發流程》一文。針對這次介紹的 GKEGCP 有任何問題可直接留言提問,想獲得更詳細的介紹則歡迎直接聯繫我們,希望這次的文章有幫助到首次接觸 K8s 或 GKE 的大家!

延伸閱讀:

【K8s 是什麼】比較 Docker 容器、K8s 和 GKE 的架構與優勢
GKE Autopilot 教學―輕鬆管理 K8s,加快軟體開發流程
維運管理與 SRE 的關係
使用 Cloud Run 部署一個 API Server
DevOps 是什麼? Google 實做 DevOps 的 SRE 方法介紹

Cloud Ace 研討會主頁

發佈留言