k8s学习笔记-P25-实践 rs+deployment

160 阅读6分钟

教程:尚硅谷Kubernetes教程(K8s入门到精通)_哔哩哔哩_bilibili

笔记摘自视频章节:第四章-p25


主题

实践rs和deployment

  • rs期望控制
  • deployment版本控制+动态扩缩容

操作

ReplicaSet

  • rs中嵌套了一个pod的模板,yaml字段含义如下
    • replicas: 期望数
    • matchLabels:匹配标签
      • key: value
    • template: pod的模板
      • env: 环境变量
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
        - name: php-redis
          image: wangyanglinux/myapp:v1
          env:
            - name: GET_HOSTS_FROM
              value: dns
          ports:
            - containerPort: 80
  • 创建
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl create -f p24_rs_demo.yaml
replicaset.apps/frontend created
  • 查看rs信息
kubectl get rs
NAME       DESIRED   CURRENT   READY   AGE
frontend   3         3         3       2m58s
  • 查看Pod lables
kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE    LABELS
frontend-7kjrb   1/1     Running   0          2m9s   tier=frontend
frontend-dmlhf   1/1     Running   0          2m9s   tier=frontend
frontend-fbk5f   1/1     Running   0          2m9s   tier=frontend
  • 删除pod,查看重建情况
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
frontend-9l6zq   1/1     Running   0          55s
frontend-h2fwx   1/1     Running   0          55s
frontend-zkqfr   1/1     Running   0          55s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl delete pod --all &
[1] 2346466
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# pod "frontend-9l6zq" deleted
pod "frontend-h2fwx" deleted
pod "frontend-zkqfr" deleted

[1]+  Done                    kubectl delete pod --all
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
frontend-7kjrb   1/1     Running   0          23s
frontend-dmlhf   1/1     Running   0          23s
frontend-fbk5f   1/1     Running   0          23s
  • 修改pod标签,查看期望数
    • 可以看到label变化后,新建了一个tier为frontend的pod,原来被修改的那个pod就变成了孤儿pod,没有rs去继续做管理
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl label pod frontend-7kjrb tier=hahahah --overwrite=true
pod/frontend-7kjrb unlabeled
frontend-t4h6r   1/1     Running   0          6s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods --show-labels
NAME             READY   STATUS    RESTARTS   AGE     LABELS
frontend-7kjrb   1/1     Running   0          4m27s   tier=hahahah
frontend-dmlhf   1/1     Running   0          4m27s   tier=frontend
frontend-fbk5f   1/1     Running   0          4m27s   tier=frontend
frontend-t4h6r   1/1     Running   0          13s     tier=frontend
  • 删除孤儿。label被修改的pod,不再被控制器管理,因此成为了孤儿。
kubectl delete  pod frontend-7kjrb
pod "frontend-7kjrb" deleted

Deployment

  • 文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.7.9
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
  • apply创建deployment
kubectl apply -f p24_deployment_demo.yaml
deployment.apps/nginx-deployment created
  • 查看状态,running
  • 查看deployment和rs,均存在。可以看出deployment是通过rs来进行pod管理的
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5b5c675446   3         3         3       4m52s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           4m55s
  • 修改期望为5
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5b5c675446-5j99s   1/1     Running   0          95s
nginx-deployment-5b5c675446-bgw64   1/1     Running   0          9m32s
nginx-deployment-5b5c675446-mldk9   1/1     Running   0          95s
nginx-deployment-5b5c675446-p6zj5   1/1     Running   0          9m32s
nginx-deployment-5b5c675446-z5t2q   1/1     Running   0          9m32s

deployment 滚动升级+回退

  • 修改属性后,查看rs,发现nginx-deployment出现两个版本的rs,这就是滚动升级的过程
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl set image deployment/nginx-deployment nginx=wangyanglinux/myapp:v2
deployment.apps/nginx-deployment image updated
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-5b5c675446   2         2         2       13m
nginx-deployment-85b9d5d475   5         5         2       12s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   4/5     5            4           13m
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-85b9d5d475-5vgc2   1/1     Running   0          10s
nginx-deployment-85b9d5d475-7crrb   1/1     Running   0          21s
nginx-deployment-85b9d5d475-bkg2z   1/1     Running   0          12s
nginx-deployment-85b9d5d475-kbnxq   1/1     Running   0          22s
nginx-deployment-85b9d5d475-vrc8t   1/1     Running   0          21s
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu#
  • 回退:监控pods状态。过程中 5b5c675446 为旧的rs,85b9d5d475为新的rs。可以看到old rs先创建pod,创建完成一定数量pod后,new rs销毁对应数量的pod,依次操作完成滚动
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl rollout undo deployment/nginx-deployment
deployment.apps/nginx-deployment rolled back
root@jjh-k8s-demo-master:~/k8s_yaml/bzhan_shangguigu# kubectl get pods -w
NAME                                READY   STATUS              RESTARTS   AGE
nginx-deployment-5b5c675446-ct6vj   0/1     ContainerCreating   0          2s
nginx-deployment-5b5c675446-txpgt   0/1     ContainerCreating   0          2s
nginx-deployment-5b5c675446-v2grt   0/1     ContainerCreating   0          2s
nginx-deployment-85b9d5d475-8vf7c   1/1     Running             0          48s
nginx-deployment-85b9d5d475-g8kxx   1/1     Running             0          48s
nginx-deployment-85b9d5d475-rclvz   1/1     Running             0          48s
nginx-deployment-85b9d5d475-s6dvd   1/1     Running             0          47s
nginx-deployment-5b5c675446-txpgt   1/1     Running             0          2s
nginx-deployment-5b5c675446-v2grt   1/1     Running             0          2s
nginx-deployment-5b5c675446-ct6vj   1/1     Running             0          2s
nginx-deployment-85b9d5d475-rclvz   1/1     Terminating         0          48s
nginx-deployment-5b5c675446-vj7hb   0/1     Pending             0          0s
nginx-deployment-5b5c675446-vj7hb   0/1     Pending             0          0s
nginx-deployment-85b9d5d475-s6dvd   1/1     Terminating         0          47s
nginx-deployment-5b5c675446-b429w   0/1     Pending             0          0s
nginx-deployment-5b5c675446-b429w   0/1     Pending             0          0s
nginx-deployment-85b9d5d475-8vf7c   1/1     Terminating         0          48s
nginx-deployment-5b5c675446-vj7hb   0/1     ContainerCreating   0          0s
nginx-deployment-5b5c675446-b429w   0/1     ContainerCreating   0          1s
nginx-deployment-85b9d5d475-rclvz   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-rclvz   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-rclvz   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-s6dvd   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-s6dvd   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-s6dvd   0/1     Terminating         0          50s
nginx-deployment-85b9d5d475-8vf7c   0/1     Terminating         0          51s
nginx-deployment-85b9d5d475-8vf7c   0/1     Terminating         0          51s
nginx-deployment-85b9d5d475-8vf7c   0/1     Terminating         0          51s
nginx-deployment-5b5c675446-vj7hb   1/1     Running             0          4s
nginx-deployment-85b9d5d475-g8kxx   1/1     Terminating         0          52s
nginx-deployment-5b5c675446-b429w   1/1     Running             0          5s
nginx-deployment-85b9d5d475-g8kxx   0/1     Terminating         0          53s
nginx-deployment-85b9d5d475-g8kxx   0/1     Terminating         0          53s
nginx-deployment-85b9d5d475-g8kxx   0/1     Terminating         0          53s

命令记录

  • 修改镜像:kubectl set image deployment/nginx-deployment nginx=nginx:1.91

  • 回退:kubectl rollout deployments nginx-deployment

  • 查看回退状态码 : kubectl rollout status deployments nginx-deployment

  • 回退记录显示:kubectl rollout history deployment/nginx-deployment

  • 回退到上一个版本:kubectl rollout undo deployment/nginx-deployment

  • 回退到固定version: kubectl rollout undo deployment/nginx-deployment --to-revision=2

  • 暂停回退: kubectl rollout pause deployment/nginx-deployment deployment

  • 修改版本保留数目: spec.revisonHistoryLimit