K8S之Deployment的介绍和使用

Deployment的理论和实操

  • Deployment控制器:概念、原理解读
    • 概述
    • 工作原理
  • 编写Deployment资源清单文件
  • 使用案例:创建一个web站点
  • Deployment管理pod:扩容、缩容
    • 通过deployment管理应用,实现扩容,把副本数变成3
    • 通过deployment管理应用,实现缩容,把副本数变成2

Deployment控制器:概念、原理解读

概述

Deployment是kubernetes中最常用的资源对象,为ReplicaSet和Pod的创建提供了一种声明式的定义方法,在Deployment对象中描述一个期望的状态,Deployment控制器就会按照一定的控制速率把实际状态改成期望状态,通过定义一个Deployment控制器会创建一个新的ReplicaSet控制器,通过ReplicaSet创建pod,删除Deployment控制器,也会删除Deployment控制器下对应的ReplicaSet控制器和pod资源。

扩展:声明式定义是指直接修改资源清单yaml文件,然后通过kubectl apply -f 资源清单yaml文件,就可以更改资源

Deployment控制器是建立在ReplicaSet 之上的一个控制器,可以管理多个ReplicaSet ,每次更新镜像版本,都会生成一个新的ReplicaSet ,把旧的ReplicaSet 替换掉,多个ReplicaSet 同时存在,但是只有一个ReplicaSet 运行。
在这里插入图片描述
如上图:ReplicaSet v1控制三个pod,删除一个pod,在ReplicaSet v2上重新建立一个,依次类推,直到全部都是由ReplicaSet v2控制,如果ReplicaSet v2有问题,还可以回滚,Deployment是建构在ReplicaSet 之上的,多个ReplicaSet 组成一个Deployment,但是只有一个ReplicaSet 处于活跃状态。

工作原理

Deployment可以使用声明式定义,直接在命令行通过纯命令的方式完成对应资源版本的内容的修改,也就是通过打补丁的方式进行修改;Deployment能提供滚动式自定义自控制的更新;对Deployment来讲,在实现更新时还可以实现控制更新节奏和更新逻辑。

什么叫做更新节奏和更新逻辑呢?

默认先创建再删除

比如说Deployment控制5个pod副本,pod的期望值是5个,但是升级的时候需要额外多几个pod,那我们控制器可以控制在5个pod副本之外还能再增加几个pod副本;比方说能多一个,但是不能少,那么升级的时候就是先增加一个,再删除一个,始终保持pod副本数是5个;

通过Deployment对象,可以做到以下事情:

1、创建ReplicaSet和Pod
2、滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
3、平滑地扩容和缩容
4、暂停和继续Deployment

科普:金丝雀就是先放一个新的,保留几个老的。新的就是试水的金丝雀

编写Deployment资源清单文件

查看Deployment资源对象由哪几部分组成

 kubectl explain deployment

在这里插入图片描述
查看Deployment下的spec字段

kubectl explain deployment.spec

在这里插入图片描述

字段说明

  • minReadySeconds:k8s在等待设置的时间后才进行升级(如果没有设置该值,k8s会容器启动起来后就提供服务了)
  • paused:暂停,当我们更新的时候创建pod先暂停,不是立即更新
  • progressDeadlineSeconds:k8s 在升级过程中有可能由于各种原因升级卡住(这个时候还没有明确的升级失败),比如在拉取被墙的镜像,权限不够等错误。那么这个时候就需要有个 deadline ,在 deadline 之内如果还卡着,那么就上报这个情况,这个时候这个 Deployment 状态就被标记为 False,并且注明原因。但是它并不会阻止 Deployment 继续进行卡住后面的操作。完全由用户进行控制。
  • replicas:副本数
  • revisionHistoryLimit:保留的历史版本,默认是10
  • selector:标签选择器,选择它关联的pod(必须设置的参数)
  • strategy:更新策略
  • template:定义的pod模板(必须设置的参数)

查看Deployment下的spec.strategy字段

kubectl explain deploy.spec.strategy

在这里插入图片描述

支持两种更新,RecreateRollingUpdate

  • Recreate:重建式更新,删除一个更新一个
  • RollingUpdate:滚动更新,定义滚动更新方式,也就是pod能多几个,少几个(默认策略)

查看Deployment下的spec.strategy.rollingUpdate字段

kubectl explain deploy.spec.strategy.rollingUpdate

在这里插入图片描述

字段说明

  • maxSurge:更新的过程当中最多允许超出的指定的目标副本数有几个;
    它有两种取值方式,第一种直接给定数量,第二种根据百分比,百分比表示原本是5个,最多可以超出20%,那就允许多一个,最多可以超过40%,那就允许多两个
    允许存在的pod: 目标副本数 + maxSurge
  • maxUnavailable:最多允许几个不可用
    假设有5个副本,最多一个不可用,就表示最少有4个可用
    允许存在的pod: 目标副本数 - maxUnavailable

例如:
在这里插入图片描述
查看Deployment下的spec.template字段
template为定义Pod的模板,Deployment通过模板创建Pod

kubectl explain deploy.spec.template

在这里插入图片描述

deployment.spec.template为Pod定义的模板,和Pod定义不太一样,template中不包含 apiVersion 和 Kind 属性,要求必须有metadata。deployment.spec.template.spec为容器的属性信息,其他定义内容和Pod一致。

使用案例:创建一个web站点

deployment是一个三级结构,deployment管理replicaset,replicaset管理pod,
例子:用deployment创建一个pod

vim deploy-demo.yaml 

编写Deployment资源文件

apiVersion: apps/v1  # deployment对应的api版本
kind: Deployment     # 创建的资源是deployment
metadata:name: web-v1    # deployment的名字
spec:replicas: 2     # deployment管理的pod副本数selector:       # 标签选择器matchLabels:  # 筛选定义的标签需要跟template.metadata.labels定义的标签一致font: webversion: v1template:metadata:labels:    # Pod具有的标签font: webversion: v1spec:   #定义容器的属性containers:  - name: mywebimage: janakiramm/myapp:v1     # 容器使用的镜像imagePullPolicy: IfNotPresent  # 镜像拉取策略ports:- containerPort: 80     # 容器里的应用的端口

更新资源清单文件

kubectl apply -f deploy-demo.yaml

kubectl apply:表示声明式的定义,既可以创建资源,也可以动态更新资源

查看deploy状态

kubectl get deploy

在这里插入图片描述

1.NAME :列出名称空间中deployment的名称。
2.READY:显示deployment有多少副本数。它遵循ready/desired的模式。
3.UP-TO-DATE: 显示已更新到所需状态的副本数。
4.AVAILABLE: 显示你的可以使用多少个应用程序副本。
5.AGE :显示应用程序已运行的时间。

kubectl get rs

在这里插入图片描述

注:创建deploy的时候也会创建一个rs(replicaset)
ReplicaSet的名称始终设置为[DEPLOYMENT-NAME]-[RANDOM-STRING]。
RANDOM-STRING是随机生成的(引用pod的模板template的名字的hash值 )

1.NAME: 列出名称空间中ReplicaSet资源
2.DESIRED:显示应用程序的所需副本数,这些副本数是在创建时定义的。这是所需的状态。
3.CURRENT: 显示当前正在运行多少个副本。
4.READY: 显示你的用户可以使用多少个应用程序副本。
5.AGE :显示应用程序已运行的时间。

kubectl get pods -o wide | grep web

在这里插入图片描述
请求刚才创建的pod资源

curl 10.244.36.82

在这里插入图片描述

Deployment管理pod:扩容、缩容

通过deployment管理应用,实现扩容,把副本数变成3

vim  deploy-demo.yaml 

直接修改replicas数量,如下,变成3

spec:
replicas: 3

在这里插入图片描述

修改之后保存退出,执行

kubectl apply -f deploy-demo.yaml 

注意:apply不同于create,apply可以执行多次;create执行一次,再执行就会报错复。

kubectl get pods 

在这里插入图片描述
上面可以看到pod副本数变成了3个

查看web-v1这个控制器的详细信息

kubectl describe deploy web-v1

在这里插入图片描述

通过deployment管理应用,实现缩容,把副本数变成2

vim  deploy-demo.yaml 

直接修改replicas数量,如下,变成2

spec:
replicas: 2

修改之后保存退出,执行

 kubectl apply -f deploy-demo.yaml
kubectl get pods

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

软件开发大体流程

1.开发流程 2.角色分工 3.软件环境

Qt中tableView控件的使用

tableView使用注意事项 tableView在使用时,从工具栏拖动到底层页面后,右键进行选择如下图所示: 此处需要注意的是,需要去修改属性,从UI上修改属性如下所示: 也可以通过代码修改属性: //将其设…

Kafka安全模式之身份认证

一、简介 Kafka作为一个分布式的发布-订阅消息系统,在日常项目中被频繁使用,通常情况下无论是生产者还是消费者只要订阅Topic后,即可进行消息的发送和接收。而kafka在0.9.0.0版本后添加了身份认证和权限控制两种安全服务,本文主要…

微信小程序的医院体检预约管理系统springboot+uniapp+python

本系统设计的目的是建立一个简化信息管理工作、便于操作的体检导引平台。共有以下四个模块: uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 语言:pythonjavanode.js…

第十四天-网络爬虫基础

1.什么是爬虫 1.爬虫(又被称为网页蜘蛛,网络机器人),是按照一定规则,自动的抓取万维网中的程序或者脚本,是搜索引擎的重要组成;比如:百度、 2.爬虫应用:1.搜索引擎&…

Rust使用calamine读取excel文件,Rust使用rust_xlsxwriter写入excel文件

Rust使用calamine读取已存在的test.xlsx文件全部数据,还读取指定单元格数据;Rust使用rust_xlsxwriter创建新的output.xlsx文件,并写入数据到指定单元格,然后再保存工作簿。 Cargo.toml main.rs /*rust读取excel文件*/ use cala…

Linux下性能分析的可视化图表工具

1 sar 和sadf 1.1 简介 sar命令可以记录系统下的常见活动信息,例如CPU使用率、网络统计数据、Block I/O数据、内存使用情况 等。 sar命令的“-o [file_name]”参数可以将系统活动数据记录到file_name文件,然后通过sadf来解析,sadf命令的“-g…

【ArcGIS】基本概念-空间参考与变换

ArcGIS基本概念-空间参考与变换 1 空间参考与地图投影1.1 空间参考1.2 大地坐标系(地理坐标系)1.3 投影坐标系总结 2 投影变换预处理2.1 定义投影2.2 转换自定义地理(坐标)变换2.3 转换坐标记法 3 投影变换3.1 矢量数据的投影变换…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载3D model 最简实例(十三)

文章目录 前言一、3D model 文件介绍1. 3d model 介绍1.1 如何获取3d model 文件1.2 3d model 的文件格式1.3 obj模型数据格式2. 3d 立方体 model 实例——cube.obj二、Assimp 介绍1. Assimp 简介2.ubuntu 上安装libassimp3. 使用Assimp 解析 cube.obj 文件3.1 assimp_load_cub…

【ArcGIS】统计格网中不同土地利用类型占比

基于ArcGIS统计格网中不同土地利用类型占比 数据准备ArcGIS操作步骤1、创建渔网(Create Fishnet)2、建立唯一标识3、选择格网4、提取不同类别土地利用类型5、各类用地面积计算 参考另:可能出现的问题总结Q1:ArcGIS获取唯一值&…

备战蓝桥杯————如何判断回文链表

如何判断回文链表 题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2:…

AI学习(5):PyTorch-核心模块(Autograd):自动求导

1.介绍 在深度学习中,自动求导是一项核心技术,它使得我们能够方便地计算梯度并优化模型参数。PyTorch 提供了一个强大的自动求导模块(Autograd),它可以自动计算张量的导数得出梯度信息,同时也支持高阶导数计算。 1.1 概念词 在学…

无人机飞行控制系统技术,四旋翼无人机控制系统建模技术详解

物理建模是四旋翼无人机控制系统建模的基础,主要涉及到无人机的物理特性和运动学特性。物理建模的目的是将无人机的运动与输入信号(如控制电压)之间的关系进行数学描述。 四旋翼无人直升机是具有四个输入力和六个坐标输出的欠驱动动力学旋翼…

Linux系统——Nginx服务——响应四级模型

stream和http模块是同级 [rootnode2 html]#yum install epel-release.noarch -y [rootnode2 html]#yum install redis -y [rootnode2 html]#systemctl start redis[rootnode3 html]#yum install epel-release.noarch -y [rootnode3 html]#yum install redis -y [rootnode3 html…

基于java+IDEA+Mysql开发的SSM+旅游后台管理系统

基于javaIDEAMysql开发的SSM旅游后台管理系统 项目介绍💁🏻 旅游后台管理系统是一款应用于旅游后台管理的业务系统,实现旅游工作内容可视化、旅游管理专业化、业务评估数字化,从而提高旅游后台数据管理的高效性。 随着互联网时代的…

自动驾驶消息传输机制-LCM

需要用到LCM消息通讯,遂研究下。 这里写目录标题 1 LCM简介2. LCM源码分析3 LCM C教程与实例3.1 安装配置及介绍3.2 创建类型定义3.3 初始化LCM3.4 发布publish一个消息3.5 订阅和接收一个消息3.6 LCM进程间通讯3.7 注意事项?3.7.1 当数据结构定义的是数…

【ArcGIS】重采样栅格像元匹配问题:不同空间分辨率栅格数据统一

重采样栅格像元匹配问题:不同空间分辨率栅格数据统一 原始数据数据1:GDP分布数据2.1:人口密度数据2.2:人口总数数据3:土地利用类型 数据处理操作1:将人口密度数据投影至GDP数据(栅格数据的投影变…

阿里云定价_ECS产品价格_云服务器收费标准 - 阿里云官方活动

2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…

Docker 常用操作命令备忘

Docker 一旦设置好了环境,日常就只要使用简单命令就可以运行和停止。 于是,我每次用的时候,都想不起来一些关键性的命令到底怎么用,特此记录。 一、镜像管理 从公有仓库拉取镜像 (对于使用苹果电脑 M1/M2/M3 芯片的 …

Java玩转《啊哈算法》之模拟链表

人应该支配习惯,而绝不是让习惯支配人。一个人要是不能改掉坏习惯,那么他就一文不值。 目录 缘代码地址模拟链表创建遍历打印插入插入优化 完整代码 缘 各位小伙伴们好呀!本人最近看了下《啊哈算法》,写的确实不错。 但稍显遗憾…