【Kubernetes】k8s集群Pod控制器

news/2024/9/10 18:21:13/ 标签: kubernetes, docker, 容器

目录

一.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


http://www.ppmy.cn/news/1508649.html

相关文章

【项目】火灾烟雾检测管理系统。PyQT5+QT Designe+YOLOv8_ssod半监督算法+OpenCV

【项目】火灾烟雾检测管理系统。PyQT5QT DesigneYOLOv8_ssod半监督算法OpenCV 0.摘要1.引言2.烟雾检测算法2.0图像标注2.1 YOLOv8全监督算法结构2.2 Efficient-Teacher半监督算法结构 3.性能对比图4.源码、论文获取 0.摘要 火灾是常见而危险的自然灾害&#xff0c;不仅对人类生…

【Python】Python中一些有趣的用法

Python是一种非常灵活和强大的编程语言&#xff0c;它有很多有趣的用法&#xff0c;以下是一些例子&#xff1a; 一行代码实现FizzBuzz&#xff1a; print(\n.join([FizzBuzz[i%3*4:i%5*8:-1] or str(i) for i in range(1, 101)]))使用列表推导式生成斐波那契数列&#xff1a; …

在 CentOS 7 上安装 Redmine 的详细步骤及 20 个经典用法

目录 1. 引言 2. 安装步骤 2.1 更新系统 2.2 安装依赖包 2.3 安装 MariaDB 数据库 2.4 配置 MariaDB 2.5 安装 Ruby 2.6 安装 Redmine 2.7 配置 Redmine 2.8 安装 Bundler 和必要的 Gems 2.9 生成密钥并迁移数据库 2.10 配置 Apache 2.11 启动 Apache 并设置开机自…

ZLMediaKit如何结合webrtc实现双向对讲

目录 1. 安装和配置ZLMediaKit 2. 启用WebRTC模块 3. 创建WebRTC会话 4. 处理媒体流 5. 实现双向通信 6. 调试和测试 7. 安全性考虑 ZLMediaKit结合WebRTC实现双向对讲的过程涉及多个步骤&#xff0c;包括安装配置ZLMediaKit、启用WebRTC模块、创建WebRTC会话、处理媒体…

【LeetCode】将有序数组转换为二叉搜索树

目录 一、题目二、解法完整代码 一、题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1…

知识改变命运 数据结构【杨辉三角(顺序表)】

杨辉三角 首先我们可以发现题目中返回类型是一个 这其实返回的类似与一个二维数组 我们大概分析下题目根据画图可知&#xff0c;我们可以把每一行的元素进行存储&#xff0c;然后再把每一行存储起来&#xff0c;然后就实现了题目 代码&#xff1a; public List<List<…

Unity初识

1&#xff1a;下载Unity Hub 下载地址&#xff1a;Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 建议直接使用unity hub因为支持比较全面&#xff0c;适合新手 有中文 管理 编辑器等等功能支持 下载安装不过多介绍 2&#xff1a;Unity Hub汉化 因为我…

mysql主从服务配置

主从MySQL服务器 [rootlocalhost ~]# yum -y install ntpdate [rootlocalhost ~]# ntpdate cn.ntp.org.cn [rootlocalhost ~]# yum -y install rsync [rootlocalhost ~]# vim mysql.sh #!/bin/bash yum list installed |grep libaio if [ $? ne 0 ]; then yum -y install…

Forcepoint 网络安全解决方案

Forcepoint 作为全球领先的网络安全解决方案提供商&#xff0c;自 1994 年成立以来&#xff0c;便一直致力于为企业和政府机构提供最前沿、最有效的安全技术&#xff0c;以全力守护其最为珍贵的资产和数据。公司总部坐落于美国得克萨斯州奥斯汀市&#xff0c;凭借其卓越的技术实…

Java 多线程练习 (2024.8.12)

MultiProcessingExercise1 package MultiProcessingExercise20240812;public class MultiProcessingExercise1 {public static void main(String[] args) {// 设置、获取线程名称// 如果使用继承Thread类的方式实现多线程&#xff0c;那么可以直接通过set和get方法进行设置和获…

Oracle ACE是什么缩写?

大家都知道&#xff0c;Oracle有个ACE 计划&#xff0c;旨在奖励和表彰个人对 Oracle 社区做出的贡献。 这些贡献主要包括两方面&#xff1a; 知识与经验分享&#xff0c;如撰写博客、书籍和文章&#xff1b;制作视频教程&#xff1b;为开源项目做贡献&#xff1b;编写代码&a…

10分钟学会Docker的安装和使用

Docker 是一个用于开发、发布和运行应用程序的开源平台。它通过提供轻量级的容器技术&#xff0c;使得应用程序可以在任何环境中一致地运行。以下是快速学会Docker的安装和使用的步骤。 1. 安装Docker 在Windows上安装 下载Docker Desktop&#xff1a; 访问Docker官网下载适用…

Java->双击Window批处理程序动态切换Java版本

JDK8 echo off chcp 65001 >nul :: 设置控制台编码为UTF-8&#xff0c;避免中文乱码:: 检查是否以管理员身份运行 openfiles >nul 2>&1 if %errorlevel% neq 0 (echo 请求管理员权限...powershell -Command "Start-Process cmd -ArgumentList /c %~fnx0 -Ve…

13.1 Python 正则表达式基础

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

苹果发布 AirPods Pro 2 测试版固件 搭配iOS 18新特性

苹果今天发布了AirPods Pro 2 的第三个测试版固件&#xff0c;包括 Lightning 和 USB-C 两个版本。更新后的固件版本号为 7A5266c&#xff0c;高于 7A5244b&#xff0c;目前可供开发者使用。这是苹果公司自 6 月份宣布 AirPods Pro 2 新功能以来发布的第三个固件更新。 作为iOS…

git拉取后,代码不见了,没有冲突覆盖,且,没有删除,看我是怎么找回的

git拉取后&#xff0c;代码不见了&#xff0c;没有冲突覆盖&#xff0c;且&#xff0c;没有删除 重点提醒 当你的代码丢失时&#xff0c;不要惊慌&#xff0c;首先尝试使用本地的历史记录和远程仓库来找回代码。如果这些方法不起作用&#xff0c;你可以考虑其他的救援工具或寻…

搭建高可用OpenStack(Queen版)集群(十)之部署分布式存储Ceph

一、Ceph知识点学习 Ceph知识点学习&#xff1a;https://www.cnblogs.com/happy-king/p/9207509.html 二、部署分布式存储Ceph 一&#xff09;设置yum源 在全部控制与计算节点设置epel与ceph yum源 epel源&#xff1a;repo安装包下载_开源镜像站-阿里云 ceph源&#xff1a;cep…

在亚马逊云科技上利用生成式AI开发用户广告营销平台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何利用亚马逊云科技大模型托…

windows 版本Jenkins的Jenkinsfile中共享变量

场景 jenkins部署在windows服务器上的&#xff0c;需要在Jenkinsfile中获取命令执行的结果存入一个变量&#xff0c;然后在后续的执行中使用此变量 一开始想的是定义一个环境变量&#xff0c;如下所示&#xff0c; pipeline {agent anystages {stage(test) {steps {bat for /…

【网络】传输层TCP协议的报头和传输机制

目录 引言 报头和有效载荷 确认应答机制 超时重传机制 排序和去重 连接管理机制 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 TCP是传输层协议&#xff0c;全称传输控制协议。TCP报头中有丰富的字段以及协议本身会制定完善的策略来保证网络传输的可靠性。 TCP…