Kubernetes(k8s)資源控制器 RS、Deployment詳細介紹


RS 與 RC 與 Deployment 關聯 

RC (ReplicationController )主要的作用就是用來確保容器應用的副本數始終保持在用戶定義的副本數 。即如 果有容器異常退出,會自動創建新的Pod來替代;而如果異常多出來的容器也會自動回收 

Kubernetes 官方建議使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 進行部署,RS 跟 RC 沒有 本質的不同,只是名字不一樣,並且 RS 支持集合式的 selector

RS(ReplicaSet )創建

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: wangyanglinux/myapp:v1
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

rs這個創建pod有點慢

查看pod的標簽

kubectl get pod  --show-labels

修改pod的標簽

 kubectl label pod frontend-dtx7t tier=frontend1 --overwrite=True

刪除rs

kubectl delete rs --all

RS 與 Deployment  的關聯 

Deployment 為 Pod 和 ReplicaSet 提供了一個聲明式定義(declarative)方法,用來替代以前的 ReplicationController 來方便的管理應用。典型的應用場景包括: 

  • 定義Deployment來創建Pod和ReplicaSet
  • 滾動升級和回滾應用
  • 擴容和縮容
  • 暫停和繼續Deployment
     

Ⅰ、部署一個簡單的 Nginx 應用


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: wangyanglinux/myapp:v1
        ports:
        - containerPort: 80
kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record
## --record參數可以記錄命令,我們可以很方便的查看每次 revision 的變化

創建

 kubectl apply -f deploy.yaml --record

顯示標簽

kubectl get pod --show-labels

Ⅱ、擴容

kubectl scale deployment nginx-deployment --replicas 10

Ⅲ、如果集群支持 horizontal pod autoscaling 的話,還可以為Deployment設置自動擴展
 

kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80

Ⅳ、更新鏡像也比較簡單

kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

Ⅴ、回滾

kubectl rollout undo deployment/nginx-deployment

更新 Deployment 

假如我們現在想要讓 nginx pod 使用 nginx:1.9.1 的鏡像來代替原來的 nginx:1.7.9 的鏡像

$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment "nginx-deployment" image updated

可以使用 edit 命令來編輯 Deployment

$ kubectl edit deployment/nginx-deployment
deployment "nginx-deployment" edited

查看 rollout 的狀態

$ kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out

查看歷史 RS

$ kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-1564180365   3         3         0       6s
nginx-deployment-2035384211   0         0         0       36s

Deployment 更新策略 

Deployment 可以保證在升級時只有一定數量的 Pod 是 down 的。默認的,它會確保至少有比期望的Pod數量少 一個是up狀態(多一個不可用)

Deployment 同時也可以確保只創建出超過期望數量的一定數量的 Pod。默認的,它會確保多比期望的Pod數 量多一個的 Pod 是 up 的(多1個 surge )
未來的 Kuberentes 版本中,將從1-1變成25%-25%

 kubectl describe deployments

Rollover(多個rollout並行) 

假如您創建了一個有5個 niginx:1.7.9  replica的 Deployment,但是當還只有3個 nginx:1.7.9 的 replica 創建 出來的時候您就開始更新含有5個 nginx:1.9.1  replica 的 Deployment。在這種情況下,Deployment 會立即 殺掉已創建的3個 nginx:1.7.9 的 Pod,並開始創建 nginx:1.9.1 的 Pod。它不會等到所有的5個 nginx:1.7.9 的 Pod 都創建完成后才開始改變航道 

回退 Deployment 

kubectl set image deployment/nginx-deployment nginx=nginx:1.91
kubectl rollout status deployments nginx-deployment
kubectl get pods
kubectl rollout history deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=2   ## 可以使用 --revision參數指定
某個歷史版本
kubectl rollout pause deployment/nginx-deployment    ## 暫停 deployment 的更新

您可以用 kubectl rollout status 命令查看 Deployment 是否完成。如果 rollout 成功完成, kubectl rollout status 將返回一個0值的 Exit Code
 

$ kubectl rollout status deploy/nginx
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment "nginx" successfully rolled out
$ echo $?
0

清理 Policy 

您可以通過設置 .spec.revisonHistoryLimit 項來指定 deployment 多保留多少 revision 歷史記錄。默認的會 保留所有的 revision;如果將該項設置為0,Deployment 就不允許回退了 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM