【Kubernetes】9-Pod控制器

一、什么是 pod 的控制器

Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层

确保pod资源符合预期状态;pod的资源故障时会进行重启;

当重启策略无效时,则会重新新建pod的资源

二、pod控制器的多种类型

1、ReplicaSet

代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。

ReplicaSet 的主要三个组件

1)用户期望的pod副本数量

2)标签选择器,判断哪个pod归自己管理

3)当现存的pod数量不足时,会根据pod资源模板进行新建

帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是使用Deployment

2、Deplayment

工作在ReplicaSet 之上,用于管理无状态应用,是目前来说最好的控制器;

支持滚动更新和回滚功能,还提供声明式配置。
ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。

3、DaemonSet

用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
特性:服务是无状态的
服务必须是守护进程

4、StatefulSet

管理有状态应用

5、Job

只要完成就立即退出,不需要重启或重建

6、CronJob

周期性任务控制,不需要持续后台运行

三、pod 与控制之间的关系

controllers:在集群上管理和运行容器的 pod 对象, pod 通过 label-selector 相关联。
Pod 通过控制器实现应用的运维,如伸缩,升级等。

1、Deployment

部署无状态应用

管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的image
应用场景:web服务

通过陈述式生成声明式的yaml文件

kubectl create deployment nginx-dep --imae=nginx:1.15 --port=80 --replicas=1 --dry

查看控制器配置
kubectl edit deployment/nginx-deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2021-04-19T08:13:50Z"
  generation: 1
  labels:
    app: nginx					#Deployment资源的标签
  name: nginx-deployment
  namespace: default
  resourceVersion: "167208"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
  uid: d9d3fef9-20d2-4196-95fb-0e21e65af24a
spec:
  progressDeadlineSeconds: 600
  replicas: 3					#期望的pod数量,默认是1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%				#升级过程中会先启动的新Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值
      maxUnavailable: 25%		#升级过程中在新的Pod启动好后销毁的旧Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值
    type: RollingUpdate			#滚动升级
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx				#Pod副本关联的标签
    spec:
      containers:
      - image: nginx:1.15.4				#镜像名称
        imagePullPolicy: IfNotPresent	#镜像拉取策略
        name: nginx
        ports:
        - containerPort: 80				#容器暴露的监听端口
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always				#容器重启策略
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
......

 查看历史版本,升级,回滚

2、SatefulSet

部署有状态应用

稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
有序收缩,有序删除(即从N-1到0)

Headless 无头模式

k8s 中pod 因为故障导致重启或新建会导致pod名称和IP地址发生改变;(IP改变会导致数据丢失以及服务无法访问)

k8s 中的数据库的 ip 也会因此发生改变,为了避免这种情况;通过设置Headless无头模式

Headless 通过dns解析来让外部访问

headless 会定义好service的名称,分配时不会分配ip

为什么要有 volumeClainTempalte 

实现K8S 里 DNS 功能的插件:

skyNDS

清单定义StatefulSet

拉取一个centos:7 镜像

倒叙删除

k8s 内部负载均衡是根据访问量来算的,所以可能会导致一直访问到同一个服务器

那是k8s内部的负载均衡 ,会根据资源占比进行调度,会调度到资源少的,请求少的pod

滚动更新

除了创建时是正序,其他如删除、更新时都是倒叙进行

 DaemonSet

 DaemonSet会在每个node节点都会创建;删除也是同时删除

Job

重启的是pod 不是容器

5、CronJob

可以用于进行周期性备份,把xx文件拷贝出来,存储到xxx

周期性创建pod

总结

创建pod的两种方式

自主式pod和以控制器创建的pod

什么是有状态、无状态?

无状态就是类似于nginx 的静态页面,一般不会进行改变;每次访问内容都是一样的

有状态则类似于数据库,每天都会进行改变;每次访问都是不一样的

声明式 == yaml文件

陈述式 == 命令

kafka消息队列

Pod 控制器

①deployment 部署无状态应用的管理RS 和 pod 创建Pod,主要是维护pod副本数量与期望状态一致

创建和删除pod是并行执行的;升级时也是 先创建一部分再删除一部分

②statfulset 部署有状态的应用时,每个pod的名称唯一且不变,每个pod 拥有自己专属的持久化存储(PV和PVC)

在 k8s 集群内部可以通过{pod_name}.{service_name}.{namespace}.svc.cluster.local 解析出pod 的IP(基于headless service 和 coreDNS)

在创建和pod时是有顺序的,串行执行;升级时也是串行执行,会删除旧的pod,再创建新pod;

删除和升级时是倒叙执行的(从标识符最大的 n-1 开始,一直到最小的 0)

③Daemonset 理论上在k8s 集群的所有node节点上创建相同的pod(无论node节点什么时候加入到k8s 集群),但是会受到node节点上污点影响

④部署一次性任务的pod,正常完成后容器立即退出并且不重启容器(restartpolicy 不设置Always),也不会重建异常完成后重试任务

重建次数根据 backofflimit 配置(默认为6次)

⑤CronJob 周期性部署任务的pod,正常完成后容器会立即退出,并不会重启容器(restartpolicy 不设置Always),也不不会重建pod

schedule 配置周期性的事件表分时日月周 * * * * *

无状态

常规service和无头服务的区别

扩展伸缩

可以通过 logs 和 describe 来排查pod的异常信息

html 页面的协议

SLB 负载均衡

网关:转发请求,获取信息

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

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

相关文章

基于51单片机的智能晾衣架设计资料

第三章:硬件单元电路 经过上述分析明确了本次设计的主要目标,为了实现晾衣自身能够完成对外界数据的采集与分析,集成控制环节我们采用了ATMEL公司生产的AT89C52单片机,与市面上的其他嵌入式控制单元相比较在体积与功耗方面都相当出色。此次设计主要突破在于设计合理的控制电…

注册用户超6亿,哈啰发布年度可持续发展暨ESG报告

6月5日,哈啰发布《2023年度可持续发展暨ESG报告》,深入全面地展示2023年哈啰在可持续发展领域的举措和阶段性成果。 报告显示,哈啰始终遵循健康可持续的商业模式,以科技创新推动出行进化,在促进行业发展、环境友好、社…

特征工程及python实现

一、特征构建 概述 从原始数据中构建新的特征,一般需要根据业务分析,生成能更好体现业务特性的新特征,这些新特征要与目标关系紧密,能提升模型表现或更好地解释模型。 方法 时间周期:不同的时间切片长度&#xff0…

6_5 test

Lucene 存储引擎 https://www.cnblogs.com/tech-lee/p/15225276.html\ 规范 问问题的技巧 提问者:要实现怎样的目标?自己计划是如何实现这个目标的?问题出现在哪个环节?自己为了解决这个问题,已经做了哪些尝试和工…

GD32F470+lwip 丢包问题分析及解决

最近在用GD32和管理机之间用TCP协议开发一个功能,功能都没问题,后面跑大量发包时候的连续测试时,总是会出现偶发性的,大概几分钟到数十分钟的一次丢包。尽管在应用层做了超时机制,一旦超时就会重新建立socket链接并重新…

2025 QS 世界大学排名公布,北大清华跻身全球前20

一年一度,2025 QS 世界大学排名公布! QS(Quacquarelli Symonds)是唯一一个同时将就业能力与可持续发展纳入评价体系的排名。 继去年 2024 QS 排名因为“墨尔本超耶鲁,新南悉尼高清华”而荣登微博热搜之后&#xff0c…

【数据结构与算法 经典例题】随机链表的复制(图文详解)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、代码实现 1. 原链表中节点的数据拷…

厉害了!ATFX登上南非主流报刊《The Citizen》头条

时隔三个月后,ATFX再次登上国际知名报刊头版头条,并迅速成为各大媒体关注焦点。继1月强势登陆《日本时报》经济与商业版面,2月在中东知名媒体CNBC Arabia留下深刻印记后,5月ATFX受邀参展2024年南非峰会并接受媒体采访见证了品牌的…

SAS:什么时候用kcompress呀?

问题:如何截取ECGTPT变量中的后三个字符? 下图展示了以k开头的以及非k开头的substr函数和length函数,发现在UTF-8编码下,仅以k开头的函数能够截取成功。 释疑(以下内容来自SAS Help) SAS提供的字符函数…

Java基础29(编码算法 哈希算法 MD5 SHA—1 HMac 算法 堆成加密算法)

目录 一、编码算法 1. 常见编码 2. URL编码 3. Base64编码 4. 小结 二、哈希算法 1. 哈希碰撞 2. 常用哈希算法 MD5算法 SHA-1算法 自定义HashTools工具类 3. 哈希算法的用途 校验下载文件 存储用户密码 4. 小结 三、Hmac算法 小结: 四、对称加密…

一分钟学习数据安全——数字身份的三种模式

微软首席身份架构师金卡梅隆曾说:互联网的构建缺少一个身份层。互联网的构建方式让你无法得知所连接的人和物是什么。这限制了我们对互联网的使用,并让我们面临越来越多的危险。如果我们坐视不管,将面临迅速激增的盗窃和欺诈事件,…

无需复杂步骤,Win11用户轻松开启旧版文件资源管理器!

在Win11电脑操作中,用户可以使用到新版的文件资源管理器,但总是有各种错误、卡顿等问题的出现,所以很多用户都不喜欢新版资源管理器。接下来小编给大家介绍一个简单的方法,帮助Win11用户快速开启旧版文件资源管理器。 具体操作如下…

代码随想录算法训练营第二十五天| 216. 组合总和 III、17. 电话号码的字母组合

[LeetCode] 216. 组合总和 III [LeetCode] 216. 组合总和 III 文章解释 [LeetCode] 216. 组合总和 III 视频解释 题目: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该…

Mysql 常用命令 详细大全【分步详解】

1、启动和停止MySQL服务 // 暂停服务 默认 80 net stop mysql80// 启动服务 net start mysql80// 任意地方启动 mysql 客户端的连接 mysql -u root -p 2、输入密码 3、数据库 4、DDL(Data Definition Language )数据 定义语言, 用来定义数据库对象(数…

电子电器架构 --- 智能座舱技术分类

电子电器架构 — 智能座舱技术分类 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,…

如何修改cPanel面板的语言

本周有一个客户,购买Hostease的主机, 客户购买的是Linux虚拟主机,带cPanel面板的。询问我们的在线客服,他想修改cPanel面板的默认语言。Hostease虚拟主机默认英语,客户想要修改成中文。 在cPanel面板中修改语言设置是一…

怎么看新手入门学Java?

对于新手来说,学习Java是一个既令人兴奋又可能令人畏惧的过程。Java作为一种强类型、面向对象的编程语言,它广泛应用于企业级应用、Android开发、大数据和云计算等领域。因此,Java不仅有着庞大的生态系统,还拥有稳定的市场需求&am…

curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL

source ~/.bash_profile flutter clean Command exited with code 128: git fetch --tags Standard error: 错误:RPC 失败。curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8) 错误:预期仍然需要 2737 个字节的正文 fetch-pack: unexpec…

【React篇 】React项目中常用的工具库

我们可以从项目初始化、开发、构建、检查及发布的顺序总结react项目开发常用的工具库。 首先是初始化。 初始化工程项目一般用官方维护的 create-react-app,这个工具使用起来简单便捷,但 create-react-app 的配置隐藏比较深,修改配置时搭配…

设备在线监控系统软件

在数字化、智能化的浪潮中,物联网技术正以前所未有的速度改变着我们的工作和生活方式。作为物联网技术的核心组成部分,设备在线监控系统软件的重要性日益凸显。今天,我们就来详细探讨一下HiWoo Cloud平台如何助力企业实现设备的全面监控与管理…