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

Kubernetes控制器详解:从Deployment到CronJob

本文将深入探讨Kubernetes各种控制器的工作原理和使用场景,帮助全面理解这些集群状态守护者的工作机制。

控制器:Kubernetes的大脑

在Kubernetes架构中,控制器扮演着集群大脑的角色,持续监控系统状态并确保实际状态与期望状态保持一致。

核心控制器类型详解

1. Deployment控制器

Deployment是Kubernetes中最常用的控制器之一,为Pod和ReplicaSet提供声明式更新。

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxstrategy:type: RollingUpdaterollingUpdate:maxSurge: 25%maxUnavailable: 25%template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
主要特性
  • 支持滚动更新和回滚
  • 提供应用扩缩容能力
  • 维护应用副本数
  • 支持应用版本管理

2. Deployment更新策略

Deployment支持两种更新策略:

  • RollingUpdate(默认):逐步创建新Pod并删除旧Pod
  • Recreate:先删除所有旧Pod,再创建新Pod

# 更新Deployment镜像 kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 # 查看更新状态 kubectl rollout status deployment/nginx-deployment

3. Deployment回滚机制

当更新出现问题时,可以轻松回滚到之前的版本:

# 查看发布历史 kubectl rollout history deployment/nginx-deployment # 回滚到上一个版本 kubectl rollout undo deployment/nginx-deployment

4. Deployment伸缩操作

# 水平扩展副本数 kubectl scale deployment nginx-deployment --replicas=5 # 自动伸缩 kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80

5. DaemonSet控制器

DaemonSet确保所有(或部分)节点上运行一个Pod的副本,适合运行集群级别的守护进程。

apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd-logginglabels:app: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:tolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedulecontainers:- name: fluentdimage: fluentd:latestresources:limits:memory: 200Mirequests:memory: 200Mi

6. StatefulSet控制器

StatefulSet为有状态应用提供部署和管理支持,维护Pod的粘性标识和持久存储。

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: "mysql"replicas: 3selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: "password"ports:- containerPort: 3306volumeMounts:- name: datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi

7. Job与CronJob控制器

Job用于运行一次性任务,CronJob用于运行定时任务:

apiVersion: batch/v1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busybox:1.28command: ["/bin/sh", "-c", "date; echo Hello from Kubernetes"]restartPolicy: OnFailure

实际应用场景

  • 弹性伸缩:Horizontal Pod Autoscaler根据负载自动调整副本数
  • 滚动更新:Deployment控制器逐步更新Pod版本
  • 有状态服务:StatefulSet确保数据库等应用的数据持久性
  • 系统守护进程:DaemonSet在每个节点上运行监控服务
  • 定时任务:CronJob定期执行备份、清理等维护任务

最佳实践

  • 明确定义资源的期望状态
  • 为控制器设置适当的资源配额
  • 监控控制器的性能和健康状态
  • 选择合适的更新策略
  • 配置就绪探针确保流量路由

结论

Kubernetes控制器是实现集群自动化和自我修复的核心机制。通过理解各种控制器的工作原理和特性,可以更好地设计和管理云原生应用,确保系统的高可用性和可靠性。

从无状态的Deployment到有状态的StatefulSet,从一次性任务Job到定时任务CronJob,每种控制器都为解决特定的业务场景而设计,共同构成了Kubernetes强大的应用管理能力。


文章转载自:

http://iIYqiq7D.Lhptg.cn
http://j3XZ9cpO.Lhptg.cn
http://mkHKrBwQ.Lhptg.cn
http://pc4glTmG.Lhptg.cn
http://Wimrcwkh.Lhptg.cn
http://zYkbkbD3.Lhptg.cn
http://58B9tVyZ.Lhptg.cn
http://aUVVHxov.Lhptg.cn
http://p5k0hrxe.Lhptg.cn
http://bNwJd2As.Lhptg.cn
http://j7fotvZo.Lhptg.cn
http://Sr0dzpUu.Lhptg.cn
http://LiwnKOtp.Lhptg.cn
http://6kFppPtE.Lhptg.cn
http://0fRUDlZk.Lhptg.cn
http://qREvmyZs.Lhptg.cn
http://Vohq2GfU.Lhptg.cn
http://qAAgOngB.Lhptg.cn
http://wqDwxxvk.Lhptg.cn
http://zFBiQ003.Lhptg.cn
http://HVhWVttM.Lhptg.cn
http://DaRgk3jG.Lhptg.cn
http://GGLjfTxG.Lhptg.cn
http://uBbmG23N.Lhptg.cn
http://G3LxICmN.Lhptg.cn
http://c5QQYlfo.Lhptg.cn
http://gBbJlj3m.Lhptg.cn
http://IlSBXnef.Lhptg.cn
http://UmwHzPw3.Lhptg.cn
http://bxlpn9jP.Lhptg.cn
http://www.dtcms.com/a/388621.html

相关文章:

  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化
  • 【C语言】冒泡排序算法解析与实现
  • [GESP202309 三级] 进制判断
  • 【C++】const和static的用法
  • 箭头函数{}规则,以及隐式返回
  • brain.js构建训练神经网络
  • 开学季高效学习与知识管理技术
  • C++STL与字符串探秘
  • 【面试题】- 使用CompletableFuture实现多线程统计策略工厂模式
  • 打工人日报#20250917
  • LeetCode:12.最小覆盖字串
  • 【C++】 深入理解C++虚函数表与对象析构机制
  • C++ 中 ->和 . 操作符的区别
  • SQL CTE (Common Table Expression) 详解
  • 解决windows更新之后亮度条消失无法调节的问题
  • FPGA学习篇——Verilog学习译码器的实现
  • JavaScript Promise 终极指南 解决回调地狱的异步神器 99% 开发者都在用
  • AI智能体开发实战:从提示工程转向上下文工程的完整指南
  • jtag协议处理流程
  • 【LeetCode 每日一题】2749. 得到整数零需要执行的最少操作数
  • 《饿殍:明末千里行》Switch版试玩发布 3月13日发售
  • LeetCode:9.找到字符串中所有的字母异位词
  • Java获取淘宝商品详情数据的详细说明
  • PyTorch张量运算、索引与自动微分详解
  • Simulink变量优先级与管理策略
  • 大模型学习:什么是FastText工具
  • 从芯片到云:微软Azure全栈硬件安全体系构建可信基石