第三周kubernetes的autoscaler、佈署及ConfigMaps

第三周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。

  1. 新增 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 想要保存,邏輯相同:

Comments

Loading comments…

Leave a Comment