Kubernetes(K8S)(五)——控制器(ReplicaSet 、Deployment 、DaemonSet 、Job 、CronJob )

本文详细介绍了Kubernetes中的控制器,包括ReplicaSet(确保指定数量的Pod副本运行)、Deployment(声明式管理Pod创建、更新和回滚)、DaemonSet(在所有或特定节点上运行一个Pod副本)、Job(执行一次性批处理任务)和CronJob(按时间周期执行任务)。此外,还提及了HPA(水平Pod自动缩放)的功能。

1.控制器的介绍

Pod 的分类:
• 自主式 Pod:Pod 退出后不会被创建
• 控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

控制器类型:
• Replication Controller和ReplicaSet
• Deployment
• DaemonSet
• StatefulSet
• Job
• CronJob
• HPA全称Horizontal Pod Autoscaler

1.Replication Controller和ReplicaSet
ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。
ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

2.Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。典型的应用场景: 用来创建Pod和ReplicaSet 、滚动更新和回滚、扩容和缩容、暂停与恢复。

3.DaemonSet
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的典型用法:
在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。
在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。
在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等
• 一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种 类型的 daemon 使用。 • 一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet, 但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。

4.StatefulSet
StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对 等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”
StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证
StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:
• 稳定的、唯一的网络标识符。
• 稳定的、持久的存储
• 有序的、优雅的部署和缩放。
• 有序的、自动的滚动更新。

5.Job
Job执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。

6.CronJob
Cron Job 创建基于时间调度的 Jobs。 一个 CronJob 对象就像 crontab (cron table) 文件中的一行,它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job。

7.HPA
HPA根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。


2. ReplicaSet控制器

参考官网:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#replicaset-v1-apps

[kubeadm@server1 mainfest]$ vim rs.yml
[kubeadm@server1 mainfest]$ cat rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[kubeadm@server1 mainfest]$ kubectl apply -f rs.yml 
replicaset.apps/replicaset-example created
[kubeadm@server1 mainfest]$ kubectl get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
replicaset-example-69tbm   1/1     Running   0          17s   10.244.1.31   server2   <none>           <none>
replicaset-example-d46ff   1/1     Running   0          17s   10.244.2.44   server3   <none>           <none>
replicaset-example-tmm25   1/1     Running   0          17s   10.244.2.45   server3   <none>           <none>
[kubeadm@server1 mainfest]$ vim rs.yml
[kubeadm@server1 mainfest]$ cat rs.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 10
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
[kubeadm@server1 mainfest]$ kubectl apply -f rs.yml 
replicaset.apps/replicaset-example configured
[kubeadm@server1 mainfest]$ kubectl get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
replicaset-example-69tbm   1/1     Running   0          39s   10.244.1.31   server2   <none>           <none>
replicaset-example-7zxcw   1/1     Running   0          4s    10.244.1.35   server2   <none>           <none>
replicaset-example-94p7z   1/1     Running   0          4s    10.244.2.47   server3   <none>           <none>
replicaset-example-d46ff   1/1     Running
### **Kubernetes 控制器(Controller)详解** #### **1. 什么是 Kubernetes 控制器?** 控制器(Controller)是 Kubernetes 的核心组件,用于**管理 Pod 的生命周期**,确保集群的当前状态(Actual State)与用户声明的期望状态(Desired State)一致。 --- ### **2. 常见的 Kubernetes 控制器** 以下是你提到的几种控制器及其作用: | **控制器** | **用途** | **适用场景** | |----------------|-------------------------------------------------------------------------|--------------------------------| | **Deployment** | 管理无状态应用的 Pod,支持滚动更新、回滚 | Web 服务、API 服务(如 Nginx) | | **StatefulSet** | 管理有状态应用的 Pod,提供稳定的网络标识、持久化存储和有序部署/伸缩 | 数据库(MySQL、MongoDB)、消息队列(Kafka) | | **ConfigMap** | ❌ **不是控制器**,而是存储配置数据的资源对象,供 Pod 挂载使用 | 环境变量、配置文件 | --- ### **3. 其他重要的 Kubernetes 控制器** 除了上述资源,Kubernetes 还提供了多种控制器: | **控制器** | **用途** | **适用场景** | |---------------------|-------------------------------------------------------------------------|--------------------------------| | **DaemonSet** | 确保每个 Node 上运行一个指定的 Pod(如日志采集 Agent) | Fluentd(日志收集)、Node Exporter(监控) | | **ReplicaSet** | 确保指定数量的 Pod 副本运行(Deployment 底层使用它) | 通常不直接使用,由 Deployment 管理 | | **Job** | 创建一次性任务,任务完成后 Pod 自动退出 | 批处理任务(如数据迁移) | | **CronJob** | 定时运行的 Job(类似 Linux Cron) | 定时备份、定期清理数据 | | **Horizontal Pod Autoscaler (HPA)** | 根据 CPU/内存等指标自动扩缩 Pod 数量 | 应对流量高峰(如电商大促) | | **EndpointSlice** | 管理 Service 的后端 Endpoint(现代替代方案,比传统 Endpoints 更高效) | 大规模微服务集群 | --- ### **4. 控制器的工作原理** 所有控制器的核心逻辑: 1. **监听集群状态**(通过 Kubernetes API Server)。 2. **比较当前状态与期望状态**(如 `replicas: 3` 但实际只有 2 个 Pod)。 3. **执行调谐(Reconcile)**:创建/删除 Pod 或其他资源,使状态一致。 --- ### **5. 示例:控制器关系图** ``` 用户定义 Deployment(期望 3 个 Nginx Pod) ↓ Deployment 创建 ReplicaSetReplicaSet 创建 3 个 Pod ↓ Node 故障导致 1 个 Pod 消失 → ReplicaSet 检测并重新创建 1 个 Pod ``` --- ### **6. 总结** - ✅ **Deployment、StatefulSet、DaemonSetJob/CronJob 都是控制器**,用于管理 Pod。 - ❌ **ConfigMap 不是控制器**,只是配置存储。 - **其他控制器**(如 HPA、ReplicaSet)在特定场景下发挥作用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值