深入剖析k8s-控制器思想

引言

本文是《深入剖析Kubernetes》学习笔记——《深入剖析Kubernetes》

正文

控制器都遵循K8s的项目中一个通用的编排模式——控制循环

for {实际状态 := 获取集群中对象X的实际状态期望状态 := 获取集群中对象X的期望状态if 实际状态 == 期望状态 {// do nothing} else {执行编排动作,将实际状态调整为期望状态}
}

作业副本与水平扩展

如果更新了Deployment的Pod模版,那么Deployment就需要遵循滚动更新的方式,来升级现有容器 → ReplicaSet.
在这里插入图片描述
DeployController 只需要修改它所控制的ReplicaSet的Pod副本个数就可以了。

相关命令

k scale deployment nginx-deployment --replicas=4 # 调整replicas数量k rollout status deployment nginx-deployment # 实时查看Deployment对象的状态变化k edit deployment/nginx-deployment # 通过修改yaml文件调整deployment状态

在这里插入图片描述
滚动更新,要求一定使用Pod的健康检查机制检查应用的运行状态,而不是简单地依赖容器的Running状态。

在控制器在滚动更新过程中永远会确保2个Pod处于可用状态,至多只有4个Pod同时存在于集群中,由RollingUpdateStrategy进行控制。

  strategy:type: RollingUpdaterollingUpdate:maxSurge: 1 # 除了DESIRED数量外,在一次滚动更新中Deplyment控制气还可以创建多个新PodmaxUnavailable: 1 # 可以删除多少旧Pod

上述案例

k set image deployment/nginx-deployment nginx=nginx:1.91 # 设置deployment nginx版本

在这里插入图片描述

k rollout undo deployment/nginx-deployment # 错误回滚,rs仍然保存k rollout history deployment/nginx-deployment --revision=2 # 查看API对象的细节k rollout undo deployment/nginx-deployment --to-revision=2 # 最后加上目标版本号,来回滚指定版本

在这里插入图片描述

每一次操作都会生成rs,是否造成资源浪费?

解决方案1:

k rollout pause deployment/nginx-deployment... k edit / k set imagek rollout resume deploy/nginx-deployment

解决方案2:

spec.revisionHistoryLimit=0 再也不能进行回滚操作

问题

应用的发布流程往往千差万别,可能有很多定制化的需求。例如:会有会话粘连(session sticky),这就意味着更新时哪个Pod能下线不是随便选择的。

StatefulSet :拓扑状态

有些实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,就称为有状态应用。

StatefulSet将应用状态抽象为两种情况

  1. 拓扑状态:应用的多个实例之间不是完全对等的。
  2. 存储状态:应用的多个实例分别绑定了不同的存储数据。

Headless Service

Services是K8s用来将一组Pod暴露给外界访问的一个机制。

  1. 以Service的VIP(virtual IP的方式):当访问10.0.23.1这个Service IP地址时,会把请求转发到该Service所代理的Pod上。
  2. 以Service的DNS方式:访问my-svc-namespace.svc.cluster.local这条DNS记录,就可以访问my-svc所代理的Pod上
    1. Normal Servcie:解析DNS时,返回的是VIP
    2. Headless Service:解析DNS时,直接返回的是Pod IP

创建Healess Service

apiVersion: v1
kind: Service
metadata:name: nginxlabels:app: nginx
spec:selector:app: nginxports:- name: webport: 80clusterIP: None # 不同点

创建一个Healess Service之后,所代理的所有Pod的IP都会被绑定到<pod-name>.<svc-name>.<namespace>.svc.cluster.local上。
在这里插入图片描述

StatefulSet如何使用这个DNS记录为维持Pod的拓扑状态

StatefulSet让其所有Pod都有唯一的网络标识,即使Pod被删除,重新创建的容器网络标识与原先 相同 (IP不同)

StatefulSet:存储状态

PVC和PV的设计,实际上类似于“接口”和“实现”的思想。

开发者只要知道并会使用PVC;运维人员负责给“接口”绑定具体的实现,即PV;

apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: nginx-servicereplicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.9.1ports:- containerPort: 80name: webvolumeMounts:- mountPath: /usr/share/nginx/htmlname: wwwvolumeClaimTemplates:- metadata:name: wwwspec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi

使用volumeClaimTemplate进行PV和PVC的绑定

总结

  1. StatefulSet的控制器直接管理的是Pod。
  2. K8s通过Headless Service为这些编号的Pod,在DNS服务器中生成有相同编号的DNS记录。
  3. StatefulSet为每一个Pod分配并创建一个相同编号的PVC。

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

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

相关文章

buuctf misc做题笔记

喵喵喵 使用stegsolve.jar&#xff0c;按BGR顺序提取出一个png图片&#xff0c;是一个一半得二维码&#xff0c;修改图片高度后&#xff0c;解析出一个百度网盘地址&#xff0c;https://pan.baidu.com/s/1pLT2J4f 下载得到压缩包flag.rar。解压成功&#xff0c;但是报一个出错…

4 在QEMU硬件模拟器中运行开源鸿蒙OpenHarmony4.1的操作系统,无需实体开发板

在QEMU硬件模拟器中运行开源鸿蒙OpenHarmony4.1的操作系统&#xff0c;无需实体开发板 作者将狼才鲸日期2024-03-01 先下载源码和编译程序&#xff1a; 查看 开源鸿蒙OpenHarmony4.1源码下载、编译&#xff0c;生成OHOS_Image可执行文件的最简易流程 我准备在QEMU模拟器中运行…

LangChain---大型语言模型(LLM)的标准接口和编程框架

1.背景说明 公司在新的一年规划中突然提出要搞生成式AI(GenAI)的相关东西&#xff0c;在公司分享的参考资料中了解到了一些相关的信息&#xff0c;之所以想到使用LangChain&#xff0c;是因为在应用中遇到了瓶颈问题&#xff0c;除了已经了解和研究过的OpenAI的ChatGpt&#xf…

蓝桥杯Java B组历年真题(2013年-2019年)

一、2013年真题 1、世纪末的星期 使用日期类判断就行&#xff0c;这里使用LocalDate&#xff0c;也可以使用Calendar类 答案 2099 使用LocalDate import java.time.LocalDate; import java.time.format.DateTimeFormatter; // 1:无需package // 2: 类名必须Main, 不可修改p…

1小时网络安全事件报告要求,持安零信任如何帮助用户应急响应?

12月8日&#xff0c;国家网信办起草发布了《网络安全事件报告管理办法&#xff08;征求意见稿&#xff09;》&#xff08;以下简称“办法”&#xff09;。拟规定运营者在发生网络安全事件时应当及时启动应急预案进行处置。 1小时报告 按照《网络安全事件分级指南》&#xff0c…

速盾:动态网站用cdn更慢吗

当谈到网站速度时&#xff0c;内容传递网络&#xff08;Content Delivery Network&#xff0c;CDN&#xff09;是不可忽视的一个因素。很多人可能有疑惑&#xff0c;动态网站使用CDN是否会导致加载速度变慢。为了解决这个问题&#xff0c;我们需要了解动态网站和CDN的工作原理&…

mybatis动态加载mapper.xml

mybatis动态加载mapper.xml mybatis动态加载mapper.xml、springboot mybatis动态加载mapper.xml 教程连接&#xff1a;https://blog.csdn.net/weixin_44480167/article/details/136356398

测试linux系统某些文件属性之test命令

要检测系统上某些文件或相关属性时&#xff0c;我们可以使用test命令&#xff0c;比如&#xff1a;检查/root/ztj.txt文件是否存在&#xff0c;可以使用test -e /root/ztj.txt命令&#xff0c;不过执行结果不会显示任何信息&#xff0c;需配合$?或&&及||来展现具体结果…

Find My扫地机器人|苹果Find My技术与机器人结合,智能防丢,全球定位

扫地机器人又称自动打扫机、智能吸尘、机器人吸尘器等&#xff0c;是智能家电的一种&#xff0c;能凭借人工智能&#xff0c;自动在房间内完成地板清理工作。一般采用刷扫和真空方式&#xff0c;将地面杂物先吸纳进入自身的垃圾收纳盒&#xff0c;从而完成地面清理的功能。现今…

[AutoSar]BSW_Com07 CAN报文接收流程的函数调用

目录 关键词平台说明一、背景二、顺序总览三、函数说明3.1 Com_RxIndication&#xff08;&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)…

贝叶斯定理与条件独立假设:朴素贝叶斯分类方法深度解读

今天给大家分享的是朴素贝叶斯算法&#xff0c;这个算法在实际使用中不是很多&#xff0c;因为现在很多算法已经发展的很好&#xff0c;性能上也比朴素贝叶斯算法的好很多&#xff0c;因此在实际中我们其实看到在实际应用中朴素贝叶斯算法的使用已经比较少&#xff0c;即使出现…

HotFix原理学习 IL2CPP 学习

原文链接&#xff1a;Unity 游戏用XLua的HotFix实现热更原理揭秘-CSDN博客 本文通过对XLua的HoxFix使用原理的研究揭示出来这样的一套方法。这个方法的 第一步&#xff1a;通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步&#xff1a;生成函数连接器…

好视通视频会议系统存在任意文件读取漏洞复现 [附POC]

漏洞简介 好视通视频会议是由深圳市华视瑞通信息技术有限公司开发&#xff0c;其在国内率先推出了3G互联网视频会议&#xff0c;并成功应用于SAAS领域。 资产 FOFA:app"好视通-视频会议" POC GET /register/toDownload.do?fileName../../../../../../../../../.…

代码随想录-回溯算法

组合 //未剪枝 class Solution {List<List<Integer>> ans new ArrayList<>();Deque<Integer> path new LinkedList<>();public List<List<Integer>> combine(int n, int k) {backtracking(n, k, 1);return ans;}public void back…

MySql安全加固:可信IP地址访问控制 设置密码复杂度

MySql安全加固&#xff1a;可信IP地址访问控制 & 设置密码复杂度 1.1 可信IP地址访问控制1.2 设置密码复杂度 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1.1 可信IP地址访问控制 当您在创建用户时使用’%作为主机部分&#xff0c;…

【C语言】字符型变量and整型变量的类型转换

一、将字符型变量转换为整型变量 char c A; int i (int)c; 二、将整型变量转换成字符型变量 int i 65; char c (char)i;

Unity 实战一:这几年被广告刷屏的沙雕跑酷游戏

姐就是女王&#xff0c;功夫跑酷&#xff0c;拣枪干架跑酷等 核心不用说了吧&#xff1a; 就是一个人不断地跑&#xff0c;获取不同属性&#xff0c;判断是否过关 好的&#xff0c;以下是一篇基于Unity 开发简易版有障碍物的跑酷游戏的教程博客&#xff1a; 在这篇博客中&…

static在c语言中的作用

1、关键字static的作用是什么&#xff1f; 这个简单的问题很少有人能回答完全。在C语言中&#xff0c;关键字static有三个明显的作用&#xff1a; 1). 在函数体&#xff0c;一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外)&#xf…

Linux tload 命令教程:实时监控系统负载(附案例详解和注意事项)

Linux tload 命令介绍 tload 是一个用于监控系统负载的命令行工具。它以图形化的方式显示系统的负载情况&#xff0c;帮助你了解 CPU 和内存的使用情况。 Linux tload 命令适用的 Linux 版本 tload 在大多数 Linux 发行版中都可用。如果你在某些特定的 Linux 发行版上找不到…

java数据结构与算法刷题-----LeetCode437. 路径总和 III(前缀和必须掌握)

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 深度优先2. 前缀和 1. 深度优先 解题思路&#xff1a;时间复…