15-k8s控制器资源-deployment/部署控制器

这篇具有很好参考价值的文章主要介绍了15-k8s控制器资源-deployment/部署控制器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、deployment部署控制器概念

        在学习rc和rs控制器资源时,我们指导,这两个资源都是控制pod的副本数量的,但是,他们两个有个缺点,就是在部署新版本pod或者回滚代码的时候,需要先apply资源清单,然后再删除现有pod,通过资源控制,重新拉取新的pod来实现回滚或者迭代升级;

        那么deployment部署控制器资源,就因此而诞生了;

        deployments资源,实际上就是用来专门部署业务代码的控制器,专门用于企业业务代码的升级和回滚;

        所以,这个资源非常的重要;

        deployment部署控制器,实际上控制的是rs副本控制器,如果说rs副本控制器是控制pod的副本数量的,那么deployment就是专门控制rs控制器资源的;

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

二、deployment资源的清单编写

        deployment资源与replicaset资源的清单编写方式没什么区别,只是kind的类型换成deployment就可以了,就实现了资源清单的编辑;

[root@k8s231 deployment]# cat dm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  #控制pod的副本数量
  replicas: 7
  #指定标签选择器,基于标签匹配pod
  selector:
    #声明基于标签匹配pod;
    matchLabels:
      k8s: xinjizhiwa
  #pod的编写,定义pod模板;
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v1
        ports:
        - containerPort: 80

[root@k8s231 deployment]# kubectl apply -f dm.yaml

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

 三、小结

我们先以查看标签的方式,查看一下pod,可以看到下图中,多出来一个自动生成的标签;

[root@k8s231 deployment]# kubectl get pods --show-labels

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

deployment:是用来部署服务的一个资源,是常见的,企业中经常用的资源控制器;

功能:

        1,管理rs资源,通过rs资源管理pod;

        2,它剧本上线部署、副本设置、滚动升级、回滚等功能;

        3,它也提供了声明式更新,可以使用apply命令进行更新镜像版本之类的能力‘

使用场景:企业部署迭代应用

原理:

        通过“标签”管理,实现rs资源的控制,它会在自动创建rs的过程中给rs自动生成一个特有的标签(专属于deployment),当apply更新清单的时候,它会通过标签选定是使用历史的rs还是重新创建rs;

四、deployment实现升级和回滚

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

1,编辑deployment资源清单(v1版本)

[root@k8s231 deployment]# cat dm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  #控制pod的副本数量
  replicas: 7
  #指定标签选择器,基于标签匹配pod
  selector:
    #声明基于标签匹配pod;
    matchLabels:
      k8s: xinjizhiwa
  #pod的编写,定义pod模板;
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v1
        ports:
        - containerPort: 80

2,创建deploy资源(V1)

[root@k8s231 deployment]# kubectl apply -f dm.yaml 

3,创建service资源用于访问

· 编辑svc资源清单

[root@k8s231 deployment]# vim svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  type: NodePort
  selector:
    k8s: xinjizhiwa
  ClusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 31000

· 创建svc资源

[root@k8s231 deployment]# kubectl apply -f svc.yaml

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

· 浏览器访问

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

4,修改deploy清单中pod镜像版本为V2

[root@k8s231 deployment]# cat dm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  replicas: 7
  selector:
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1

       #将镜像版本修改为V2
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
        ports:
        - containerPort: 80

5,重新apply一下deploy资源

[root@k8s231 deployment]# kubectl apply -f dm.yaml

6,浏览器刷新查看是否迭代成功

发现,版本已经更新;

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

7,小结

        deployment,不需要删除原有的pod,只需要apply重新更新一下资源清单,即可实现产品迭代,同比与rc和rs资源,优势明显;

        deployment资源,在apply升级后,是又重新创建了rs资源,也就是再升级的过程中,有两个rs资源;

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

        每修改一次镜像,就创建一个rs资源,我们选择使用哪个镜像,就会将这个镜像创建相应的pod副本数,不是用的,就逐渐归零;

五、deployment的升级策略

        什么事升级策略?就是升级时过程的控制策略;

1,编辑资源清单

[root@k8s231 deployment]# cat dm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  #声明设置升级策略
  strategy:
    #设置升级的策略类型,类型有两种;
    #第一种:Recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
    #第二种:RollingUpdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
    type: RollingUpdate
    #如果设置了滚动更新RollingUpdate类型,还需要设置更新的策略;
    rollingUpdate:
      #在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)
      maxSurge: 2
      #在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)
      maxUnavailable: 1



  replicas: 7
  selector:
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
        ports:
        - containerPort: 80

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

2,升级创建资源

[root@k8s231 deployment]# kubectl apply -f dm.yaml

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

六、蓝绿发布

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

1,概念

        蓝绿发布,就是准备两套代码,不需要停止老版本(不影响上一个版本的用户访问),而是在另一套环境中部署新版本然后进行测试,测试通过后将用户流量切换到新的版本,其特点是业务没有终端,升级风险相对较小;

        实现方式:

        1,部署当前版本代码

        2,部署svc资源

        3,部署新版本使用新的deployment名称,新的标签

        4,切换svc标签到新的pod中实现业务切换;

2,准备“蓝环境”版本v1

· 编辑deployment资源清单

[root@k8s231 deployment]# cat dm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  replicas: 7
  selector:
    matchLabels:
      k8s: xinjizhiwa
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v1
        ports:
        - containerPort: 80

· 编辑svc资源

[root@k8s231 deployment]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  type: NodePort
  selector:
    k8s: xinjizhiwa
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 31000

· 创建svc与deployment资源(蓝环境的)

[root@k8s231 deployment]# kubectl apply -f dm.yaml

[root@k8s231 deployment]# kubectl apply -f svc.yaml

· 浏览器访问

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

蓝环境v1准备完毕

3,准备“绿环境”v2

· 编辑deployment资源清单

[root@k8s231 deployment]# vim dm-green.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm02
spec:
  replicas: 7
  selector:
    matchLabels:
      k8s: k8s
  template:
    metadata:
      name: pod01
      labels:
        k8s: k8s
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
        ports:
        - containerPort: 80

· 创建deployment资源(绿环境的)

[root@k8s231 deployment]# kubectl apply -f dm-green.yaml

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

4,切换svc资源的标签,让其指向新版本

· 修改svc资源清单

[root@k8s231 deployment]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  type: NodePort
  selector:

    #修改标签,指向新的pod标签
    k8s: k8s
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 31000

· 重新apply资源清单(svc)

[root@k8s231 deployment]# kubectl apply -f svc.yaml

5,浏览器访问测试

可见,切换新版本成功;

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

七、灰度发布(金丝雀发布)

        实现的机制:

        1,部署老版本,使用多副本(模拟正式环境)

        2,部署svc,匹配标签

        3,部署新版本,标签与老版本标签一致(让svc能够访问到,副本从0开始)

        4,灰度版本测试没有问题,将恢复版本的副本数量,逐渐调高增加为生产数量;

        5,将旧版本逐渐调低至0,此时流量全部跑到了新版本上;

15-k8s控制器资源-deployment/部署控制器,k8s系列,kubernetes,容器,云原生

1,部署老版本

[root@k8s231 deployment]# vim dm.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm01
spec:
  replicas: 7
  selector:
    matchLabels:
      k8s: k8s
  template:
    metadata:
      name: pod01
      labels:
        k8s: xinjizhiwa
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v1
        ports:
        - containerPort: 80

[root@k8s231 deployment]# kubectl apply -f dm.yaml

2,部署新版本

[root@k8s231 deployment]# cat dm-green.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dm02
spec:

  #副本设置为0;
  replicas: 0
  selector:
    matchLabels:
      k8s: k8s
  template:
    metadata:
      name: pod01
      labels:
        k8s: k8s
    spec:
      containers:
      - name: c1
        image: harbor.xinjizhiwa.com/xinjizhiwa-nginx/nginx:v2
        ports:
        - containerPort: 80

[root@k8s231 deployment]# kubectl apply -f dm-green.yaml

3,部署svc

[root@k8s231 deployment]# cat svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: svc01
spec:
  type: NodePort
  selector:
    k8s: k8s
  clusterIP: 10.200.200.200
  ports:
  - port: 99
    targetPort: 80
    nodePort: 31000

[root@k8s231 deployment]# kubectl apply -f svc.yaml

4,将新版本的副本逐渐调高

5,将旧版本的副本逐渐调低

至此,灰度发布,学习完毕;

        灰度发布就是让新旧版本,一起上线,旧版本和新版本让用户随机访问到,然后没有业务问题之后,逐渐调高新版本副本数量,逐渐调低旧版本副本数量,从而达到灰度发布;

#########################################

至此,deployment部署控制器学习完毕;

#########################################

接下来,我们需要拿一个案例,来整体回顾一下,我们学过的知识;

#########################################

接下来,就是k8s的进阶学习了,你准备好了吗?文章来源地址https://www.toymoban.com/news/detail-832613.html

到了这里,关于15-k8s控制器资源-deployment/部署控制器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S中Deployment控制器的概念、原理解读以及使用技巧

    Deployment官方文档: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法, 在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,

    2024年02月21日
    浏览(34)
  • 18-k8s控制器资源-cronjob控制器

            job控制器是执行完一次任务,就结束;         cronjob控制器,是基于job控制器,定期频率性执行任务;等同于linux系统中的crontab一样; [root@k8s231 pi]# vim cronjob.yaml apiVersion: batch/v1 kind: CronJob metadata:   name: xinjizhiwa spec:   schedule: \\\"* * * * *\\\"   #定义job的模板   jobTemplate

    2024年02月22日
    浏览(47)
  • 14-k8s控制器资源-rs控制器replicasets

            replicaset副本控制器,简称:rs控制器;         用法:与rc控制器“几乎”相同;         能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式         注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样

    2024年02月21日
    浏览(42)
  • 17-k8s控制器资源-job控制

    job控制器:就是一次性任务的pod控制器,pod完成作业后不会重启,其重启策略是:Never         启动一个pod,执行完成一个事件,然后pod关闭;         事件:计算π的值,取前5000位; [root@k8s231 pi]# vim job.yaml apiVersion: batch/v1 kind: Job metadata:   name: job-pi spec:   #定义pod模板  

    2024年02月20日
    浏览(32)
  • K8s(Kubernetes)学习(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    什么是 Controller 以及作用 常见的 Controller 控制器 Controller 如何管理 Pod Deployment 基本操作与应用 通过控制器实现 Pod 升级回滚和弹性伸缩 StatefulSet 基本操作与应用 Daemonset 基本操作与应用 Job 基本操作与应用 Controller 无法解决问题 1 Controller 控制器 官网: http://kubernetes.p2hp.com/

    2024年02月09日
    浏览(39)
  • 13-k8s的控制器资源-rc控制器replicationcontrollers

            replicationcontrollers控制器资源,简称:rc控制器;         简单理解,rc控制器就是控制相同的pod副本数量;         使用rc控制器资源创建pod,就可以设定创建pod的数量; [root@k8s231 rc]# vim rc.yaml apiVersion: v1 kind: ReplicationController metadata:   name: rc01 spec:   #控制pod的副本

    2024年02月20日
    浏览(44)
  • K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

    Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP Ingress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx 但 K8s 为什么不直接使用 nginx 呢,是因为 K8s 也需要把转发的路由规则纳入

    2024年04月28日
    浏览(29)
  • Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

    目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器: 当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程) 大概步骤:

    2024年02月13日
    浏览(47)
  • K8s控制器

    kubectl create tabtab 下面的所有都可以创建模板文件 --dry-run=client -o yaml 查询资源对象的帮助信息         kubectl explain pod.spec.restartPolicy            #这里对上下层级关系需要清楚 获取Pod模板         kubectl run mypod --image=xxxx --dry-run=client -o yaml 获取Deployment         ku

    2024年02月03日
    浏览(52)
  • k8s 控制器

    Kubernetes(K8S)是一种开源的容器编排平台,它可以自动化地管理容器化应用程序的部署、扩展和运行。K8S中的控制器是一种重要的组件,它可以确保应用程序的状态与期望的状态一致。在K8S中,有五种常见的控制器,它们分别是: 1. ReplicaSet控制器 ReplicaSet控制器用于确保P

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包