【Kubernetes】k8s集群Pod控制器
目录
一.Pod控制器作用
二.Pod控制器类型
1.Deployment(简称deploy) + ReplicaSet(简称rs)
2.StatefulSet(简称sts)
创建SatefulSet控制器
3.DaemonSet(简称ds)
4.Job
5.CronJob(简称cj)
一.Pod控制器作用
Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预
期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的
资源
二.Pod控制器类型
1.Deployment(简称deploy) + ReplicaSet(简称rs)
Deployment
- 部署无状态应用(没有实时数据需要存储)
- 负责创建和管理ReplicaSet,维护Pod副本数与预期状态保持一致
- 负责创建和删除控制器管理的Pod资源,有多个Pod副本时是并行创建启动的,升级策略默认为滚动更新的方式
应用场景:web服务
#获取创建资源的命令
kubectl create deployment XXX --image --dry-run=client -o yaml > XXX.yaml
kubectl get deployment XXX -o yaml > XXX.yaml
kubectl edit deployment XXX ;手动复制#更新资源
kubectl set deployment XXX 容器=镜像名
kubectl edit deployment XXX
kubectl apply -f XXX.yaml#回滚资源
kubectl rollout history deployment XXX
kubectl rollout undo deployment XXX --to-revision=N#发布资源
kubectl expose deployment XXX --port --target-port --type
ReplicaSet
代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩
容功能。
ReplicaSet主要三个组件组成:
- 用户期望的pod副本数量
- 标签选择器,判断哪个pod归自己管理
- 当现存的pod数量不足,会根据pod资源模板进行新建
帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控
制器,而是使用Deployment
2.StatefulSet(简称sts)
部署有状态应用(有实时数据需要存储,且数据有上下文的关系)
需要提前创建一个Headless Service资源(无头服务,ClusterIP为None的service资源),在sts资
源配置中使用serviceName字段指定Headless Service资源名称
每个Pod名称标识都是唯一且固定不变的(标识为 0 到 n-1)
每个Pod都可以有自己专属的持久化存储(基于PVC模板 volumeClaimTemplates 实现的)
K8S集群内的Pod可以通过 <Pod名称>.<Headless Service资源名称>.<命名空间> 格式解析出sts控
制器管理的Pod资源的PodIP(基于Headless Service和CoreDNS实现的)
创建、滚动升级、扩容、缩容Pod副本时默认都是有序进行的(由sts.spec.podManagementPolicy
字段决定的,默认为OrderedReady,如果设置为Parallel则并行的管理Pod)
创建、扩容是升序进行的(顺序为Pod标识从0到n-1),滚动升级、缩容是倒序进行的(顺序为
Pod标识从n-1到0)
Service资源的类型:4个常规类型(ClusterIP、NodePort、LoadBalancer、ExternalName)+
1个特殊类型(Headless Service)
常见的应用场景:数据库
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
创建SatefulSet控制器
创建SatefulSet控制器,必须先创建Headless Service
vim demo1-svc.yaml
apiVersion: v1
kind: Service
metadata:labels:app: demo1-svcname: demo1-svcnamespace: xy101
spec:ports:- name: httpport: 8080protocol: TCPtargetPort: 80selector:app: myapptype: ClusterIPclusterIP: None #设置为none即创建Headless Servicekubectl apply -f demo1-svc.yaml
kubectl get svc -n xy101
vim demo2-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: demo2-stsname: demo2-stsnamespace: xy101
spec:serviceName: demo1-svc #此处名字必与创建的svc资源名称一致replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80resources: {}kubectl apply -f demo2-sts.yaml
kubectl get pod -n xy101
扩容
kubectl scale -n xy101 statefulset demo2-sts --replicas=6
SatefulSet控制器创建资源、扩容都是有序创建
缩容
kubectl scale -n xy101 statefulset demo2-sts --replicas=3
SatefulSet控制器缩容是倒序进行
删除
当删除-个 Statefulset 时,该 Statefulset 不提供任何终止 Pod 的保证。为了实现 Statefulset 中的 Pod 可以有序且体面地终止,可以在删除之前将 Statefulset 缩容到 0kubectl delete -n xy101 pod demo2-sts-1 #删除前后pod名称不会发生改变
解析pod的ip
kubectl run -n xy101 demo-pod --image=soscscs/myapp:v1 #测试pod
kubectl exec -it -n xy101 demo-pod -- sh
cat /etc/resolv.conf
nslookup pod名称.svc名称.统一的域名
nslookup demo2-sts-0.demo1-svc.xy101.svc.cluster.local
kubectl scale -n xy101 statefulset demo2-sts --replicas=0
kubectl scale -n xy101 statefulset demo2-sts --replicas=3
kubectl exec -it -n xy101 demo-pod -- sh
nslookup demo2-sts-0.demo1-svc.xy101.svc.cluster.local
滚动升级
kubectl set image -n xy101 sts demo2-sts myapp=soscscs/myapp:v2 #倒序进行升级
持久化存储
vim demo2-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: demo2-stsname: demo2-stsnamespace: xy101
spec:serviceName: demo1-svcreplicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80resources: {}volumeMounts:- name: demo2-sts-pvcmountPath: /mntvolumeClaimTemplates:- metadata:name: demo2-sts-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 2GistorageClassName: nfs-client-storageclasskubectl apply -f demo2-sts.yaml
kubectl get pod -n xy101
kubectl get pv,pvc -n xy101
kubectl exec -it -n xy101 demo2-sts-0 -- sh
/ # cd /mnt
/mnt # echo '123' > x.txt
/mnt # exit
kubectl exec -it -n xy101 demo2-sts-1 -- sh
/ # cd /mnt
/mnt # echo '234' > y.txt
/mnt # exit
kubectl delete -n xy101 pod demo2-sts-0
kubectl delete -n xy101 pod demo2-sts-1
pod "demo2-sts-1" deleted
kubectl get pod -n xy101 #无论怎么删除pod,数据都不会丢失
3.DaemonSet(简称ds)
通常用于部署需要在每个node节点上都要部署的daemon(守护进程)级别的无状态应用
理论上可以在K8S集群的所有node节点上都创建一个相同的Pod副本,无论node节点何时加入到
K8S集群(需要考虑到taint污点和cordon不可调度的影响)
ds资源配置不需要设置Pod副本数量replicas
应用场景:Agent
vim demo3-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:labels:app: myappname: myapp-dsnamespace: xy101
spec:selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80resources: {}
4.Job
一次性的部署短期任务的Pod资源,Pod容器不会持续运行,并要求任务执行完毕后容器成功退出
且不再重启
Job资源配置的容器重启策略要求不能设置为Always,一般设置为 Never(推荐)或 OnFailure
如果任务执行失败导致Pod容器异常退出,Job会根据backoffLimit字段的值决定重建Pod来重试任
务的次数(默认为6)
应用场景:数据库迁移、批处理脚本、kube-bench扫描、离线数据处理,视频解码等业务
https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
vim demo4-job.yaml
apiVersion: batch/v1
kind: Job
metadata:labels:app: demo4-jobname: demo4-jobnamespace: xy101
spec:template:metadata:labels:app: myappspec:volumes:- name: scj-volhostPath:path: /data/volumestype: DirectoryOrCreatecontainers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80command:- sh- -c- "for i in $(seq 1 10); do echo scj like xjj on $(data) >> /mnt/scj.txt; sleep 1; done; exit 0" #只执行十次每隔一秒volumeMounts:- name: scj-volmountPath: /mntresources: {}restartPolicy: Never
vim demo4-job.yaml
apiVersion: batch/v1
kind: Job
metadata:labels:app: demo4-jobname: demo4-jobnamespace: xy101
spec:backoffLimit: 2 #设置job失败后进行重试的次数template:metadata:labels:app: myappspec:volumes:- name: scj-volhostPath:path: /data/volumestype: DirectoryOrCreatecontainers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80command:- sh- -c- "for i in $(seq 1 10); do echo scj like xjj on $(data) >> /mnt/scj.txt; sleep 1; done; exit 1"volumeMounts:- name: scj-volmountPath: /mntresources: {}restartPolicy: Neverkubectl apply -f demo4-job.yaml
5.CronJob(简称cj)
周期性的部署短期任务的Pod资源,Pod容器不会持续运行,并要求任务执行完毕后容器成功退出
且不再重启
Job资源配置的容器重启策略要求不能设置为Always,一般设置为 Never(推荐)或 OnFailure
Job会根据schedule字段设置的周期表去执行任务,格式为"分 时 日 月 周",支持 - / , 符号
应用场景:通知,备份
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
vim demo5-cj.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:labels:app: demo5-cjname: demo5-cjnamespace: xy101
spec:schedule: "*/1 * * * *" #周期性执行任务concurrencyPolicy: Allow #CronJob 允许并发任务执行startingDeadlineSeconds: 20 #过了截止时间20秒,CronJob 就不会开始任务successfulJobsHistoryLimit: 3 #保留的成功完成的任务数failedJobsHistoryLimit: 3 #保留已完成和失败的任务数jobTemplate:spec:#backoffLimit: 2template:metadata:labels:app: myappspec:volumes:- name: scj-volhostPath:path: /data/volumestype: DirectoryOrCreatecontainers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80command:- sh- -c- "for i in $(seq 1 10); do echo scj like xjj on $(data) >> /mnt/scj.txt; sleep 1; done; exit 0"volumeMounts:- name: scj-volmountPath: /mnt
相关文章:
【Kubernetes】k8s集群Pod控制器
目录 一.Pod控制器作用 二.Pod控制器类型 1.Deployment(简称deploy) ReplicaSet(简称rs) 2.StatefulSet(简称sts) 创建SatefulSet控制器 3.DaemonSet(简称ds) 4.Job 5.Cron…...
什么是NLP实体识别?
目录 1. 实体识别的基本概念 1.1 什么是实体识别? 1.2 实体识别的应用场景 2. 实体识别的常用方法 2.1 基于规则的方法 2.1.1 规则定义与模式匹配 2.2 基于机器学习的方法 2.2.1 特征工程与传统机器学习模型 2.3 基于深度学习的方法 2.3.1 神经网络模型 …...

掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘
Jenkins自动化部署是现代软件开发中不可或缺的一部分,它不仅简化了代码的发布过程,还为整个团队带来了无与伦比的效率和协作力。想象一下,开发者们可以专注于编写高质量的代码,而不是为繁琐的手动部署所烦恼;测试人员能…...

糟糕界面集锦-控件篇09
目前我们还无法确定该把这个问题划到哪个类别中,但是如图所示,在一个列表框中只显示3 个项目无疑是愚蠢的。 这是微软的文件管理器提供的文件关联界面,用户需要把某一个特定类型的文件与一个应用程序关联时会弹出该对话框。如示例:…...

喵喵蓝牙热敏打印机(下)
目录 前言一、电量、温度、缺纸检测1.电量检测2.针头温度检测3.缺纸检测 二、蓝牙APP通信打印1.蓝牙初始化2.APP通信打印 三、FreeRTOS任务整合 前言 喵喵蓝牙热敏打印机(上) 内容有点多,就分为了上下两篇。 一、电量、温度、缺纸检测 先启…...

软件测试第1章 软件测试是什么
目录 内容说明 一、软件测试与质量概览需要熟悉什么 二、如何理解质量保证 三、软件测试的误区-程序员和测试的关系 四、软件测试是什么? 五、软件测试的目的 六、软件测试与软件质量保证 七、软件测试的必要性 八、软件测试的基本概念分析 …...
【技术分享】 hysteria2从服务端到客户端部署教程
hysteria2从服务端到客户端部署教程 前言 在如今的网络环境中,尤其是涉及跨国访问的场景中,hysteria2作为一个新兴的传输协议工具,凭借其高效的传输能力和灵活的配置方式,受到了越来越多用户的青睐。本教程将带您一步步完成hyst…...

C++入门基础知识16
C 的关键字(接上一篇博文!!!) 54. typeid 指出指针或引用指向的对象的实际派生类型。 55. typename typename(类型名字)关键字告诉编译器把一个特殊的名字解释成一个类型。在下列情况下必须对一…...

浏览器调试工具-Chrome Dev Tools
浏览器调试模式下的各个调试工具是常用的工具集,能够帮助开发者理解、调试和优化网页。 1.打开方式 直接在浏览器中按下F12键右键点击页面上的任一元素,选择“检查”(Inspect)在浏览器右上角点击菜单按钮,选择“更多…...

基于车联网大数据平台的用户驾驶习惯行为画像分析
近年来,新能源汽车行业的迅速发展推动了汽车智能化的趋势。新能源汽车上配备了成千上万的传感器,这些传感器采集了大量的行车数据被用于车辆运行状况的监控与分析。另一方面,采集到的大量行车数据,也能很好地体现用户的驾驶习惯。…...

Ubuntu24.04搭建maxkb开发环境
接上文:windows10搭建maxkb开发环境(劝退指南) 上文在windows10环境搭建maxkb开发环境遇到各种坑,后面就转战ubuntu平台,果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…...
C++ 指针和引用的区别
1.引用在定义时必须初始化,而指针没有要求 2.引用一旦引用了一个实体就不能在引用其它实体,指针可以在任何时候指向同一类型的指针 3.没有空引用,但是有空指针 4.在sizeof中含义不同:引用结果为引用类型的大小,但指…...

python绘制蕨菜叶分形
一花一叶一世界,一草一木一浮生. 使用了四个不同的线性变换,根据概率选择其中一个变换并更新 x 和 y 坐标。然后将生成的绿色点绘制出来,形成一片蕨菜叶。 import numpy as np import matplotlib.pyplot as pltdef fern_fractal(num_points):# 初始化坐…...
1分钟了解pandas
Pandas 是一个强大的 Python 库,用于数据分析和数据处理。它为 Python 提供了高效的数据结构和数据分析工具,使得数据操作变得简单而直观。Pandas 由 Wes McKinney 在 2008 年创建,并迅速成为数据科学领域中最受欢迎的库之一。 安装 Pandas …...

django-celery应用-定时执行测试cases
1、celery周期性任务 简介-----celery beat 是一个调度程序,它定期启动任务,然后由集群中的可用工作节点执行这些任务。 django-celery-beat celery默认的调度程序是 celery.beat.PersistentScheduler ,它简单地跟踪本地 shelve 数据库文件中…...

【C++深度探索】unordered_set、unordered_map封装
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目录…...

CSS——字体背景(Font Background)
一、字体族 1、字体的相关样式: ① color 用来设置字体颜色(前景颜色) ② font-size 字体的大小 和font-size相关的单位: em 相对于当前元素的一个font-size rem 相对于根元素的一个font-size ③ font-family 字体族&#x…...

秋招突击——8/15——知识补充——Socket通信
文章目录 引言正文基于TCP协议的Socket通信基于UDP协议的Socket通信服务端如何接收更多项目多进程多线程IO多路复用select轮询IO多路复用epoll事件通知 使用Socket实现同一个机器上的多线程通信服务端创建对应socket监听端口客户端发起对应的连接请求 总结 引言 上次面试腾讯的…...

Qt第十四章 模型视图
Model/View(模型/视图)结构 文章目录 Model/View(模型/视图)结构简介视图组件Model/View结构的一些概念项目控件组(item Widgets)模型/视图 如何使用项目视图组设置行的颜色交替变换拖拽设置编辑操作其他操作 选择模型自定义选择多…...
硬件工程师必须掌握的MOS管详细知识
MOS管,全称为金属-氧化物半导体场效应晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor,MOSFET),是一种重要的半导体器件,广泛应用于电子工业中各种电路的开关、放大、调制、数字电路和模拟电路等…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...