<aside> 👉 Deployment 定義 Pod 的更新以及副本數

</aside>

<aside> 👉 Deployment 可以用在滾動升級(Rolling Update) & 回滾 (Rollback)

</aside>

Defining a Deployment


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。

Deployment


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

試著刪除一個 Pod

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 數量

Deployment Rolling Update


kubectl edit deployments demo-deployment

把 spec.template.spec.containers[0].ports[0].containerPort 改成 3001,並儲存