K8s Deployment

ReplicaSet

  • 目的:ReplicaSet 的主要目的是確保一定數量的 Pod 副本始終運行。
  • 功能
    • ReplicaSet 確保在任何時候都有指定數量的 Pod 副本在運行。
    • 如果有 Pod 掛掉,ReplicaSet 會創建新的 Pod 來替代。
    • ReplicaSet 不支持滾動更新;如果 Pod 定義需要更新,則需要手動刪除舊的 Pod,讓 ReplicaSet 根據新的定義創建新的 Pod。

Deployment

  • 目的:Deployment 為 Pod 和 ReplicaSet 提供了一個聲明式的更新方法。
  • 功能
    • Deployment 管理 ReplicaSet 和 Pod。當您使用 Deployment 創建或修改 Pod 模板或其它設定時,Deployment 會自動更新 Pod。
    • 支持滾動更新,允許您逐步更新 Pod 的實例,而不需要同時停止所有的 Pod。
    • 提供歷史版本控制,可以回滾到先前的 Deployment 狀態。
    • 提供更細粒度的控制,例如暫停和恢復更新。
基本上是 replica controller 的強化版,部署上彈性高
管理版本會比 replica controller 方便,官網也寫了盡量用 deployment 去做 AP 設置
通常實務上都會使用 deployment 來部署 pod
notion image

特性

  • 無停機服務遷移(zero downtime deployment)
  • 可以 Rollback 到先前版本
     
     
    範例 yaml
    apiVersion: apps/v1 kind: Deployment metadata: name: jpetstore-backend-deployment namespace: jpetstore-dev spec: selector: matchLabels: app: jpetstore tier: backend replicas: 1 template: metadata: labels: app: jpetstore tier: backend spec: containers: - name: jpetstore-backend image: lanznx/jpetstore:k8s env: - name: MYSQL_USERNAME value: root - name: MYSQL_PASSWORD value: brandon - name: MYSQL_URL value: jdbc:mysql://mysql-service:3306/jpetstore resources: requests: cpu: "500m" memory: "512Mi" limits: cpu: "1000m" memory: "1024Mi" ports: - containerPort: 8080

    scale up / down

    microk8s kubectl scale --replicas=NUMBER deployment NAME
     

    更新 Deployment 內部的 Pod

    kubectl set image deployment/deploymentName imageName=imageResource --record
     
     
     
     

    如何透過 mysql-service 來連線進去 mysql-pod

     
    目前問題:
    1. 不確定 spring boot 如何吃 export env variable
      1. https://coderanch.com/t/718549/frameworks/pass-env-variable-Spring-xml
      2. https://stackoverflow.com/questions/18744663/how-to-inject-environmental-variables-inside-spring-xml-configuration
    1. 不確定 pod 該如何透過 service 連進去另一個 pod
      1. backend → mysql
      2. 目前希望可以採用 jdbc:mysql://{這裡就是問題所在}/jpetstore
        1. serviceName:port
        2. 上面正解