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
特性
- 無停機服務遷移(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
目前問題:
- 不確定 spring boot 如何吃 export env variable
- 不確定 pod 該如何透過 service 連進去另一個 pod
- backend → mysql
- 目前希望可以採用
jdbc:mysql://{這裡就是問題所在}/jpetstore
serviceName:port
- 上面正解