【06】Kubernets:資源清單(控制器 - Deployment)

寫在前面的話api

 

上一節主要簡單的提了一下控制器都有哪些經常使用的,而且簡單的功能是啥,最後一併提了 ReplicaSet 控制器。app

可是 ReplicaSet 通常不須要咱們直接配置,多以從本節開始,開始學習 K8S 默認的控制器 Deployment。ide

 

 

Deployment 資源清單學習

 

和 rs 同樣,deployment 咱們也能夠簡寫成 deploy,先簡單的看下其資源清單的結構,以下表:測試

deployment
apiVersion       apps/v1 
kind       Deployment
metadata       和其餘 metadata 同樣,包括 name / labels 等
spec        
  minReadySeconds     最小準備時間
  paused     暫停
  replicas     副本數量
  revisionHistoryLimit     歷史版本保存數量,默認 10
  rollbackTo      
    revision   回滾到指定版本 
  selector      
    matchExpressions   標籤選擇器
    matchLabels   標籤選擇器(通常用這個)
  strategy      
    rollingUpdate    
      maxSurge 能被同一時間升級容許的最大 Pod 數,能夠是數字或百分比
      maxUnavailable 同一時間不容許升級數,能夠是數字或者百分比
    type   選擇方式,能夠是 RollingUpdate(默認)或者 Recreate
  template      
    metadata   Pod 的 metadata
    spec   Pod 的 spec

 

 

Deployment 示例spa

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: erp
      release: stable
  template:
    metadata:
      name: deploy-container
      namespace: default
      labels:
        app: erp
        release: stable
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443

運行:咱們這裏將再也不使用 create 根據配置文件建立,而是使用 apply 建立:code

# 建立
kubectl apply -f deploy-demo.yaml

# 查看
kubectl get deploy
kubectl get rs kubectl get pods

結果如圖:blog

咱們說過 Deployment 屬於 ReplicaSet 的更上層,因此咱們建立 Deploy 以後是能夠查看到 ReplicaSet 的,並且根據命名的特色咱們也能夠發現:資源

Deploy --> ReplicaSet --> Pod 命令屬於一級一級的增長。其中 rs 名字後面的隨機數其實際是模板名稱的 hash 值。get

此時咱們能夠作個升級測試,修改 yaml 中的鏡像版本由 v1 改成 v2:

kubectl apply -f deploy-demo.yaml

再度應用配置查看:

kubectl get pods -l app=erp -w

經過該方法咱們能夠看到整個過程,完成後查看 rs:

kubectl get rs -o wide

結果如圖:

能夠看到原來 v1 版本的 rs 在運行變成了 0,而 v2 版本的變成了 2,可是 v1 版本的 rs 並未刪除。

這是因爲咱們保存歷史版本的緣由,也就是:

kubectl rollout history deployment deploy-demo

結果如圖:

 

使用打補丁的方式直接修改 Pod 數量:

kubectl patch deployment deploy-demo -p '{"spec":{"replicas":3}}'

結果如圖:

 

一樣,咱們可使用另外的方法更新,好比更新鏡像版本:

kubectl set image deployment deploy-demo myapp=ikubernetes/myapp:v3

結果如圖: 

 

在更新過程當中,咱們可使用 pause 暫停實現金絲雀發佈: 

kubectl rollout pause deployment deploy-demo

那麼他會根據更新策略進行一次更新後暫停,等待下次 resume 後徹底更新:

kubectl rollout resume deployment deploy-demo

這裏就不作過多演示了。

 

一樣,回滾歷史版本:

kubectl rollout undo deployment deploy-demo --to-revision=2

結果如圖:

 

小結

 

其實對於 Deployment,咱們須要記憶的並很少,由於以前的 Pod 和 RS 中已經將底層的知識記了一遍,咱們在這裏只是至關於在他的外面繼續套了一層套子。

相關文章
相關標籤/搜索