栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

k8s deploymen控制器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

k8s deploymen控制器

前面介绍了rs控制器,replicaSet ,了解到该控制器是用来维护集群中进行的pod数量的,但是往往在实际操作的时候,我们反而不会去直接使用rs,而是会使用更上层的控制器,deployment是一个非常重要的功能就是实现了pod的滚动更新,比如我们应用更新了,我们值需要更新我们的容器镜像,然后丢该deployment里面的pod模板镜像,那么deployment就会用滚动更新rolling update的方式升级现在的pod,这个能力是非常重要的,因为对于线上的服务我们需要做到不中断服务,所以滚动更新就成了必须的一个功能,而deployment这个能力的实现,依赖的就是rs这个资源对象,实际上我们可以通俗的理解就是每个deployment就对应集群中的一次部署。

deployment资源对象的格式和repliaSet几乎一直,如下资源对象就是一个常见的deployment资源类型

[root@master1 ~]# cat  nginx-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
   name: nginx-deploy
   namespace: default
spec:
   replicas: 3
   selector:
      matchLabels:
        app: nginx
   template:
      metadata: 
        labels:
          app: nginx
      spec:
         containers:
         - name: nginx
           image: nginx
           ports:
           - containerPort: 80

 

 

[root@master1 ~]# kubectl    describe  pod  nginx-deploy-845d4d9dff-9n4r7
Name:         nginx-deploy-845d4d9dff-9n4r7
Namespace:    default
Priority:     0
Node:         node1/192.168.1.127
Start Time:   Sat, 07 May 2022 04:23:43 -0400
Labels:       app=nginx
              pod-template-hash=845d4d9dff
Annotations:  podpreset.admission.kubernetes.io/podpreset-time-preset: 236960
Status:       Running
IP:           10.244.1.51
IPs:
  IP:           10.244.1.51
Controlled By:  ReplicaSet/nginx-deploy-845d4d9dff
Containers:
  nginx:
    Container ID:   docker://8ef7456c346511df79d6ec14fde3484ec8b6bb85987d4555759132c114fa3a42
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 07 May 2022 04:23:46 -0400
    Ready:          True
    Restart Count:  0
    Environment:    
    Mounts:
      /etc/localtime from localtime (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-sbhsk (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  localtime:
    Type:          HostPath (bare host directory volume)
    Path:          /etc/localtime
    HostPathType:  
  default-token-sbhsk:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-sbhsk
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  13m   default-scheduler  Successfully assigned default/nginx-deploy-845d4d9dff-9n4r7 to node1
  Normal  Pulled     13m   kubelet            Container image "nginx" already present on machine
  Normal  Created    13m   kubelet            Created container nginx
  Normal  Started    13m   kubelet            Started container nginx

我们仔细查看其中的。controlled By :replicaSet /nginx-deploy- 

[root@master1 ~]# kubectl   describe  rs  nginx-deploy-5d59d67564 
Name:           nginx-deploy-5d59d67564
Namespace:      default
Selector:       app=nginx,pod-template-hash=5d59d67564
Labels:         app=nginx
                pod-template-hash=5d59d67564
Annotations:    deployment.kubernetes.io/desired-replicas: 4
                deployment.kubernetes.io/max-replicas: 5
                deployment.kubernetes.io/revision: 3
                deployment.kubernetes.io/revision-history: 1
Controlled By:  Deployment/nginx-deploy
Replicas:       0 current / 0 desired
Pods Status:    0 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
           pod-template-hash=5d59d67564
  Containers:
   nginx:
    Image:        nginx:1.7.9
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  
    Mounts:       
  Volumes:        
Events:           

我们查看rs的详细信息

kubectl  describe  rs  ,里面有controlled By : deployment /nginx-deploy 。意思就是我们的pod依赖的控制器rs实际上被我们的deployment控制着,

[root@master1 ~]# kubectl   describe  rs  nginx-deploy-845d4d9dff
Name:           nginx-deploy-845d4d9dff
Namespace:      default
Selector:       app=nginx,pod-template-hash=845d4d9dff
Labels:         app=nginx
                pod-template-hash=845d4d9dff
Annotations:    deployment.kubernetes.io/desired-replicas: 3
                deployment.kubernetes.io/max-replicas: 4
                deployment.kubernetes.io/revision: 5
Controlled By:  Deployment/nginx-deploy
Replicas:       3 current / 3 desired
Pods Status:    3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
           pod-template-hash=845d4d9dff
  Containers:
   nginx:
    Image:        nginx
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  
    Mounts:       
  Volumes:        
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  26m   replicaset-controller  Created pod: nginx-deploy-845d4d9dff-9n4r7
  Normal  SuccessfulCreate  26m   replicaset-controller  Created pod: nginx-deploy-845d4d9dff-sqn2r
  Normal  SuccessfulCreate  26m   replicaset-controller  Created pod: nginx-deploy-845d4d9dff-t9gw6

这个有个小插曲,因为之前使用过rs一度以为deployment会受replicas的影响,后来发现describe里有写。replicaSet作用和之前一样还是来保证pod的个数始终保存指定的数量,所以deployment中的容器restartPolicy=always,因为容器必须始终保证自己处于running状态,replicaSetcai

可以去明确调整pod的个数,deployment是通过管理replicaSet的数量和属性来实现水平扩展。收缩,以及滚动更新两个功能的。

水平伸缩

 水平扩展收缩的功能比较简单,因为replicaSet就可以实现,所以deployment控制器只需要去修改它控制 的replicaSet的pod副本数量就可以了。比如我们吧pod的副本调整到4,deployment所对应的replicaSet就会自动创建一个新的pod出来,这样就水平扩展了

 kubectl  scale  deploy   nginx-deploy   --replicas=4

 kubectl  scale  deploy  name  -- replicase= #

[root@master1 ~]# kubectl  describe  rs  nginx-deploy-845d4d9df
Name:           nginx-deploy-845d4d9dff
Namespace:      default
Selector:       app=nginx,pod-template-hash=845d4d9dff
Labels:         app=nginx
                pod-template-hash=845d4d9dff
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 5
Controlled By:  Deployment/nginx-deploy
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
           pod-template-hash=845d4d9dff
  Containers:
   nginx:
    Image:        nginx
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  
    Mounts:       
  Volumes:        
Events:
  Type    Reason            Age    From                   Message
  ----    ------            ----   ----                   -------
  Normal  SuccessfulCreate  8m32s  replicaset-controller  Created pod: nginx-deploy-845d4d9dff-thfnd
  Normal  SuccessfulDelete  4m29s  replicaset-controller  Deleted pod: nginx-deploy-845d4d9dff-t9gw6
  Normal  SuccessfulDelete  4m29s  replicaset-controller  Deleted pod: nginx-deploy-845d4d9dff-thfnd

可以看到replicaSet控制器增加了一个新的pod,同样的deployment资源对象的时间中也可以看到完成了扩容的操作

[root@master1 ~]# kubectl  describe  deploy  nginx-deploy
Name:                   nginx-deploy
Namespace:              default
CreationTimestamp:      Thu, 21 Apr 2022 23:11:17 -0400
Labels:                 
Annotations:            deployment.kubernetes.io/revision: 5
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  
    Mounts:       
  Volumes:        
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  
NewReplicaSet:   nginx-deploy-845d4d9dff (2/2 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  11m    deployment-controller  Scaled up replica set nginx-deploy-845d4d9dff to 4
  Normal  ScalingReplicaSet  7m51s  deployment-controller  Scaled down replica set nginx-deploy-845d4d9dff to 2

滚动更新

如果只是水平扩展收缩这两个功能,就完全没有必须要设计deployment这个资源对象了,deployment最突出的一个功能是支持滚动更新,下一篇再说

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号