k8s中kube-controller-manager的具体作用是啥?
1 个回答
热爱漫无边际,生活自有分寸。上官云### **kube-controller-manager 在 Kubernetes 中的作用** `kube-controller-manager` 是 Kubernetes 的核心组件之一,负责运行多个控制器(Controller),确保集群的期望状态(Desired State)与实际状态(Current State)保持一致。 在 Kubernetes 中,控制器是一类用于管理资源的后台进程。每个控制器会监听 API Server,监控资源的状态,并在发现偏差时采取纠正措施,以驱动集群达到用户设定的期望状态。 ### **kube-controller-manager 的核心功能** `kube-controller-manager` 运行着多个控制器,每个控制器都负责管理 Kubernetes 的不同资源类型,常见的控制器包括: | 控制器 | 作用 | |--------|------| | Node Controller | 监控 Node 的状态,发现故障 Node 时进行恢复 | | Replication Controller | 确保 Pod 副本数符合预期 | | Deployment Controller | 负责 Deployment 资源的滚动更新和回滚 | | StatefulSet Controller | 维护 StatefulSet 资源,确保有序部署和存储挂载 | | DaemonSet Controller | 确保 DaemonSet 运行在所有指定 Node 上 | | Job Controller | 负责 Job 资源,确保批量任务成功运行 | | CronJob Controller | 负责周期性任务的调度 | | Service Controller | 负责管理 LoadBalancer 类型的 Service | | Endpoint Controller | 维护 Service 与 Pod 之间的映射关系 | | PersistentVolume Controller | 管理持久化存储(PV 和 PVC) | | Horizontal Pod Autoscaler (HPA) | 负责 Pod 的自动扩缩容 | | Namespace Controller | 负责 Namespace 资源的管理 | | Service Account & Token Controller | 负责 Service Account 和身份认证 | ### **关键控制器的详细介绍** #### **1. Node Controller** - 监听 Node 的状态,检测故障 - 如果 Node 失联超过 `node-monitor-grace-period`(默认 40s),将其标记为 **NotReady** - 如果 Node 超过 `pod-eviction-timeout`(默认 5 分钟)仍未恢复,会从该 Node 上驱逐 Pod 检查 Node 状态: ```bash kubectl get nodes kubectl describe node <node-name> ``` #### **2. Replication Controller** - 确保某个 `ReplicationController` 资源的 Pod 副本数与 `replicas` 字段匹配 - 如果 Pod 异常退出,自动创建新 Pod 进行补充 示例: ```yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx-controller spec: replicas: 3 selector: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ``` 查看 Pod 副本状态: ```bash kubectl get rc kubectl describe rc nginx-controller ``` #### **3. Deployment Controller** - 负责 `Deployment` 资源的滚动更新、回滚、扩缩容 - 维护 `ReplicaSet`,保证 Pod 的版本一致性 滚动更新 Deployment: ```bash kubectl set image deployment/nginx-deployment nginx=nginx:1.20 kubectl rollout status deployment/nginx-deployment ``` 回滚 Deployment: ```bash kubectl rollout undo deployment/nginx-deployment ``` #### **4. StatefulSet Controller** - 确保 `StatefulSet` 资源的 Pod 按顺序启动和关闭 - 维护稳定的 Pod 名称,如 `web-0`, `web-1`, `web-2` - 与 PersistentVolume 结合,保证存储不会因 Pod 重启而丢失 示例: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ``` 查看 StatefulSet: ```bash kubectl get statefulset ``` #### **5. DaemonSet Controller** - 确保每个 Node 上都运行一个 Pod,例如 `fluentd` 日志采集 - 当新 Node 加入时,自动在该 Node 上部署 Pod 示例: ```yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluentd ``` 查看 DaemonSet: ```bash kubectl get daemonset ``` #### **6. Job & CronJob Controller** - Job Controller 负责执行一次性任务,确保成功执行后结束 - CronJob Controller 负责定期执行任务,如数据库备份 示例 Job: ```yaml apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never ``` 示例 CronJob: ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "0 * * * *" jobTemplate: spec: template: spec: containers: - name: cron image: busybox command: ["echo", "Hello Kubernetes"] restartPolicy: OnFailure ``` 查看 Job: ```bash kubectl get jobs ``` 查看 CronJob: ```bash kubectl get cronjob ``` ### **kube-controller-manager 相关命令** #### **1. 查看 kube-controller-manager 状态** ```bash kubectl get pods -n kube-system | grep kube-controller-manager ``` #### **2. 查看 kube-controller-manager 运行的控制器** ```bash kubectl logs -n kube-system kube-controller-manager-<pod-name> ``` #### **3. 调试某个控制器** ```bash kubectl describe <resource-type> <resource-name> ``` 例如: ```bash kubectl describe node <node-name> kubectl describe deployment <deployment-name> ``` ### **总结** - `kube-controller-manager` 负责运行多个控制器,确保 Kubernetes 集群达到期望状态 - **Node Controller** 监控节点健康,故障节点进行恢复 - **ReplicationController** 和 **Deployment Controller** 负责 Pod 副本的扩缩容和滚动更新 - **StatefulSet Controller** 维护有状态应用,**DaemonSet Controller** 确保每个 Node 运行一个 Pod - **Job 和 CronJob Controller** 处理一次性任务和定时任务 - **Service Controller** 维护 LoadBalancer 服务,**PersistentVolume Controller** 负责存储管理发布于 2025-03-02 17:19 •IP属地 湖南举报评论收藏
公众号进入网站体验更佳

