[Google K8s教學]第一次使用Google Kubernetes Engine就上手
Google K8s cluster架構圖

[Google K8s教學]第一次使用Google Kubernetes Engine就上手

我們用一個簡單的scenario來try一下GKE,讓各位快速了解一下,在GKE上做事,比Kubernetes上簡單非常多。完整的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目前的負載量。

這次就先介紹到這邊,下次再分享其他內容,看起來GKE很簡單吧!

Aaron Lee

超過6年的Google Cloud經驗,服務過上百家G Suite與GCP客戶,擔任多次研討會主講人與教育訓練講師,提供架構諮詢與技術支援,幫助各大企業上雲。

Leave a Reply