news 2026/3/29 23:01:38

Pod控制器与配置资源管理 【K8S (七)】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pod控制器与配置资源管理 【K8S (七)】

目录

一、Pod控制器

1、Pod 控制器概述

2、Pod 控制器的类型

3、Deployment 控制器

3.1 特点

3.2 案列

3.3 查看控制器配置

4、StatefulSet 控制器(有状态)

4.1 特点

4.2 三个核心组件

4.3 StatefulSet + NFS 持久卷(案列)

4.3.1 定义 Headless Service

4.3.2 定义 StatefulSet 动态

4.3.3 创建与验证

4.3.4 滚动更新

4.3.5 总结

5、DaemonSet 控制器

5.1 功能

5.2 案列

6、Job 控制器

6.1 功能

7、CronJob 控制器

7.1 功能

8、无状态 vs 有状态 应用对比

9、常规 Service 与 Headless Service 对比

10、总结


一、Pod控制器

1、Pod 控制器概述

Pod 控制器(Controller)又称为工作负载(Workload),是 Kubernetes 中用于 管理 Pod 的中间层。

它的职责是确保集群中的 Pod 资源始终符合用户定义的“期望状态”。

功能

  • 保证 Pod 副本数量与期望一致
  • Pod 异常退出时,自动根据重启策略重建
  • 支持伸缩(扩容/缩容)、滚动更新、回滚

2、Pod 控制器的类型

控制器

功能

应用场景

ReplicaSet

保证指定数量的 Pod 副本存在,支持滚动扩缩容。通常不直接使用,由 Deployment 管理。

无状态应用

Deployment

管理 ReplicaSet,实现声明式部署、滚动升级、回滚等。

Web 服务

StatefulSet

管理有状态应用,提供稳定的网络标识与存储。

数据库、

Zookeeper

DaemonSet

每个 Node 上运行一个 Pod。

日志、监

控、Agent

Job

执行一次性任务。

定期备份、

通知

CronJob

周期性任务(类似 Crontab)。

定期备份、通知

3、Deployment 控制器

3.1 特点
  • 管理无状态应用
  • 支持滚动更新与回滚
  • 声明式配置更新
  • 与 ReplicaSet 协作使用
3.2 案列
vim nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80 kubectl create -f nginx-deployment.yaml kubectl get pods,deploy,rs
3.3 查看控制器配置
kubectl edit deployment/nginx-deployment apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2021-04-19T08:13:50Z" generation: 1 labels: app: nginx #Deployment资源的标签 name: nginx-deployment namespace: default resourceVersion: "167208" selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx- deployment uid: d9d3fef9-20d2-4196-95fb-0e21e65af24a spec: progressDeadlineSeconds: 600 replicas: 3 #期望的pod数量,默认是1 revisionHistoryLimit: 10 selector: matchLabels: app: nginx strategy: rollingUpdate: maxSurge: 25% #升级过程中会先启动的新Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值 maxUnavailable: 25% #升级过程中在新的Pod启动好后销毁的旧Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值 type: RollingUpdate #滚动升级 template: metadata: creationTimestamp: null labels: app: nginx #Pod副本关联的标签 spec: containers: - image: nginx:1.15.4 #镜像名称 imagePullPolicy: IfNotPresent #镜像拉取策略 name: nginx ports: - containerPort: 80 #容器暴露的监听端口 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always #容器重启策略 schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 ...... ##查看历史版本 [root@master01 ~]# kubectl rollout history deployment nginx-deployment deployment.apps/nginx-deployment REVISION CHANGE-CAUSE 1 <none>

4、StatefulSet 控制器(有状态)

4.1 特点

1. 稳定存储:基于 PVC 实现,每个 Pod 独立存储

2. 稳定网络标识:Pod 名称和 DNS 名称固定

3. 有序部署/删除:从 0 → N-1 创建,从 N-1 → 0 删除

4. 依赖 Headless Service

4.2 三个核心组件

1. Headless Service(无头服务):用于为Pod资源标识符生成可解析的DNS记录。

2. volumeClaimTemplates(存储卷申请模板):基于静态或动态PV供给方式为Pod资源提供专有的固定存储。

3. StatefulSet:用于管控Pod资源。

4.3 StatefulSet + NFS 持久卷(案列)
4.3.1 定义 Headless Service
vim stateful-headless.yaml apiVersion: v1 kind: Service metadata: name: myapp-svc spec: ports: - port: 80 name: web clusterIP: None selector: app: myapp-pod kubectl apply -f stateful-headless.yaml
4.3.2 定义 StatefulSet 动态
vim stateful-demo.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: myapp spec: serviceName: myapp-svc replicas: 3 selector: matchLabels: app: myapp-pod template: metadata: labels: app: myapp-pod spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - containerPort: 80 name: web volumeMounts: - name: myappdata mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: myappdata annotations: #动态PV创建时,使用annotations在PVC里声明一个StorageClass对象的标识进行关联 volume.beta.kubernetes.io/storage-class: nfs-client-storageclass spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 2Gi

解析上例:由于 StatefulSet 资源依赖于一个实现存在的 Headless 类型的 Service 资源,所以需要先定义一个名为 myapp-svc 的 Headless Service 资源,用于为关联到每个 Pod 资源创建 DNS 资源记录。接着定义了一个名为 myapp 的 StatefulSet 资源,它通过 Pod 模板创建了 3 个 Pod 资源副本,并基于 volumeClaimTemplates 向前面创建的PV进行了请求大小为 2Gi 的专用存储卷。

4.3.3 创建与验证

kubectl apply -f stateful-demo.yaml

kubectl get sts,pvc,pv,pods

4.3.4 滚动更新

#StatefulSet 控制器将在 StatefulSet 中删除并重新创建每个 Pod。它将以与 Pod 终止相同的顺序进行(从最大的序数到最小的序数),每次更新一个 Pod。在更新其前身之前,它将等待正在更新的 Pod 状态变成正在运行并就绪。如下操作的滚动更新是按照2-0的顺序更新。

# 修改镜像版本

kubectl edit sts myapp

kubectl get pods -w# 观察按序更新 2→1→0

4.3.5 总结

无状态:

1)deployment 认为所有的pod都是一样的

2)不用考虑顺序的要求

3)不用考虑在哪个node节点上运行

4)可以随意扩容和缩容

有状态:

1)实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd,zookeeper

2)实例之间不对等的关系,以及依靠外部存储的应用。

常规service和无头服务区别:

service:一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。

Headless service:无头服务,不需要cluster-IP,而是直接以DNS记录的方式解析出被代理Pod的IP地址。

5、DaemonSet 控制器

5.1 功能

确保每个 Node 上都运行一个 Pod 副本。

常用于运行系统级后台任务(守护进程)。

典型场景:

  • Fluentd / Logstash 日志收集
  • Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond 监控代理
  • 存储服务如 Ceph、GlusterFS
5.2 案列
vim ds.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonSet labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15.4 ports: - containerPort: 80 DaemonSet会在每个node节点都创建一个Pod kubectl get pods nginx-deployment-4kr6h 1/1 Running 0 35s nginx-deployment-8jrg5 1/1 Running 0 35s

6、Job 控制器

6.1 功能

用于执行一次性任务,任务完成后即退出。

应用场景:

  • 数据迁移
  • 批处理
  • 安全扫描
  • 离线数据处理

7、CronJob 控制器

7.1 功能

周期性任务(类似 Linux Crontab)。

应用场景:

  • 定期备份
  • 定时通知
  • 日志清理

8、无状态 vs 有状态 应用对比

对比项

无状态(Deployment)

有状态(StatefulSet)

Pod 名称

随机生成

固定、有序(0→N-1)

存储

共享存储或无持久卷

每个 Pod 独立 PVC

网络标识

不固定

稳定 DNS 名称

扩缩容顺序

无序

有序(依次创建/删除)

应用示例

Web、API

MySQL、ZooKeeper

9、常规 Service 与 Headless Service 对比

类型

是否有ClusterIP

访问方式

作用

Service

负载均衡 + 服务发现

集群统一访问入口

Headless Service

直接解析到 Pod IP

StatefulSet 中 DNS 定位

10、总结

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/25 0:39:37

实测Qwen3-Reranker-0.6B:32K长文本精排效果超预期

实测Qwen3-Reranker-0.6B&#xff1a;32K长文本精排效果超预期 在信息密集型任务中&#xff0c;如何从大量候选文档中精准筛选出最相关的结果&#xff0c;是搜索、问答和推荐系统的核心挑战。传统方法往往依赖关键词匹配或简单语义模型&#xff0c;难以应对复杂查询与长文本场…

作者头像 李华
网站建设 2026/3/28 9:32:57

Qwen1.5-0.5B更新策略:模型版本迭代管理建议

Qwen1.5-0.5B更新策略&#xff1a;模型版本迭代管理建议 1. 背景与核心理念 1.1 单模型多任务的轻量化AI服务构想 在当前AI应用向边缘设备和低资源环境延伸的趋势下&#xff0c;如何在有限算力条件下实现多功能智能服务&#xff0c;成为工程落地的关键挑战。传统的做法是为不…

作者头像 李华
网站建设 2026/3/23 2:29:45

小白友好!阿里联合高校开源的数字人模型使用全攻略

小白友好&#xff01;阿里联合高校开源的数字人模型使用全攻略 你是否想过&#xff0c;只需一张照片和一段音频&#xff0c;就能生成一个会说话、有表情、动作自然的“数字人”视频&#xff1f;现在&#xff0c;阿里联合多所高校推出的 Live Avatar 开源项目&#xff0c;让这一…

作者头像 李华
网站建设 2026/3/29 0:59:57

移动端适配即将到来?unet人像卡通化未来功能前瞻

移动端适配即将到来&#xff1f;unet人像卡通化未来功能前瞻 1. 功能概述 本工具基于阿里达摩院 ModelScope 的 DCT-Net 模型&#xff0c;支持将真人照片转换为卡通风格。项目由科哥构建并持续维护&#xff0c;命名为 unet person image cartoon compound&#xff0c;旨在提供…

作者头像 李华
网站建设 2026/3/20 0:39:26

FST ITN-ZH核心功能解析|附WebUI批量转换实战案例

FST ITN-ZH核心功能解析&#xff5c;附WebUI批量转换实战案例 在日常处理中文文本时&#xff0c;我们常常会遇到大量非标准化的表达形式&#xff1a;比如“二零零八年八月八日”、“早上八点半”、“一百二十三”等。这些口语化或书面变体虽然便于人类理解&#xff0c;但在数据…

作者头像 李华
网站建设 2026/3/28 18:06:23

IndexTTS-2语音质量提升秘诀:自回归GPT调优教程

IndexTTS-2语音质量提升秘诀&#xff1a;自回归GPT调优教程 1. 开箱即用的中文语音合成体验 你有没有试过输入一段文字&#xff0c;几秒钟后就听到自然、有感情的中文语音&#xff1f;不是那种机械念稿的电子音&#xff0c;而是像真人说话一样有停顿、有语气、甚至带点小情绪…

作者头像 李华