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

一、deployment部署控制器概念

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

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

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

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

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

二、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

 三、小结

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

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

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

功能:

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

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

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

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

原理:

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

四、deployment实现升级和回滚

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

· 浏览器访问

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,浏览器刷新查看是否迭代成功

发现,版本已经更新;

7,小结

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

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

        每修改一次镜像,就创建一个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

2,升级创建资源

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

六、蓝绿发布

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

· 浏览器访问

蓝环境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

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,浏览器访问测试

可见,切换新版本成功;

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

        实现的机制:

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

        2,部署svc,匹配标签

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

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

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

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的进阶学习了,你准备好了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/390508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云计算基础-网络虚拟化

虚拟交换机 什么是虚拟交换机 虚拟交换机是一种运行在虚拟化环境中的网络设备,其运行在宿主机的内存中,通过软件方式在宿主机内部实现了部分物理交换机的功能,如 VLAN 划分、流量控制、QoS 支持和安全功能等网络管理特性 虚拟交换机在云平…

java8-用流收集数据-6

本章内容口用co1lectors类创建和使用收集器 口将数据流归约为一个值 口汇总:归约的特殊情况 数据分组和分区口 口 开发自己的自定义收集器 我们在前一章中学到,流可以用类似于数据库的操作帮助你处理集合。你可以把Java8的流看作花哨又懒惰的数据集迭代器。它们…

[office] Excel设置打印表头 #学习方法#学习方法#微信

Excel设置打印表头 有时候需要在每页上都显示表头,这样好查看数据,下面我们来看一个练习; 1、启动Excel 1)点击“开始-所有程序-Microsoft-Microsoft Office Excel 2003"; 2)出现一个满是格子的空白窗口,这就是一张电子表格了&#x…

Simulink模块说明

Simulink库 Commonly Used Blocks Bus Creator 将一组输入元素合并成一条总线**输入:**要包含在总线中的输入元素。**输出:**由合并的输入元素组成的输出总线,指定为虚拟或非虚拟总线。 Bus Selector Bus Selector 模块输出您从输入总线选…

CTFshow web(文件上传158-161)

web158 知识点: auto_append_file 是 PHP 配置选项之一,在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时,PHP 将在执行完脚本文件的所有代码后,自动加载并执行指定的文件。 这…

物流快递管理系统

文章目录 物流快递管理系统一、系统演示二、项目介绍三、13000字论文参考四、系统部分页面展示五、部分代码展示六、底部获取项目源码和万字论文参考(9.9¥带走) 物流快递管理系统 一、系统演示 校园物流快递管理系统 二、项目介绍 主要技术…

2024.2.16日总结(小程序开发8)

数据监听器 监听对象属性的变化 数据监听器支持监听对象中单个或多个属性的变化 纯数据字段 什么是纯数据字段 纯数据字段指的是哪些不用于页面渲染的data字段 应用场景:例如有些情况下,某些 data 中的字段既不会展示在界面上,也不会传递给其他组件…

【每日一题】06 排序链表

问题描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 求解 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* sortList(struct ListNode* head) {struct…

SpringBoot RabbitMQ收发消息、配置及原理

今天分析SpringBoot通过自动配置集成RabbitMQ的原理以及使用。 AMQP概念 RabbitMQ是基于AMQP协议的message broker,所以我们首先要对AMQP做一个简单的了解。 AMQP (Advanced Message Queuing Protocol) is a messaging protocol that enables conforming client a…

476. Number Complement(数字的补数)

问题描述 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示…

JavaSE-03笔记【继承~super】

文章目录 1. 继承1.1 继承概述(理解)1.2 如何继承(掌握)1.2.1 继承的语法格式1.2.2 具体举例 1.3 继承的相关特性(掌握)1.4 对继承自Object类的方法的测试(理解)1.5 难点解惑1.5.1 掌…

07-k8s中secret资源02-玩转secret

一、回顾secret资源的简单实用 第一步:将想要的数据信息【key:value】中的value值,使用base64编码后,写入secret资源清单中; 第二步:创建secret资源; 第三步:pod资源引用secret资源&…

【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon 一.背景知识:前台与后台二.相关操作三.Linux的进程间关系四.自成会话五.守护进程四步骤六.服务器守护进程化 一.背景知识:前台与后台 核心知识就是一个用户在启动Linux时,都会给一个session会话&a…

最小生成树(Kruskal算法及相关例题)

1.Kruskal算法概念以及基本思路 (1)概念: 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。它的时间复杂度为O(ElogE)(E是图G的边的总数),适合于求边稀疏的网的最小生成树 。 其基本思想是&#xff…

JDBC访问数据库

目录 加载Driver驱动配置驱动地址 获取数据库连接创建会话-SQL命令发送器通过Statement发送SQL命令并得到结果处理结果关闭数据库资源测试 加载Driver驱动 1.在模块JDBC中新建一个lib目录文件 2. 将mysql-connector-j-8.2.0包粘贴至lib目录中。 配置驱动地址 // 加载…

Nvidia 携手 RTX 推出的本地运行 AI 聊天机器人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

人工智能学习与实训笔记(三):神经网络之目标检测问题

目录 五、目标检测问题 5.1 目标检测基础概念 5.1.1 边界框(bounding box) 5.1.2 锚框(Anchor box) 5.1.3 交并比 5.2 单阶段目标检测模型YOLOv3 5.2.1 YOLOv3模型设计思想 5.2.2 YOLOv3模型训练过程 5.2.3 如何建立输出…

uni-app 经验分享,从入门到离职(二)—— tabBar 底部导航栏实战基础篇

文章目录 📋前言⏬关于专栏 🎯关于小程序 tabbar 的一些知识🎯创建一个基本的 tabBar📝最后 📋前言 这篇文章的内容主题是关于小程序的 tabBar 底部导航栏的入门使用和实战技巧。通过上一篇文章的基础,我们…

【sgCreateTableColumn】自定义小工具:敏捷开发→自动化生成表格列html代码(表格列生成工具)[基于el-table-column]

源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/136126479 查看使用说明 --><div :class"$options.name"><div class"sg-head">表格列生成工具</div><div class"sg-container"…

C++,stl,常用排序算法,常用拷贝和替换算法

目录 1.常用排序算法 sort random_shuffle merge reverse 2.常用拷贝和替换算法 copy replace replace_if swap 1.常用排序算法 sort 默认从小到大排序 #include<bits/stdc.h> using namespace std;int main() {vector<int> v;v.push_back(1);v.push_ba…