一、控制器介绍
Pod 是最小调度单元,生产环境不直接管理裸 Pod。 控制器(Controller)核心逻辑:调谐循环,不断对比集群实际状态和 yaml 定义的期望状态。Pod 崩溃、节点故障,控制器自动重建 Pod,实现业务自愈。
K8s 常用控制器:Deployment、ReplicaSet、StatefulSet、DaemonSet、Job、CronJob
二、ReplicaSet 副本集
作用:维持指定数量 Pod 副本运行。
Deployment 底层自动创建 ReplicaSet,业务开发几乎不直接写 RS 资源。
apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-rs spec: replicas: 3 selector: matchLabels: app: nginx-rs template: metadata: labels: app: nginx-rs spec: containers: - name: nginx image: nginx:1.25kubectl apply -f rs.yaml kubectl get rs # 手动删除pod,RS会自动新建pod补齐副本数 kubectl delete pod nginx-rs-xxxx三、Deployment(无状态业务首选)
基于 ReplicaSet 封装,企业最常用控制器。 能力:副本管理、滚动更新、版本回滚、扩容缩容。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx-deploy template: metadata: labels: app: nginx-deploy spec: containers: - name: nginx image: nginx:1.24 ports: - containerPort: 80# 创建 kubectl apply -f deploy.yaml kubectl get deploy kubectl get rs kubectl get pods # 扩容缩容 kubectl scale deployment nginx-deploy --replicas=5 # 滚动更新,修改镜像版本 kubectl set image deployment nginx-deploy nginx=nginx:1.25 kubectl rollout status deployment nginx-deploy # 版本回滚 kubectl rollout history deployment nginx-deploy kubectl rollout undo deployment nginx-deploy kubectl rollout undo deployment nginx-deploy --to-revision=1四、StatefulSet 有状态控制器
用于有状态应用:Mysql、Redis 集群、etcd。 特点:
- Pod 拥有稳定不变主机名
- 稳定持久存储,重建 Pod 自动绑定原有 PVC
- Pod 有序启动、有序删除
apiVersion: apps/v1 kind: StatefulSet metadata: name: web-sts spec: replicas: 3 selector: matchLabels: app: web-sts serviceName: "web-svc" #必须配置无头Service template: metadata: labels: app: web-sts spec: containers: - name: nginx image: nginxkubectl apply -f sts.yaml kubectl get sts # pod名称固定 web-sts-0 web-sts-1 web-sts-2五、DaemonSet 守护集
集群每个节点运行一个 Pod;新增节点自动部署 Pod。 典型场景:日志采集、节点监控、网络插件 calico。
apiVersion: apps/v1 kind: DaemonSet metadata: name: log-ds spec: selector: matchLabels: app: log-agent template: metadata: labels: app: log-agent spec: containers: - name: log image: busyboxkubectl get ds六、Job 和 CronJob 批处理控制器
Job:一次性任务,保证任务执行成功
apiVersion: batch/v1 kind: Job metadata: name: job-demo spec: template: spec: containers: - name: task image: busybox command: ["echo","一次性批处理任务执行完成"] restartPolicy: NeverCronJob:定时任务,等价 Linux crontab
apiVersion: batch/v1 kind: CronJob metadata: name: cron-demo spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: cron-task image: busybox command: ["echo","定时任务运行"] restartPolicy: OnFailurekubectl get cronjob kubectl get jobs