Pod的控制器

Pod的控制器是什么?

pod控制器:工作负载均衡。workload。用于管理pod的中间层。确保pod资源符合预期的状态。

预期状态:

  1. 副本数

  2. 容器的重启策略

  3. 镜像拉取策略

pod出现故障时的重启等等

Pod控制器的类型

1、 replicaSet:指定副本的数量

三个组件:

  1. Pod的副本数

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

  3. 扩缩容

2、 Deployment控制器,他是工作在replicaSet之上。管理无状态应用。目前是最好的控制器。支持滚动跟新和回滚。提供声明式配置。

3、 statefulSet:也是控制器的一种,管理有状态的应用。也可也设置副本数,可以扩缩容。 Pod的序号是固定的。重启之后,Pod的名称也不会发生变化。表示有状态的pod

4、 DaemonSet:可以在所有节点部署一个pod。它没有副本数。可以限制部署的节点。也是无状态应用。服务必须是守护进程。例如: ingress、logstash、flannel

5、 job:工作pod控制器。执行完成即可退出。不需要重启,不需要重建。

6、 cronjob:周期性的定时任务控制器。不需要再后台持续运行。

Pod与控制器之间的关系

1、 controllers

1、 controllers:管理控制器

pod通过label---selector进行关联。

通过标签和选择标签和控制器关联

strategy字段:

web应用不需要加strategy字段会导致服务中断。

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx
spec:replicas: 1selector:matchLabels:app: nginx1strategy:type: Recreate
#每次有更新,都会把旧的pod全部停止,然后再启动新的实例。服务可能会短暂的终端。无特殊需要可不加template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx

strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25%

这是deployment的默认更新策略

rollingUpdate:滚动跟新

maxSurge: 25% 升级过程中,新启动的pod数量不能超过期望pod数的25%

maxUnavailable: 25% 升级过程中,新的pod启动好后,销毁的旧pod数量不能超过期望pod的25%

升级和销毁都不能超过期望pod的25%这样不会导致业务中断

2、 无状态应用

2、 无状态应用:pod名称是无序的。认为所有pod都是一体的。共享NFS存储。

所有deployment下的pod共享一个存储。

statfulSet:有状态应用。pod的名称是有序的。所有pod都是独立的。存储卷也是独立的。顺序从0开始到n。

delete删除也不会改变pod的序号。扩缩容也是有序扩缩容。同样从0开始

headless service:无头服务,他没有clusterIP。必须要有动态的pvc

statfulSet有状态应用控制器实验举例:

apiVersion: v1
kind: Service
metadata:name: nginx-weblabels:app: nginx2spec:ports:- port: 80targetPort: 80clusterIP: ""selector:app: nginx2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: weblabels:app: nginx2spec:replicas: 3selector:matchLabels:app: nginx2serviceName: "nginx-web"template:metadata:labels:app: nginx2spec:apiVersion: v1
kind: Service
metadata:name: nginx-weblabels:app: nginx2spec:ports:- port: 80targetPort: 80clusterIP: ""
#clusterIP必须为空selector:app: nginx2
---
apiVersion: apps/v1
#开始创建控制器
kind: StatefulSet
metadata:name: weblabels:app: nginx2spec:replicas: 3selector:matchLabels:app: nginx2serviceName: "nginx-web"#定义应用哪个service文件template:metadata:labels:app: nginx2spec:containers:- name: nginximage: nginx:1.22volumeMounts:
#定义挂载卷- name: htmlmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:#定义动态卷- metadata:name: htmlspec:accessModes: ["ReadWriteMany"]
#定义挂载卷权限storageClassName: "nfs-client-storageclass"resources:requests:storage: 2Gi

headless service无头服务:是k8s集群中一种特殊的服务类型。

  1. 他不分配clusterIP给service。

  2. 不会负载均衡到后端的pod。

  3. 通过DNS来提供服务的发现和访问。

由于ClusterIP是空的。k8s集群会给每个headless service中的pod创建一个dns记录。

格式: pod-name.headless-service-name.namespace.svc.cluster.local.

通过dns直接解析访问pod的IP地址

为什么要使用headless?

有序、独立个体

deployment的pod是没有名称的。随机字符串且无序的。他需要一个集中的clusterIP来集中统一为pod提供网络。

statefulset是有序的。pod名称是固定的。即便是重建之后pod的表示也不变。pod的名称是唯一的标识符。

系统直接通过pod名称解析IP地址。

只要pod名称不变通过pod名来映射IP地址即可

为什么要使用动态PV?

只要是有状态的副本集群都会涉及到持久化存储。但是每个pod是独立个体。每个pod都有自己专用的存储点。

statefulSet再定义时就规定了每个pod不能使用同一个存储卷。所以才需要动态PV

定义好了每个pod都必须绑定一个存储卷所以使用动态pv

statefulset的使用场景
  1. 用于不是固定节点的应用。不是固定IP的应用。

  2. 更新发布比较频繁的场景

  3. 支持自动伸缩。节点资源不够,可以自动扩容的场景。

删除statefulset

不需要clusterIP。没有clusterIP的就是无头服务headless

3、 demonSet

3、 demonSet:确保每个节点上都运行一个pod副本。如果有node加入集群,也会为他薪资一个pod

实验举例:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-daemonlabels:app: nginx1
#提高代码的可读性。方便别人读。不同业务可以通过namespace隔离。
#命名时根据业务进行专业命名
spec:selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginximage: nginx:1.22
#部署一个daemonset的控制器。
#daemonset不能指定副本数他会在每个节点上都创建一个pod

和deployment一样都是无状态应用。

指定节点部署:

apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-daemonlabels:app: nginx1
#提高代码的可读性。方便别人读。不同业务可以通过namespace隔离。
#命名时根据业务进行专业命名
spec:selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- name: nginximage: nginx:1.22nodeSelector:ingress: "true"
#只在有ingress为true这个标签的节点上部署,没有这个标签的节点不会部署kubectl delete daemonsets.apps nginx-daemon
#删除daemonSet控制器

daemonSet不需要指定调度策略,默认会在每个节点上创建一个pod。除非设置了污点。我们也可以通过指定的方式。只把daemonSet部署在指定的节点。

daemonSet没有副本数选择。

控制器类型的资源创建方式:基于控制器创建的pod,delete只是相当于重启。要彻底删除pod,必须删除控制器

千万不要随别delete

4、job

4、 job:分为两类

job表示普通任务

cronjob表示定时任务

job的作用就是执行只需要执行一次性的任务。例如:执行脚本、数据库迁移、视频解码等等业务。

job普通任务

实验举例:

apiVersion: batch/v1
kind: Job
metadata:name: centos
spec:template:spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "test -e /etc/passwd"]
#定义一个任务
#Job类型的参数必须要设置重启策略。只支持“OnFailure、Never”两种策略restartPolicy: Never
#指定重启策略backoffLimit: 4
#定义重启次数。如果不加默认6次
#允许任务失败的次数是4次。
#当达到4次之后。根据容器的重启策略restartPolicy来进行容器的重启或者是不重启。kubectl delete jobs.batch centos
#删除控制器

对于k8s系统来说,既然定义了是job。你只需要执行一次,或者指定册数即可。不能一直允许。

它拥有两个限制:

  1. 必须要指定容器容器策略:OnFailure、Never

  2. 执行失败的次数也是受限制的。默认是6次。字数可以通过添加 backoffLimit 来自定义失败次数

  3. 跟新yaml文件要先删除任务。再更新。不能动态更新。

5、 cronjob

cronjob:周期性执行任务,定时执行。和linux的crontab含义是一样的。语法一样都是 分 时 日 月 周

应用场景:定时备份、通知作用、定时检查(结合探针一起布置设定多长时间执行一次)

实验举例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"concurrencyPolicy: Allow
#可选字段 执行失败任务的保留个数startingDeadlineSeconds: 15
#可选字段 pod启动之后必须在一定时间内开始执行。如果超过15秒仍未运行,则任务将不会运行。任务也会标记失败。successfulJobsHistoryLimit: 3
#可选字段 保留成功的任务数。默认保留3个jobTemplate:
#定义任务模板。容器需要执行的命令是什么spec:template:spec:containers:- name: helloimage: centos:7command: ["/bin/bash", "-c", "date; echo zyg"]restartPolicy: Neverkubectl delete cronjobs.batch hello
#删除定时任务

总结

五个都是控制器创建的pod都是依赖于控制器。

deployment:无状态应用。最好用的。也是最多的

statefulSet:有状态应用。有序的。独立的pod

daemonSet:无状态应用。不能定义副本数。每个系欸但都运行一个pod。可以指定节点。

job:执行一次性的任务。必须要有重启策略。同时默认失败次数6次。只有失败次数达到,重启策略才会生效

cronjob:定时任务。通知。备份或者探测。执行定时任务。必须要有重启策略。默认失败3次。只有失败次数达到后重启策略才会生效

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

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

相关文章

NLP论文阅读记录 - WOS | 2023 TxLASM:一种新颖的与语言无关的文本文档摘要模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.文献综述及相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 TxLASM: A novel language agnostic summarization mo…

用了这8个 Python 数据挖掘工具包,生产力明显得到了提升!

在进行数据科学时,可能会浪费大量时间编码并等待计算机运行某些东西。所以我选择了一些 Python 库,可以帮助你节省宝贵的时间。 喜欢记得收藏、关注、点赞,文末送技术交流和资料 1、Optuna Optuna 是一个开源的超参数优化框架,…

ArkTS中自定义组件

ArkTS中自定义组件 一、组件位置二、Hello.ets自定义组件自定义组件 三、Second.ets父组件 一、组件位置 一个项目下所有的自定义的组件名不可以重复,无论是否在一个ets文件中 二、Hello.ets自定义组件 自定义组件 1:组件必须使用Component装饰 2&#…

IIC学习之SHT30温湿度传感器(基于STM32)

简介 附上SHT30资料和逻辑分析仪源文件,点击下载 关于IIC的介绍网上已经非常详尽,这里只说重点: 双线(SDA,SCL),半双工采用主从结构,支持一主多从,通过地址寻址&#…

USB转串口芯片 国产GP232RL 低成本兼容替代FT232RL 数据手册资料参考

随着工业物联网的不断发展,USB接口正在逐渐替代老式电脑的各种低俗外围接口,然而目前的工业环境中,许多重要的设备仍然使用RS232、RS422、RS485接口界面设计,因此许多用户使用USB转RS232、RS422、RS485转换器或者是转换线&#xf…

Overmind平台推出Sui任务,帮助开发者学习Move并构建强大的应用程序

Overmind与Sui基金会合作,推出了其首个任务系列,旨在帮助开发者学习Move并开始在Sui上构建。这些任务通过提供赢取奖励的机会来将学习体验变成游戏,激励开发者构建高质量的代码并向Sui社区展示他们的技能。 去年推出的Overmind平台正在扩展到…

Leetcode20-唯一摩尔斯密码词(804)

1、题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: ‘a’ 对应 “.-” , ‘b’ 对应 “-…” , ‘c’ 对应 “-.-.” ,以此类推。 为了方便,所有 26…

new mars3d.graphic.PolylineEntity({在固定高度开启编辑模式的坐标自定义处理

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 问题场景: 1.在编辑航线时,需要指定航线坐标在固定高度值上开启编辑模式。 2.关键代码是: graphicLayer.startEditing({开启编辑模式,进行航线的编辑。 解决方案&#xf…

大模型实战营Day4 XTuner 大模型单卡低成本微调实战 作业

按照文档操作: 单卡跑完训练: 按照要求更改微调的数据: 完成微调数据的脚本生成: 修改配置文件: 替换好文件后启动: 启动后终端如图: 用于微调的一些数据显示: 训练时间&#x…

muduo网络库剖析——套接字Socket类

muduo网络库剖析——套接字Socket类 前情从muduo到my_muduo 概要socket网络编程socket编程接口介绍头文件socketbindlistenacceptaccept4connect 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多…

数字孪生+人工智能突破复杂地形和气候提供可靠的电力

利用 Bentley 应用程序实现数字化交付,大大缩短了项目时间和成本,降低了碳排放量 Kalpataru Projects International Limited (KPIL) 正在扩展喀麦隆的电力网络,以改善该国 13% 人口的电网连接和电力供应。根据其项目管理方法,KPI…

Oracle 实战手册 工作实战经验总结

一、基本的数据库管理 高级开发人员需要掌握,了解Oracle数据库运行的基本原理,了解其中的概念。 1、数据库的启动和关闭 2、如何确定Oracle的版本? SQL> select * from v$version 2 / BANNER -------------------------------------…

电动工具直流调速专用集成电路GS069,具有电源电压范围宽、功耗小、抗干扰能力强等特性

GS069电动工具直流调速电路是CMOS专用集成电路,具有电源电压范 围宽、功耗小、抗干扰能力强等特点。通过外接电阻网络,改变与之相接 的VMOS 管的输出,达到控制电动工具转速的作用。该电路输出幅值宽, 频率变化小,占空比…

【微信小程序独立开发1】项目提出和框架搭建

前言:之前学习小程序开发时仿照别人的页面自己做了一个商城项目和小说项目,最近突发奇想,想从0开发一个关于《宠物日记》的小程序,需求和页面都由自己设计,将在这记录开发的全部流程和过程中遇到的难题等... 1、搭建小…

怎样通过交换机封锁MAC地址

第一步:查询该IP所对应的MAC地址 display arp | include ip地址 第二步:封锁mac地址 mac-address blackhole mac地址 vlan 所属vlan-id 以上操作即可封锁

怎么采集今日头条的资讯或文章-简数采集器

如何使用简数采集器快速采集今日头条新闻的资讯或优质文章? 很遗憾,简数采集器暂时不支持采集今日头条上的新闻和文章,不建议采集。 可以换一个采集源进行采集。 简数采集器采集网页文章非常简单,只需输入对应的网址&#xff0…

MySQL 删除ibdata1时怎么恢复

标题:MySQL InnoDB数据恢复,丢失ibdata1时怎么安全恢复 废话在前: 恭喜你,当你看到这篇文章的时候,说明有可能 你心里已经有一万匹🐎在奔腾了。千万不要乱删除ibdata1,有些博客无脑抓取、复制…

方案解决:5G基站节能及数字化管理

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…

腾讯云把向量数据库“卷”到哪一步了?

“不是我不明白,这世界变化快”,崔健在20世纪写下的这句歌词,放在刚刚过去的2023年,也同样适用。技术风向的变化之快,让不少人感到惊讶,向量数据库这一年的潮起潮落,就是一个典型的例子。 2023年…

OpenGL ES之深入解析如何实现图像锐化

一、什么是图像锐化? 图像锐化是一种图像处理技术,其目的是增强图像中的细节和边缘,使图像看起来更加清晰。这一过程通常涉及到突出图像中的高频信息,特别是强调像素之间的灰度变化。通过增强图像的高频细节,图像锐化可以改善图像在人类视觉系统和计算机视觉系统中的感知效…