K8S精进之路-控制器Deployment-(1)


  在K8S中,最小运行单位为POD,它是一个逻辑概念,其实是一组共享了某些资源的容器组。POD是能运行多个容器的,Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。在POD中能够hold住网络和存储资源的容器就是,pause容器,它是一个一直循环运行的容器。

首先我们要搞清楚K8S有哪些资源,可以看看下面定义
类别名称
工作负载型Pod Replicaset ReplicationController Deployments StatefulSets Daemonset Job CronJob
服务发现及负载均衡Service Ingress
配置与存储Volume、Persistent Volume、CSl 、 configmap、 secret
集群资源Namespace Node Role ClusterRole RoleBinding ClusterRoleBinding
元数据资源HPA PodTemplate LimitRang

  用户一般不直接操作POD,而是通过控制器来,在上面的表格中,我主要操作的对象就是Replicaset,Deployments ,DaemonSet,Job,Cronjob,StatefulSet.现在我们分别说说这些控制器的应用场景吧。


Replicaset:代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。但是现在基本被Deployments 取代了.

Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。

DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如在Calico中的Agent就是用DaemonSet方式运行。DaemonSet是直接共享宿主机的网络,还有hostAliases,HostNetwork,hostPID,hostname这些资源的

Job:只要完成就立即退出,不需要重启或重建。这个用于一次性运行,比如大数据中的统计执行任务,运行完成了就不用去管了。

Cronjob:周期性任务控制,像Linux中crontab,在某一个时间定时运行程序

StatefulSet:管理有状态应用,比如数据库基本都是有状态应用的,你数据保存在指定的节点,那么下次运行时就必须在这个节点去运行,这样就是有状态的了。

  Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新,现在我们来创建一个简单的Deployment来运行测试。Deployment.yaml范例文件如下:

apiVersion: apps/v1  #aip版本信息
kind: Deployment     #资源类型
metadata:            #元数据定义
  name: myapp-deploy  #资源的名称
  namespace: default  #资源的命名空间,这里是default
spec:                 #资源的规格
  replicas: 3         #副本数,这里是3个
  selector:           #标签选择器,这里是去找相应的pod标签
    matchLabels:      #匹配哪些标签
      app: myapp      #第一个条件是app=myapp
      release: canary #第二个条件是release=canary
  template:           #pod的模板定义
    metadata:         #pod的元数据定义
      labels:         #pod的标签属性
        app: myapp    #pod的一个标签属性
        release: canary  #pod的第二个标签属性
    spec:             #pod的规格定义
      containers:     #容器定义
      - name: myapp   #容器的名称
        image: ikubernetes/myapp:v2  #容器的镜像
        ports:                      #容器暴露端口
        - name: http                #端口名称
          containerPort: 80         #端口号

在编辑好上面的deployment的yaml文件后,我们来创建它。

 kubectl app -f Deployment.yaml

在这里插入图片描述

  通过kubectl get deploy,kubectl get pods --show-labels 我们可以查看到已经创建了三个副本的myapp-deploy的deployment资源。我们通过上图中的get pods可以获得三个副本的IP地址,由于pod是开放了容器的80端口。我们直接访问可以获得相关内容。

curl 10.42.1.8

在这里插入图片描述
  Deployment资源对象是可以进行回滚的,它有一个属性revisionHistoryLimit,是一个可选配置项,用来指定可以保留的旧的ReplicaSet数量,默认保存记录10个。该理想值取决于心Deployment的频率和稳定性。如果该值没有设置的话,默认所有旧的Replicaset或会被保留,将资源存储在etcd中,是用kubectl get rs查看输出。每个Deployment的该配置都保存在ReplicaSet中,然而,一旦删除的旧的RepelicaSet,Deployment就无法再回退到那个revison了。

  如果将该值设置为0,所有具有0个replica的ReplicaSet都会被删除。在这种情况下,新的Deployment rollout无法撤销,因为revision history都被清理掉了。可以通过descirbe详细看看deployment当前的配置,我们可以看到当前的更新策略是StrategyType:RollingUpdate是滚动更新策略,它还有一个策略是Recreate: 重建式更新,就是删一个建一个。类似于ReplicaSet的更新方式,即首先删除现有的Pod对象,然后由控制器基于新模板重新创建新版本资源对象。
在这里插入图片描述

现在我们通过修改Deployment.yaml文件来进行版本升级。升级的版本配置如下,我们把镜像版本改成v1然后升级deployment.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      release: canary
  template:
    metadata:
      labels:
        app: myapp
        release: canary
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80

下面可以看到整个deployment升级过程,是停止一台,升级一台的这种循环。
在这里插入图片描述
在这里插入图片描述

以下可以看到原的rs作为备份,而现在是启动新的rs

在这里插入图片描述
通过kubectl rollout history deployment myapp-deployment 查看有多少个历史版本
在这里插入图片描述
现在我们可以回滚回原来的版本,也就是V2的版本,用如下命令

kubectl rollout undo deployment myapp-deploy

在这里插入图片描述
在这里插入图片描述

当然也可以通过如下指令,回到指定的版本,比如:

#回滚到第一个版本
kubectl rollout undo deployment myapp-deploy --to-revision=1 

当然也可以通过命令的方式升级pod镜像,

kubectl set image deployment/myapp-deploy myapp=ikubernetes/myapp:v2

使用以下命令扩容 Deployment

kubectl scale deployment myapp-deploy --replicas 5

#通过打补丁的方式进行扩容:
kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}'

通过打补丁的方式进行修改更新策略

 kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingupdate":{"maxsurge":1,"maxUnavailable":0}}}}'

金丝雀发布也就是灰度更新。

#设置maxSurge:1,maxUnavailable=0
kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy

#观察更新状态
kubectl rollout status deployments myapp-deploy  

#如果更新的节点没问题,然后resume继续剩下的更新
kubectl rollout resume deployment myapp-deploy

#查看最后的更新情况
kubectl get pods -l app=myapp -w 

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

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

相关文章

3.基于多能互补的热电联供微网优化运行复现(matlab代码)

0.代码链接 基于多能互补的热电联供微电网/综合能源系统优化运行(Matlab程序Yalmip+Cplex求解)_工业综合能源系统资源-CSDN文库 2. 主要内容:代码主要做的是多能互补的热电联供型微网优化运行模型,在需求侧对负荷类型…

庖丁解牛:NIO核心概念与机制详解 07 _ 字符集

文章目录 Pre概述编码/解码处理文本的正确方式示例程序Code Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现 庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片 庖丁解牛&…

点击这里,获取数据治理加速器!

数据管理员:又双叒叕…盘一遍数据,这种工作究竟还要重复多少次?! • 上上个月,发现数据有些问题,我把数据盘了一遍,梳理完数据的关联表才定位到问题; • 上个月,进行数据…

Linux 系列之 在一个文本中查找指定的数据

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

SO3 与so3 SE3与se3 SIM3

文章目录 1 旋转*叉乘1.1 旋转矩阵的导数1.2 物理意义1.3 实例1.4 角轴与反对称矩阵 2 SO3 与so32.1 so3 2 SO32.2 SO3 2 so3 3 SE3 与se33.1 se3 2 SE3:3.2 SE3 2 se3 4 SIM3 与sim35 Adjoint Map 1 旋转*叉乘 1.1 旋转矩阵的导数 根据旋转矩阵的性质: R R T I …

Python实现WOA智能鲸鱼优化算法优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

windows11系统如何设置锁屏壁纸

1. 在开始页面里面找到设置 2. 在设置里面找到个性化 3. 按照红色圈出部分操作 个性化锁屏界面 选择 图片 浏览照片 选择一张你觉得好看的图片作为锁屏壁纸 注:如果需要在锁屏后的登录页面显示壁纸 请勾选第三个红圈部分

opencv-图像平滑

高斯平滑 高斯平滑即采用高斯卷积核对图像矩阵进行卷积操作。高斯卷积核是一个近似服从高斯分布的矩阵,随着距离中心点的距离增加,其值变小。这样进行平滑处理时,图像矩阵中锚点处像素值权重大,边缘处像素值权重小。 import cv2 …

工业领域的设备“监测”和“检测”有何区别?

在工业领域中,设备的监测和检测是关键的运维活动,它们在保障设备可靠性和生产效率方面发挥着重要作用。尽管这两个术语经常被人们混为一谈,但它们在含义和应用上存在一些关键区别。 "监测"与"检测"的概念 1. 监测&#…

【每日一题】设计循环队列(C语言)

循环队列是我们可以对队列有更深一步的理解的题目,而且可以进一步加强其他方面的知识(例如对循环数组的取模运算,指针的解引用),是个蛮不错的巩固习题,话不多说,进入正题。 链接在此&#xff1…

【漏洞复现】IP-guard WebServer 存在远程命令执行漏洞

漏洞描述 IP-guard是由溢信科技股份有限公司开发的一款终端安全管理软件,旨在帮助企业保护终端设备安全、数据安全、管理网络使用和简化IT系统管理。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危…

Fiddle抓包工具的安装

Fiddle抓包工具的安装 首先进入官网:https://www.telerik.com/download/fiddler/fiddler-everywhere-windows 然后Fiddle为我们提供了很多个版本,其中只有一个版本是免费的,如下图: 成功下载如下图:

requests解决HAR支持问题:引入第三方库提升开发效率

关于HAR支持的问题已关闭。HAR(HTTP Archive)是一种用于存储HTTP请求和响应的标准格式,广泛应用于网络调试和性能优化中。然而,HAR支持的缺失可能会给开发者带来不便,影响其工作效率。 解决方案 为了解决这个问题&…

【图数据库实战】图数据库基本概念

1、图数据库的概念 维基百科图书库的概念: 在计算机科学中,图数据库(英语:graph database,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念…

【vue】ant-design-vue的树结构实现节点增删改查

根据业务需要,实现树结构的节点新增编辑删除功能,主要逻辑是利用树节点的scopedSlots属性对其进行自定义改造,监听悬停事件在节点右侧出现增删改对应图标,点击图标出现弹窗表单对内容进行修改,具体代码如下&#xff1a…

prometheus基本介绍 prometheus和zabbix的区别 grafana可视化工具

一、 promethues概念prometheus介绍promethues的特点prometheus的工作原理prometheus的架构 二、promethues和zabbix的区别三、prometheus安装部署prometheus下载安装prometheus启动浏览器访问查看暴露指标将Prometheus配置为systemd管理 配置node_exporter监控项node_promethe…

GNSS位移监测站系统是什么

WX-WY4G 一、GNSS位移监测站系统的工作原理GNSS位移监测站系统是一种基于导航卫星系统(GNSS)的高精度位移监测技术。它通过接收和处理来自卫星的信号,对地表物体的位置进行精度的实时监测。这个系统具有可靠性的特点,被广泛应用于…

Postgresql常用命令函数

1、string_agg()函数 1.1用法: string_agg(expression, delimiter),参数类型(text, text) or (bytea, bytea),返回类型和参数类型一致,第一个参数是字段名,第二个参数是样式,比如,或者#分隔。 1.2实战: SELECT * FR…

干货|数据资产评估的基本方法和选择方法

作为一项资产,数据应当拥有可计量的实际价值。所谓数据价值评估,即是指通过专业化的数据质量评价和价值评估,对数据进行客观评估,使其成为可计量的资产,并确定其具体的价值。这可以借助各种评估方法和指标,…

股票扩展功能(十)

A-扩展功能 文章目录 A-扩展功能一. 展示最近10天的斋戒信息, 以 PDF进行预览二. 展示最近10天的斋戒信息, 以 data list 进行响应 一. 展示最近10天的斋戒信息, 以 PDF进行预览 接口描述: 接口地址:/StockApi/extFasting/show 请求方式:GET consumes: produce…