第三周kubernetes的autoscaler、佈署及ConfigMaps
第三周: kubernetes的autoscaler、佈署及ConfigMaps¶
延續上週介紹的pod,介紹如何種類以及如何deploy
Single Pod¶
由於只有單一的 Pod,因此如果後續需求增加,擴展會變得困難。此外,如果這個 Pod 停止運行,服務就會完全中斷,應對突發狀況的能力較差。
ReplicaSet¶
ReplicaSet 可以新增或刪除 Pods,並且在 Pods 發生故障或冗餘時進行替換。
指令¶
- 用 YAML 創建容器:kubectl create -f {your.yaml}
- 查看 Pod 資訊:kubectl describe pod {pod}
- 查看 Pods:kubectl get pods
- 查看 ReplicaSet:kubectl get rs
- 指定 Pods 數量(單個 Pod 可以擴展成 3 個,如果一開始 YAML 沒有設定):kubectl scale {replicaset-name} --replicas=3
- 刪除 Pod,需先用 get 拿到指定 Pod:kubectl delete pod {full-pod-name}(注意:因為 ReplicaSet 設定是 3,所以刪除一個 Pod 後會自動再生出一個 Pod)
- 同樣原理,創建 Pod 也會被限制在設定值:kubectl create pod {full pod name}
Autoscaling 自動調整大小¶
可以發生在不同的層級:Cluster、Node 以及 Pod level。主要有三種類型:
- Horizontal Pod Autoscaler (HPA):透過調整 replicas 中 Pod 的數量。
- Vertical Pod Autoscaler (VPA):不動數量,透過調整資源大小和速度(CPU/Memory)。
- Cluster Autoscaler (CA):調整 Cluster 中 Pod 的數量,新增或刪除 Pod/Node。
指令¶
- kubectl autoscale deploy {image to deploy} --min=2 --max=5 --cpu-percent=50
- 解讀:最少需要 2 個,最多 5 個,一旦 CPU 使用率達到 50% 時觸發。
部署策略¶
常見的部署策略有幾種:
Recreate:當有新版本時,將舊的服務停掉並啟動新的。
- 優點:簡單且能快速更新成新版。
-
缺點:會有整個服務停機時間。
Rolling:在同一個服務下啟動兩個 ReplicaSet,逐步將 Pods 轉換成新版本。 -
優點:適合需要調整負載平衡的資料。
-
缺點:發布需要時間,不能調控流量的分布。
Blue/Green:透過 Load Balancer 調整。 -
優點:新版本可以立即發布給所有使用者。
-
缺點:成本較高(需要兩份資源),需要預先測試好,對於有狀態的應用較複雜。
Canary Strategy:先讓一小部分使用者使用新版本,沒問題後再透過 Load Balancer 全線發布。 -
優點:可靠度高,錯誤和性能監控效果好,有問題可以快速回滾。
-
缺點:發布較慢,使用者逐步獲得更新。
A/B Testing (Split Testing):透過智能 Load Balancer 調控使用者使用的版本。 -
優點:可以同時測試多種版本,對流量分布有完全掌控。
-
缺點:需要智能 Load Balancer,當發生問題時的調試較困難。
Shadow:使用者正常使用,但同時也會發送請求給隱藏的 API 進行測試。 -
優點:可以與線上表現進行測試,對使用者無影響且無停機時間。
- 缺點:成本較高(需要額外資源),並非完全真實的使用者測試,結果可能誤導,建置複雜,需要額外監控(因為有兩個環境)。
如何部署¶
1.首先新增 LivenessProbe 和 ReadinessProbe 到 Deployment。
- 新增 Rolling Update 策略到 YAML 檔。
假設你有一個 image 已經在 container 運行,現在需要新的版本:
1.將 image 上傳到 Docker Hub:
- Build image:docker build -t hello-kubernetes .
- 加 Tag:docker tag hello-kubernetes upkar/hello-kubernetes:2.0
-
推上去:docker push upkar/hello-kubernetes:2.0
2.更新: -
kubectl set image deployments/hello-kubernetes hello-kubernetes=upkar/hello-kubernetes:2.0
如果想要取消更新: -
kubectl rollout undo deployments/hello-kubernetes
ConfigMaps¶
ConfigMaps 可以暫存或放在 YAML 檔案中,以避免重複輸入相同的設定。可以類似 key=value pair 保存資料。
方法 1:用指令:
- kubectl create configmap my-config --from-literal=MESSAGE="hello from first configmap"
-
yaml中需要設定
方法 2:用一個檔案先保存: -
在 my.properties 檔案中放入 MESSAGE=hello from the my.properties file
- 下指令:kubectl create cm my-config --from-file=my.properties
- yaml:
- 讓configmap 從檔案讀取
Secrets¶
如果有 secret 想要保存,邏輯相同:
- kubectl create secret generic api-creds --from-literal=key=mysupersecretapikey
- kubectl get secret 可以拿到 secret 大略資訊。
- kubectl describe secret api-creds 拿到細部資訊。
課程來源為IBM的Introduction to Containers w/ Docker, Kubernetes & OpenShift
Comments
Loading comments…
Leave a Comment