iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
DevOps

k8s歷險記系列 第 15

Day15-有關係就沒關係 Deployment 和 ReplicaSet(二)

在前一章介紹完ReplicaSet,再來會介紹建立Deployment。
前一章有提到,基本上都是會用Deployment去控制ReplicaSet,下面的教學就可以看出建立Deployment跟ReplicaSet有何關係。

建立Deployment

首先建立一個nginx-example.yaml,並將下面內容複製進去。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

並在該yaml檔所在的目錄執行 apply

kubectl apply -f nginx-example.yaml

這樣就可以建立Deployment,如果要確認有沒有建立成功,則可以使用get deployments

kubectl get deployments

可以看到下圖有成功建立,如果你這時get pods的話,可以看到有三個pod正在建立。

https://ithelp.ithome.com.tw/upload/images/20210922/201296072X5z603fko.png

並且透過下圖可知,在建立完Deployment前,是沒有ReplicaSet的,但是建立之後,就會出現名為nginx-deployment-7848d4b86f的ReplicaSet。
https://ithelp.ithome.com.tw/upload/images/20210923/20129607cJXZnJ32o5.png
並且看到DESIRED跟CURRENT都是3,代表他期望有三個pod且當前有三個pod,不過由於READY是0,代表pod都還沒準備好,等一下再做get rs,就可以發現READY變成3了,代表pod都已經準備好可以運作了。

更新Deployment內image 版本

透過下面的指令,可以更新Deployment內image,以這個範例來說,可以將pod內的image從1.14.2改成1.16.1

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record

這樣可以將image更新,這時去get pods可以看到pods有重啟,但是Deployment並沒有重啟。
https://ithelp.ithome.com.tw/upload/images/20210922/20129607DEA73DzHkt.png

刪除Deployment

如果已經不再需要Deployment,則可以用下面的指令刪除Deployment。

 kubectl delete deployment nginx-deployment

由於前面的metadata.name為nginx-deployment,所以這邊刪除要指定刪nginx-deployment。
刪除後就會像下面這樣:
https://ithelp.ithome.com.tw/upload/images/20210922/20129607hIZ2p0UmSZ.png

在這章可以看出Deployment跟ReplicaSet是互相依靠的,就算當下沒有ReplicaSet,產生Deployment時也會順便產生一份。
在上面有示範更新Deployment內image,會看到他先建立新的pod,再把舊的pod給下掉,這種方式跟你使用哪種strategy有關,因此下一章會介紹Deployment所使用的不同strategy。


上一篇
Day14- 不純關係 Deployment 和 ReplicaSet(一)
下一篇
Day16-策略不只用在兵法 什麼是策略(Strategy)
系列文
k8s歷險記30

尚未有邦友留言

立即登入留言