【赵渝强老师】K8s中的Deployment控制器

在这里插入图片描述

  K8s的Deployment将Pod部署成无状态的应用程序,它只关心Pod的数量、Pod更新方式、使用的镜像和资源限制等。由于是无状态的管理方式,因此Deployment中没有角色和顺序的概念,换句话说:Deployment中没有状态。
  通过使用Deployment,可以让开发人员上线部署Pod、设置Pod的副本、实现Pod的升级与回滚。通过在yaml文件中描述Deployment的目标是什么,Deployment控制器就会自动完成对Pod和Replica Set的管理。Kubernetes运行创建一个新的Deployment,也可以用一个新的Deployment替换旧的Deployment。

提示:ReplicaSet是下一代复本控制器,它可以独立使用。但在Kubernetes中主要是被Deployment作为协调Pod的创建、更新和删除。当使用Deployment控制器时,它会自动创建ReplicaSets,并对其进行管理。

  视频讲解如下:

K8s中的Deployment控制器

【赵渝强老师】K8s中的Deployment控制器

  Deployment、ReplicaSet和Pod之间的关系可以通过下图来说明。
在这里插入图片描述

  下面的描述了创建和更新Deployment的过程。

  • 创建Deployment的过程:Deployment将创建ReplicaSet。ReplicaSet在后台根据指定的副本数创建Pod,并检查Pod的状态以确定Pod启动成功还是失败。
  • 更新Deployment的过程:当用户更新Deployment时,Kubernetes会创建一个新的ReplicaSet。Deployment会将Pod从旧的ReplicaSet迁移到新的ReplicaSet中。如果迁移失败或者Pod不稳定,Deployment会自动回滚到上一个版本。如果迁移成功,Deployment将清除旧的不必要的ReplicaSet。

  在掌握的Deployment控制器的作用后,这里将通过一个示例来演示如何使用Deployment控制管理Pod。
(1)创建deployment-demo.yaml文件,并输入下面的内容:

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demolabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- containerPort: 80

  其中的参数含义如下表所示。
在这里插入图片描述

(2)通过运行以下命令创建 Deployment。

kubectl apply -f deployment-demo.yaml

(3)查看创建的Deployment和ReplicaSet信息。

kubectl get deployments,replicaset,pod

提示:这条命令可以简写为下面的形式:
kubectl get deploy,rs,pod

  输出的信息如下图所示:
在这里插入图片描述

(4)查看每个Pod自动生成的标签,如下图所示。

kubectl get pods --show-labels

在这里插入图片描述

(5)修改yaml文件来实现更新的目的。下面的yaml文件将Nginx的版本升级到了1.9.1,并将Pod的副本数改成了4。

apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demolabels:app: nginx
spec:replicas: 4selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.9.1imagePullPolicy: IfNotPresentports:- containerPort: 80

提示:这里也可以使用命令行的方式来实现更新,例如:
kubectl set image deploy deployment-demo nginx=nginx:1.9.1

(6)通过运行以下命令重新应用 Deployment。

kubectl apply -f deployment-demo.yaml

(7)获取Deployment的信息。

kubectl describe deployments deployment-demo输出的部分信息如下:
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.9.1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>

(8)执行下面的命令,将Nginx的版本更新到1.7.9。

kubectl --record deployment.apps/deployment-demo \
set image deployment.apps/deployment-demo nginx=nginx:1.7.9

提示:为了能够追溯修改历史记录,这里使用了–record参数。

(9)获取Deployment的信息。

kubectl describe deployments deployment-demo# 输出的部分信息如下。这里看出这里的Nginx版本又回到了1.7.9.
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.7.9Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>

(10)执行命令追溯修改的历史。

kubectl rollout history deployment deployment-demo# 输出的信息如下:
deployment.extensions/deployment-demo 
REVISION  CHANGE-CAUSE
2           <none>
3           kubectl deployment.apps/deployment-demo \set image deployment.apps/deployment-demo \nginx=nginx:1.7.9 --record=true

(11)执行命令将回滚到版本2。

kubectl rollout undo deployment deployment-demo --to-revision=2

(12)重新获取Deployment的信息。

kubectl describe deployments deployment-demo# 输出的部分信息如下。这里看出这里的Nginx版本又回到了1.9.1。
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginx:1.9.1Port:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>

(13)下面的命令将对Deployment进行缩放操作。

kubectl scale deployment deployment-demo --replicas=7

(14)下面的命令将暂停和恢复Deployment

kubectl rollout pause deployment deployment-demo
kubectl rollout resume deployment deployment-demo

提示:可以在更新Deployment之前暂停Deployment,等待更新完成后在恢复它。这允许在暂停和恢复之间应用多个修补程序,而不会触发不必要的Deployment。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UART 如何实现波特率自动检测原理介绍

为什么需要波特率自动检测机制 我们都知道&#xff0c;串口通讯是需要约定波特率才能够进行准确的通讯。此时假设&#xff0c;你们公司开发了一个板子&#xff0c;有一个串口与外接设备进行通讯。因为你们公司开发的产品要提供给多个客户&#xff0c;而有些客户可能之前就有一…

高通Android 12 音量API设置相关代码

// 获取当前音量大小public static int getCurrentVolume(Context context) {AudioManager audioManager (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);return audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); // 使用 STREAM_MUSIC 作为示例…

Cesium笔记 canvas定制billboard

Cesium 中label时&#xff0c;想要设置text的背景图片时&#xff0c;label没有backgroundimage属性。 如果使用labelbillboard 的方式设置&#xff0c;会存在文本长短不一时&#xff0c;图片不能自适应等问题。 const showLabelFun (dataMcInfo, backgroundcolor) > {var…

MacOS Catalina 从源码构建Qt6.2开发库之02: 配置QtCreator

安装Qt-creator-5.0.2 在option命令中配置Qt Versions指向 /usr/local/bin/qmake6 Kits选入CLang

SSM+Vue社区物业管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…

leetcode721. 账户合并

给定一个列表 accounts&#xff0c;每个元素 accounts[i] 是一个字符串列表&#xff0c;其中第一个元素 accounts[i][0] 是 名称 (name)&#xff0c;其余元素是 emails 表示该账户的邮箱地址。 现在&#xff0c;我们想合并这些账户。如果两个账户都有一些共同的邮箱地址&#x…

【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU

本文浅析淘汰策略与工作中结合使用、选取&#xff0c;并非针对算法本身如何实现的 文章目录 FIFOLFULRUW-TinyLFU实践与优化监控与调整 FIFO first input first output &#xff0c; 先进先出&#xff0c;即最早存入的元素最先取出&#xff0c; 典型数据结构代表&#xff1a;…

Elasticsearch使用Easy-Es + RestHighLevelClient实现深度分页跳页

注意&#xff01;&#xff01;&#xff01;博主只在测试环境试了一下&#xff0c;没有发到生产环境跑。因为代码还没写完客户说不用弄了( •̩̩̩̩&#xff3f;•̩̩̩̩ ) 也好&#xff0c;少个功能少点BUG 使用from size的时候发现存在max_result_window10000的限制&…

TypeScript介绍和安装

TypeScript介绍 TypeScript是由微软开发的一种编程语言&#xff0c;它在JavaScript的基础上增加了静态类型检查。静态类型允许开发者在编写代码时指定变量和函数的类型&#xff0c;这样可以在编译时捕获潜在的错误&#xff0c;而不是等到运行时才发现问题。比如&#xff0c;你…

用systemd 来控制 qt 程序的启动, 停止 . 解决 qt.qpa.xcb: could not connect to display 问题

author: hjjdebug date: 2024年 09月 28日 星期六 15:49:51 CST description: 用systemd 来控制 qt 程序的启动&#xff0c;停止 解决 qt.qpa.xcb: could not connect to display 问题 1. 先写一个QT 的测试程序 basic, 让他不断打印数字. $ cat main.cpp #include <QAp…

生成式人工智能在软件开发中的角色

随着生成式人工智能&#xff08;AIGC&#xff0c;Artificial Intelligence Generated Content&#xff09;技术的飞速进步&#xff0c;软件开发领域的工作方式也在发生着革命性的变化。从代码生成、错误检测到自动化测试&#xff0c;AI工具正在成为开发者的得力助手。然而&…

基于STM32的无人驾驶车辆系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集与处理路径规划与避障控制实时反馈与控制系统应用场景结论 1. 引言 随着无人驾驶技术的发展&#xff0c;嵌入式系统在无人驾驶车辆中的应用变得越来越重要。STM32作为高效…

Java SPI 原理、样例

在 Java 中&#xff0c;SPI&#xff08;Service Provider Interface&#xff09;全称为服务提供者接口&#xff0c;它是一种用于实现框架扩展和插件化的机制。 一、SPI 作用 允许在运行时动态地为接口查找服务实现&#xff0c;而不需要在代码中显式地指定具体的实现类。 这使得…

代码随想录算法训练营Day13

110.平衡二叉树 力扣题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 后序迭代 class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root)!-1;}public int getHeight(TreeNode root){if(rootnull){return 0;}int leftheightgetHei…

【python】函数的定义

目录 函数介绍函数的定义函数的参数函数的返回值函数说明文档函数的嵌套调用变量的作用域综合案例 学习目标&#xff1a; 掌握函数的基础定义语法 函数的定义 函数的定义&#xff1a; def 函数名(传入参数):函数体return 返回值函数的调用&#xff1a; 函数名(参数)演示…

WordPress精选文章如何添加侧边栏和页面?

WordPress精选帖子是一项功能&#xff0c;可让用户在其网站主页或其他值得注意的部分突出显示特定帖子。这些精选帖子通常以视觉上独特的方式显示&#xff0c;例如以滑块、网格或轮播格式显示&#xff0c;以提高其可见性和对访问者的吸引力。 网站所有者可以手动选择他们想要推…

云计算Openstack

OpenStack是一个开源的云计算管理平台项目&#xff0c;由美国国家航空航天局&#xff08;NASA&#xff09;和Rackspace公司合作研发并发起&#xff0c;以Apache许可证授权。该项目旨在为公共及私有云的建设与管理提供软件支持&#xff0c;通过一系列相互协作的组件实现云计算服…

MMD模型及动作一键完美导入UE5-衣服布料模拟(四)

1、给角色刷布料 1、打开角色,通过Window->Clothing打开模型布料窗口 2、选中裙子右键,创建布料数据 3、选择裙子,右键->应用布料数据 4、激活布料画笔,就可以开始绘制布料了 5、调整画笔大小和布料值进行绘制,布料值为0表示刚体

高校教师成果管理小程序的设计与实现springboot(lw+演示+源码+运行)

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

5分钟精通Excel在go中的使用

一些简单操作可以在官方文档中找到&#xff0c;应该足够无经验的朋友们入门 介绍 - 《Excelize v2.2 中文文档》 - 书栈网 BookStack 这里贴一个中文版的链接&#xff08;以excelize库为例&#xff0c;相对其他库来说&#xff0c;体验很不错&#xff09;&#xff0c;不过要注…