【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: 1labels:app: nginx					#Deployment资源的标签name: nginx-deploymentnamespace: defaultresourceVersion: "167208"selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deploymentuid: d9d3fef9-20d2-4196-95fb-0e21e65af24a
spec:progressDeadlineSeconds: 600replicas: 3					#期望的pod数量,默认是1revisionHistoryLimit: 10selector:matchLabels:app: nginxstrategy:rollingUpdate:maxSurge: 25%				#升级过程中会先启动的新Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值maxUnavailable: 25%		#升级过程中在新的Pod启动好后销毁的旧Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值type: RollingUpdate			#滚动升级template:metadata:creationTimestamp: nulllabels:app: nginx				#Pod副本关联的标签spec:containers:- image: nginx:1.15.4				#镜像名称imagePullPolicy: IfNotPresent	#镜像拉取策略name: nginxports:- containerPort: 80				#容器暴露的监听端口protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: Always				#容器重启策略schedulerName: default-schedulersecurityContext: {}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 负载均衡

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

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

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

相关文章

一维时间序列信号的小波时间散射变换(MATLAB 2021)

小波散射变换的目的在于获取第一层次的特征信息,即免疫平移、轻微形变的信息。而低通的滤波器能够获取输入信号的概貌,获取反映其整体大尺度特征的信息,以图像为例,由低通滤波器选取的信号对于图像的平移、伸缩、旋转等局部变化有…

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

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

[开发|java] java在windows中环境变量配置

系统环境 系统版本:windows10 配置环境变量 配置Java开发环境在Windows系统中通常涉及两个关键环境变量的设置:JAVA_HOME 和 Path。以下是详细的步骤: 设置JAVA_HOME: 打开“控制面板”或通过搜索栏找到“系统”设置。在系统设置中&…

五、身份与访问管理—身份与访问管理基础与访问控制模型(CISSP)

目录 1.访问控制概述 1.1 访问控制步骤 1.2 口令管理(Password Management) 1.3 生物技术(Biometrics)

如何查看当前系统中哪些端口被占用了?

在 Mac 系统中,你可以使用 lsof 命令来查看哪些端口被占用。以下是具体的步骤: 打开终端。输入以下命令并按回车: sudo lsof -i -P -n | grep LISTEN 这个命令会列出所有正在监听的端口以及它们的使用情况。-i 选项表示列出所有网络连接&a…

linux指令-sed

sed 是一个流编辑器,用于对输入流(或文件)进行基本的文本转换。以下是 sed 命令的详细输出说明文档: 1. 基本语法 sed [OPTIONS]... [SCRIPT] [INPUTFILE...] OPTIONS:可选的命令行选项,如 -i 用于直接修…

空间不够用了怎么办

空间告急啊哥们 整理一下清理空间有用的一些blog吧。 【linux】公共服务器如何清理过多的.cache缓存 linux根目录空间不足,追加空间到根目录下 【linux】linux磁盘空间 目录查看清理 和 文件查看清理

simulink如何配置自动代码生成

simulink如何配置我们的自动代码生成 仿真时间设置我们仿真我们这个模型的一个时间,目前默认它是10秒。如果把它改成“INF”,它就是会一直仿真。 求解器选择,因为我们使用的是嵌入式代码,因此我们一般嵌入式是一个数字量。所以选…

【AI大模型】Transformers大模型库(三):特殊标记(special tokens)

目录​​​​​​​ 一、引言 二、特殊标记(special tokens) 2.1 概述 2.2 主要功能 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服…

RK3568技术笔记之二 SAIL-RK3568开发板介绍

开发板是我们自己的,后面我用开发板和工控机来做技术笔记。不用多讲。我先把核心板和开发板规格书搬过来,这篇文章里都是自己的知识产权,所以就不标准引用来源了。 先看看核心板的规格书吧。 再来一下开发板的规格书 看完规格书,…

用cocos2d-python绘制游戏开发的新篇章

用cocos2d-python绘制游戏开发的新篇章 第一部分:背景 在游戏开发的世界中,寻找一个强大而灵活的框架至关重要。cocos2d-python是一个Python游戏开发框架,它提供了一套丰富的功能,用于创建2D游戏、图形和交互式应用。基于流行的c…

如何在 Java 中使用 JOptionPane 显示消息对话框

在 Java 开发中,JOptionPane 是一个非常实用的类,可以用来显示各种类型的对话框,例如信息对话框、警告对话框、错误对话框等。今天,我们将深入探讨如何使用 JOptionPane.showMessageDialog 方法来显示消息对话框,以及如…

完美的移动端 UI 风格

完美的移动端 UI 风格

webgl_decals

ThreeJS 官方案例学习&#xff08;webgl_decals&#xff09; 1.效果图 2.源码 <template><div><div id"container"></div></div> </template> <script> // 光线投射相关代码 https://threejs.org/docs/index.html#api/z…

干货满满!Stable Diffusion 从入门到精通之提示词手册,免费分享,自学转行,零基础首选!

Stable Diffusion 技术把 AI 图像生成提高到了一个全新高度&#xff0c;文生图 Text to image 生成质量很大程度上取决于你的提示词 Prompt 好不好。本文从“如何写好提示词”出发&#xff0c;从提示词构成、调整规则和 AIGC辅助工具等角度&#xff0c;对文生图的提示词输入进行…

模式识别涉及的常用算法

一、线性回归 1.算法执行流程&#xff1a; 算法的执行流程可以简述如下&#xff1a; 导入必要的库&#xff1a; 导入NumPy库&#xff0c;用于数值计算。导入Matplotlib库&#xff0c;用于数据可视化。导入Pandas库&#xff0c;用于数据处理&#xff08;尽管在这个例子中&#…

MySQL数据库主从配置

MySQL主从配置 1. 修改数据库my.cnf文件 修改数据库my.cnf文件&#xff0c;在文件中添加如下内容&#xff0c;其中主数据库的server-id必须要比从库的更小。 # 注册集群id server-id101 # 开启二进制日志文件 log-binmysql-bin # 设置日志格式 binlog-formatrow # 开启中继日…

开关电源基本原理1

目录 内容概述 关于电感 认识电感 电感充电 电感储能 电感充电 电感参数 电感放电 利用电感升压 电感电流波形 伏秒法则 电流纹波率 电感电流三种导电模式 电流纹波率与频率的关系 电流纹波率与电感值的关系 电感值与电感体积 电路纹波率r的最优值 电感值与电…

MySql和Oracle表分区

MySql和Oracle表分区 MySQL和Oracle都支持表分区&#xff0c;这是一种数据库管理技术&#xff0c;用于将大型表、索引或索引组织表分解为更小、更易于管理的片段&#xff0c;称为分区。以下是关于MySQL和Oracle分区的详细对比和说明&#xff1a; 分区基本概念以及类型 MySQL…

利用多线程打印出1 2 3

阿里控股_爱橙科技_笔试 题目&#xff1a;利用多线程打印出1 2 3&#xff0c;请给出尽可能多的实现方案。 其中&#xff0c;悲观锁可以使用Synchronized、Reentrantlock实现&#xff0c;乐观锁可以使用AtomicInteger实现&#xff0c;底层是CAS实现乐观锁。Semaphore 是一种计数…