当前位置: 首页 > news >正文

K8s-pod控制器

一、常见的 Pod 控制器类型

控制器主要功能典型使用场景
ReplicationController (RC)早期的副本控制器,保证固定数量 Pod 运行,现在基本被 ReplicaSet 替代老版本 K8s 兼容
ReplicaSet (RS)保证固定数量的 Pod 副本运行,支持标签选择器Deployment 的底层实现
Deployment管理 ReplicaSet,支持滚动更新、回滚绝大多数无状态服务
StatefulSet管理有状态应用,Pod 有固定名称和稳定存储MySQL、Zookeeper、Kafka
DaemonSet确保每个(或特定)节点都运行一个 Pod日志收集、监控代理
Job一次性任务,执行完成后退出数据导入、批处理
CronJob定时任务定时备份、定期数据清理

1、ReplicaSet控制器

ReplicaSet 会不断执行 控制循环

  1. 检查当前标签选择器匹配的 Pod 数量

  2. 和 YAML 中 replicas 的期望值比对

  3. 少了就创建新的 Pod(用 template 模板)

  4. 多了就删除多余的 Pod

#查看定义 Replicaset 资源
[root@k8s1 ~]# kubectl explain rs

1.1、使用案例

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: nginx-rs
spec:replicas: 3selector:matchLabels:app: nginx          ##这里的标签要和下面的一样template:metadata:labels:app: nginx       ##和上面一样,否则创建不起来spec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80
kubectl apply -f nginx-rs.yaml
kubectl get rs
kubectl get pods -l app=nginx
  • replicas:期望副本数

  • selector:标签选择器,决定 RS 管哪些 Pod

  • template:Pod 模板,创建 Pod 时用它的定义

缺点

  • 没有版本控制(更新 Pod 镜像时会直接删老 Pod、建新 Pod,没有滚动更新)

  • 无法回滚

  • 无法直接声明更新策略(RollingUpdate、Recreate 等)

  • 不会单独用 ReplicaSet 管 Pod

  • 一般是 Deployment → ReplicaSet → Pod

  • Deployment 会自动生成和管理 ReplicaSet,帮你滚动更新、回滚

2、Deployment控制器

Deployment 负责管理 ReplicaSet,而 ReplicaSet 再管理 Pod。
它的作用不仅是维持副本数,还能:

  • 滚动更新(Rolling Update)

  • 回滚版本(Rollback)

  • 暂停/继续更新

  • 自动扩缩容(结合 HPA)

2.1、使用案例

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploy
spec:replicas: 3revisionHistoryLimit: 5       # 保留多少个历史版本,默认是 10selector:matchLabels:app: nginxstrategy:type: RollingUpdate          # 滚动更新rollingUpdate:maxUnavailable: 1          # 更新时最多不可用的 Pod 数maxSurge: 1                 # 更新时最多多出来的 Pod 数template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80
kubectl apply -f nginx-deploy.yaml
kubectl get deploy
kubectl get rs
kubectl get pods -l app=nginx

2.2、常用命令

查看 Deployment 状态

kubectl describe deploy nginx-deploy


更新镜像(会触发滚动更新)

kubectl set image deploy/nginx-deploy nginx=nginx:1.26


回滚到上一个版本

kubectl rollout undo deploy/nginx-deploy


回滚到指定版本

kubectl rollout undo deploy/nginx-deploy --to-revision=2


查看更新历史

kubectl rollout history deploy/nginx-deploy


暂停/继续更新

kubectl rollout pause deploy/nginx-deploy
kubectl rollout resume deploy/nginx-deploy

3.3企业级 Nginx Deployment 示例

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploynamespace: production         # 生产环境命名空间labels:app: nginx
spec:replicas: 4                   # 生产常用 >= 3 保证高可用revisionHistoryLimit: 5       # 保留5个历史版本,便于回滚selector:matchLabels:app: nginxstrategy:type: RollingUpdate         # 滚动更新策略rollingUpdate:maxUnavailable: 1         # 更新时最多 1 个不可用maxSurge: 1                # 更新时最多多出来 1 个 Podtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25.4      # 企业会固定小版本,避免镜像漂移imagePullPolicy: IfNotPresentports:- containerPort: 80resources:               # 资源限制requests:cpu: "200m"memory: "256Mi"limits:cpu: "500m"memory: "512Mi"env:                      # 环境变量(可从 ConfigMap/Secret 注入)- name: NGINX_ENVvalueFrom:configMapKeyRef:name: nginx-configkey: envvolumeMounts:             # 日志/配置挂载- name: nginx-config-volmountPath: /etc/nginx/conf.d- name: nginx-logsmountPath: /var/log/nginxlivenessProbe:            # 存活探针(Pod 崩溃自动重启)httpGet:path: /port: 80initialDelaySeconds: 10periodSeconds: 15failureThreshold: 3readinessProbe:           # 就绪探针(就绪才接流量)httpGet:path: /port: 80initialDelaySeconds: 5periodSeconds: 10failureThreshold: 3volumes:                    # 关联 ConfigMap、日志- name: nginx-config-volconfigMap:name: nginx-config- name: nginx-logsemptyDir: {}              # 企业一般会挂到持久卷restartPolicy: AlwaysimagePullSecrets:           # 如果镜像仓库需要认证- name: regcred

ConfigMap(nginx-config)

apiVersion: v1
kind: ConfigMap
metadata:name: nginx-confignamespace: production
data:env: "production"default.conf: |server {listen       80;server_name  _;location / {root   /usr/share/nginx/html;index  index.html;}access_log /var/log/nginx/access.log;error_log  /var/log/nginx/error.log;}
# 创建命名空间
kubectl create namespace production# 应用 ConfigMap
kubectl apply -f nginx-config.yaml# 部署 Deployment
kubectl apply -f nginx-deploy.yaml# 查看部署状态
kubectl get deploy -n production
kubectl rollout status deploy/nginx-deploy -n production

####待补充

http://www.lryc.cn/news/615162.html

相关文章:

  • Baumer高防护相机如何通过YoloV8深度学习模型实现输电线路塔电缆检测分割(C#代码UI界面版)
  • DAY 37 作业(补)
  • 99-基于Python的京东手机数据分析及预测系统
  • 【工具变量】全国省级农业保险保费收入与赔付支出数据更新(2001-2023年)
  • 爬虫攻防战:反爬与反反爬全解析
  • react-window
  • 【Datawhale AI夏令营】基于多模态RAG的企业财报问答系统
  • Arduino系列教程:点亮一个LED灯
  • 【工具】Python多环境管理
  • Red Hat Enterprise Linux 7.9安装Oracle 11.2.0.4单实例数据库-图文详解
  • Python训练营打卡Day27-类的定义和方法
  • 线程池多反应堆服务器webserver(c++)
  • 算法篇----模拟
  • Linux的软件防火墙iptables
  • QML 鼠标穿透
  • 从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技
  • 云服务器--阿里云OSS(2)【Springboot使用阿里云OSS】
  • 81 keil仿真调试记录
  • C++11中的移动语义
  • 优化器:SGD、Adam、RMSprop等优化算法对比与机器翻译应用
  • day 16 stm32 IIC
  • 【Java EE初阶 --- 网络原理】JVM
  • 堆----3.数据流的中位数
  • 【Redis】Redis-plus-plus的安装与使用
  • 自定义通知组件跟随右侧边栏移动
  • SQL基本
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书
  • 2025-08-09 李沐深度学习14——经典卷积神经网络 (2)
  • 生态问题是什么?
  • P1890 gcd区间