当前位置: 首页 > 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.dtcms.com/a/322615.html

相关文章:

  • Web前端之Vue框架
  • Java Stream API 实战:提升集合处理的效率与可读性!
  • 使用 Visual Studio 2022 编译 PortAudio 项目
  • 华为实验NAT
  • spring.config.import 不存在
  • 文生图工具之ComfyUI从原理到实践的全维度剖析
  • 矩阵的条件数 向量的条件数
  • 【面试场景题】通过LinkedHashMap来实现LRU与LFU
  • 时序分解 | MATLAB实现SAO-VMD雪消融算法优化变分模态分解
  • 使用流式函数解决v语言zstd程序解压缩失败问题
  • react 常用组件库
  • 下肢康复机器人机械结构设计cad【6张】三维图+设计说明说书
  • web应用服务器tomcat
  • 算法_python_牛客华为机试笔记_01
  • 算法篇----分治(快排)
  • Amazon Linux 训练lora模型的方式
  • 【Canvas与旗帜】圆角蓝底大黄白星十一红白带旗
  • sqli-labs通关笔记-第39关 GET数值型堆叠注入(手工注入+脚本注入两种方法)
  • 【Linux】Tomcat
  • 2025年华数杯评审标准发布
  • 企业WEB服务器nginx新手超详细讲解
  • Docker 搭建 Jenkins 实现自动部署!
  • jenkins-飞书通知机制
  • STM32 外设驱动模块四:光敏电阻(LDR) 模块
  • Linux网络编程:TCP的远程多线程命令执行
  • Ollama 开启远程端口
  • 闲鱼智能监控机器人:基于 Playwright 与 AI 的多任务监控分析工具
  • Kubernetes 集群密钥与机密管理方案对比分析:Vault、Sealed Secrets 与 AWS KMS
  • dokcer 容器里面安装vim 编辑器
  • ruoyi关闭shiro校验,任何接口可以直接访问