【K8s 教學】代管式 Kubernetes – GKE 教學實作 6 步驟

【K8s 教學】代管式 Kubernetes – GKE 教學實作 6 步驟

Kubernetes(K8s)是 Docker 容器編排工具,提供可彈性運行分散式系統的自動化管理架構,透過集中化的管理介面控管所有節點。而 Google Kubernetes Engine(GKE)是 Google Cloud 的 K8s 代管服務,除了支援自動化的軟硬體更新等功能,也提供客製化的 K8s 網路連線服務,可減少許多不必要的負擔。一起了解 GKE 教學實作六步驟吧!

代管式 K8s – GKE 教學前言

此次教學會用一個簡單的 scenario 試用 GKE,讓大家快速理解在 GKE 上做事,比在 K8s 上簡單非常多(完整 Lab:Hello Node Kubernetes)。還不熟悉 Docker 容器、K8s 和 GKE,或想了解 GKE 進階教學的人,可先閱讀以下文章。

Kubernetes(K8s)教學彙整
● K8s 和 Docker 容器的差異比較 Docker、K8s 和 GKE
● 代管式 K8s 介紹GKE 3 大特色與 2 大優勢
● 代管式 K8s 教學_進階篇GKE Autopilot 模式教學 3 步驟

GKE 教學步驟一:準備一支 Node.js 應用程式

首先第一步我們要準備一支 Node.js 應用程式,下面會提供大家範例程式碼。如果各位已經在 Google Cloud Platform(GCP,現 Google Cloud)內了,請先啟動 Cloud Shell。

GKE 教學:啟動 Cloud Shell
基礎簡介

接著以 vi 指令(vi server.js)建立一個 Node.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 並用網頁預覽,完成後如看到圖二的畫面,表示這支程式可以運作。

GKE 教學步驟二:製成 Docker container image

接下來進到製成 Docker Image 的步驟,這邊我們不需要使用 image server。首先輸入指令 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 是有效的,並一樣利用 Cloud Shell 來預覽,最後確認結果。

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

GKE 教學步驟三:推送 image 並儲存在Container Registry

再來我們準備要把 image 放上GCP,這邊需要先把 container 停掉,停掉之前要知道 container 的 ID。首先要輸入指令 docker ps

接著再輸入指令 docker stop [CONTAINER ID] 等它跑一陣子。

再來就是把 image 放上去 Container Registry(免費儲存)了,它是一個專門放 image 的地方。

代管式K8s – GKE 教學:將 docker image 推送到 container registry
將 docker image 推送到 container registry

最後再輸入指令 gcloud docker -- push gcr.io/YOUR_PROJECT_ID/hello-node:v1,我們就可以在 console 上看到它。

GKE 教學步驟四:建立 GKE Cluster 並部署 Hello Node

現在可以建立 cluster 了。

代管式K8s – GKE 教學:從 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 後,可以觀察到 pod 已經開始運行了,但還沒向整個 internet 開放(expose)。

GKE 教學步驟五:讓應用程式上線 expose

以下這個功能很神,它可以讓相關 Load Balancer 外部 IP、防火牆規則自動建立。

kubectl expose deployment hello-node --type="LoadBalancer"

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 後,可以在瀏覽器試試看。

GKE 教學步驟六:把 Pod 從1個擴充到4個

接下來用 kubectl scale deployment hello-node --replicas=4 把 pod 增加到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 研討會主頁

發佈留言