先講為什麼需要它。Pod 是會死的,Node 重開、記憶體不夠被砍、程式自己 crash,Pod 就沒了

沒人管的話服務就一直掛著。Deployment 的工作是幫你盯場,你只要說我要三個,剩下的它自己想辦法
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: ithome-lab
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
apiVersion 從 v1 變成 apps/v1 了,Day 6 有先提過這件事,Pod 是最核心的資源所以是 v1,Deployment 屬於 apps 那組 API
這份 YAML 有三個重點。replicas 是我要幾份。selector.matchLabels 是我負責管哪些 Pod。template 底下那一整包,其實就是前天那個 Pod 的內容搬進來,差別是它沒有 name,因為名字之後由 Deployment 自動生成
kubectl apply -f manifests/base/deployment.yaml
kubectl get deployment,replicaset,pods -n ithome-lab

這裡會冒出一個我沒寫過的東西,ReplicaSet。實際的關係是 Deployment 生一個 ReplicaSet,ReplicaSet 再去生 Pod,總共三層。Pod 的名字會長成 web 加兩串亂碼,中間那串是 ReplicaSet 的編號,最後那串才是 Pod 自己的

ReplicaSet 只負責維持數量,Deployment 負責換版本。明天做滾動更新的時候會看到 Deployment 開出第二個 ReplicaSet,然後把 Pod 從舊的那個慢慢搬到新的
接下來隨便挑一個 Pod 刪掉
kubectl delete pod <POD_NAME> -n ithome-lab
kubectl get pods -n ithome-lab

ReplicaSet 會一直在比對現在有幾個跟應該要有幾個,發現少了就補,數量也可以隨時改
kubectl scale deployment web -n ithome-lab --replicas=5
kubectl get pods -n ithome-lab
kubectl scale deployment web -n ithome-lab --replicas=3

不過 scale 改的是叢集上的狀態,YAML 檔裡面還是寫 3,下次 apply 就會被拉回去。正式一點的做法是改 YAML 再 apply,指令版適合臨時測試
ok今天就這樣,明天見 :D
