<aside> 👉 Deployment 定義 Pod 的更新以及副本數
</aside>
<aside> 👉 Deployment 可以用在滾動升級(Rolling Update) & 回滾 (Rollback)
</aside>
metadata.name
→ Deployment Name
spec.replicas
→ Pod 的副本數量
spec.template
→ 定義 Pod
spec.selector
→ 指定匹配的 Pod Label,這個參數在 Deployment Apply 後不能再被修改
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: demo
spec:
containers:
- name: kubernetes-demo-container
image: hcwxd/kubernetes-demo
ports:
- containerPort: 3000
selector:
matchLabels:
app: demo
kubectl apply -f deployment.yaml --record
Kubernetes 會永遠保持有 3 個 Pods 在正常運作,如果有新的 Pod 還在 ContainerCreating 的階段時,他還不會關掉對應要被取代的 Pod。
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
demo-deployment 0/3 3 0 6s
kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-deployment-55dd4c9d8f-dbhmp 0/1 ContainerCreating 0 5s
demo-deployment-55dd4c9d8f-mvw86 0/1 ContainerCreating 0 5s
demo-deployment-55dd4c9d8f-vpk8v 0/1 ContainerCreating 0 5s
kubectl delete pod nginx-deployment-cc7df4f8f-gnrlj
kubectl get pods
NAME READY STATUS RESTARTS AGE
demo-deployment-55dd4c9d8f-6c6d9 1/1 Running 0 30s
demo-deployment-55dd4c9d8f-dbhmp 1/1 Terminating 0 6m44s
demo-deployment-55dd4c9d8f-mvw86 1/1 Running 0 6m44s
demo-deployment-55dd4c9d8f-vpk8v 1/1 Running 0 6m44s
可以看到 Kubernetes 正在試著創建一個新的 Pod 以維持 Replica 數量
kubectl edit deployments demo-deployment
把 spec.template.spec.containers[0].ports[0].containerPort 改成 3001,並儲存