1.5 Kube Controller Manager

1.5 Kube Controller Manager

Kube Controller Manager 相关常用命令详解

Kube Controller Manager 作为 Kubernetes 控制平面的核心组件,虽然大多数操作都是自动化的,但管理员仍需要通过一些命令来监控和管理其运行状态。以下是与之相关的常用命令分类说明:

Kube Controller Manager 包含多个内置的控制器,每个控制器都是一个独立的控制循环,监视集群状态并做出相应调整:

主要控制器

  1. Node Controller - 节点控制器

    • 监控节点状态
    • 当节点不可达时负责响应
    • 维护节点列表和节点生命周期
  2. Replication Controller - 副本控制器

    • 确保每个 ReplicationController 对象都有正确数量的 Pod 副本在运行
    • (注:在新版本中更推荐使用 Deployment 和 ReplicaSet)
  3. Deployment Controller - 部署控制器

    • 实现 Deployment 对象的声明式更新
    • 控制 ReplicaSet 的创建和滚动更新
  4. ReplicaSet Controller - 副本集控制器

    • 维护 ReplicaSet 的正确副本数
    • 创建和删除 Pod 以满足副本数要求
  5. Endpoint Controller - 端点控制器

    • 维护 Service 与 Pod 的关联关系
    • 填充 Endpoints 对象(即 Pod IP:Port 对)
  6. Service Account & Token Controller - 服务账户控制器

    • 为新的命名空间创建默认 ServiceAccount
    • 为 ServiceAccount 创建和管理 API 访问令牌
  7. Namespace Controller - 命名空间控制器

    • 处理命名空间的删除
    • 确保所有属于该命名空间的资源都被清除
  8. Job Controller - 任务控制器

    • 监控 Job 对象并创建 Pod 来完成任务
    • 跟踪任务完成状态
  9. DaemonSet Controller - 守护进程集控制器

    • 确保每个符合条件的节点都运行一个指定的 Pod 副本
  10. StatefulSet Controller - 有状态集控制器

    • 管理有状态应用的部署和扩展
    • 维护 Pod 的唯一性和持久存储
  11. PersistentVolume Controller - 持久卷控制器

    • 绑定 PersistentVolumeClaims 到 PersistentVolumes
    • 自动执行存储供应

工作原理

  1. 监控状态:通过 API Server 监听集群中资源对象的变化
  2. 比较状态:将实际状态与期望状态(在资源对象的 spec 中定义)进行比较
  3. 执行操作:采取必要操作使实际状态趋向期望状态
  4. 循环执行:不断重复上述过程

配置参数

Kube Controller Manager 支持多种配置参数,常见的有:

  • --cluster-cidr: 集群中 Pod 的 CIDR 范围
  • --service-cluster-ip-range: Service 的 VIP CIDR 范围
  • --node-monitor-period: 节点状态检查周期
  • --concurrent-deployment-syncs: 并发 Deployment 同步数
  • --concurrent-endpoint-syncs: 并发 Endpoint 同步数
  • --leader-elect: 是否启用领导者选举(高可用部署时使用)
  • --controllers: 指定启用的控制器列表

1. 查看 Controller Manager 状态

查看组件状态

1
2
3
kubectl get componentstatuses
# 或缩写
kubectl get cs

输出示例:

NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

查看 Controller Manager Pod

1
2
# 在 kube-system 命名空间中查找
kubectl get pods -n kube-system -l component=kube-controller-manager

查看日志

1
2
3
4
5
6
# 查看 Controller Manager 日志
kubectl logs -n kube-system <controller-manager-pod-name>
# 持续查看日志
kubectl logs -n kube-system <controller-manager-pod-name> -f
# 查看过去30分钟的日志
kubectl logs -n kube-system <controller-manager-pod-name> --since=30m

2. 领导者选举相关命令

查看当前领导者

1
kubectl get endpoints kube-controller-manager -n kube-system -o yaml

输出中的 annotations 部分会包含当前领导者信息:

1
2
3
4
5
6
7
8
annotations:
control-plane.alpha.kubernetes.io/leader: '{
"holderIdentity":"controller-manager-pod-name_xxxx",
"leaseDurationSeconds":15,
"acquireTime":"2023-01-01T00:00:00Z",
"renewTime":"2023-01-01T00:01:00Z",
"leaderTransitions":3
}'

3. 控制器特定资源操作

查看控制器管理的资源

1
2
3
4
5
6
# 查看所有 Deployment
kubectl get deployments --all-namespaces
# 查看所有 ReplicaSet
kubectl get replicasets --all-namespaces
# 查看所有 StatefulSet
kubectl get statefulsets --all-namespaces

强制删除卡住的资源

1
2
3
4
# 强制删除 Pod
kubectl delete pod <pod-name> --grace-period=0 --force
# 强制删除 Namespace
kubectl delete namespace <ns-name> --grace-period=0 --force

4. 配置和参数检查

查看运行参数

1
2
3
4
# 查看当前运行的参数
kubectl get pod <controller-manager-pod-name> -n kube-system -o yaml
# 查找 --leader-elect 等特定参数
kubectl get pod <controller-manager-pod-name> -n kube-system -o yaml | grep -i "leader-elect"

检查配置的 CIDR 范围

1
kubectl describe pod <controller-manager-pod-name> -n kube-system | grep -E "cluster-cidr|service-cluster-ip-range"

5. 调试和性能分析

查看控制器指标

1
2
3
4
# 先进行端口转发
kubectl port-forward -n kube-system <controller-manager-pod-name> 10252:10252
# 然后访问指标端点
curl http://localhost:10252/metrics

检查工作队列状态

1
curl http://localhost:10252/metrics | grep -E "workqueue_adds_total|workqueue_depth|workqueue_queue_duration_seconds"

CPU/内存分析

1
2
# 进入容器执行 top 命令
kubectl exec -it -n kube-system <controller-manager-pod-name> -- top

6. 维护和故障排查

重启 Controller Manager

1
2
# 删除 Pod 让其自动重建
kubectl delete pod -n kube-system <controller-manager-pod-name>

检查事件

1
2
3
kubectl get events --sort-by=.metadata.creationTimestamp -A
# 只看与控制器相关的事件
kubectl get events --field-selector involvedObject.kind=ReplicaSet -A

检查控制器版本

1
kubectl get pod -n kube-system <controller-manager-pod-name> -o yaml | grep image:

7. 高级诊断命令

检查 API 调用延迟

1
kubectl get --raw /metrics | grep -E "rest_client_request_latency_seconds.*controller"

检查控制器处理延迟

1
kubectl get --raw /metrics | grep -E "controller_runtime_reconcile_time_seconds"

检查资源同步状态

1
2
3
4
# 查看 Deployment 同步状态
kubectl get deployments -o wide
# 查看 ReplicaSet 状态
kubectl get replicasets -o wide

8. 安全相关命令

检查 RBAC 权限

1
2
3
4
# 查看 Controller Manager 使用的 ServiceAccount
kubectl get pod -n kube-system <controller-manager-pod-name> -o jsonpath='{.spec.serviceAccountName}'
# 查看关联的 ClusterRole
kubectl get clusterrole system:kube-controller-manager -o yaml

使用技巧

  1. 结合 grep 过滤:大多数命令可以结合 grep 过滤关键信息

    1
    kubectl logs -n kube-system <pod-name> | grep -i "error"
  2. 使用 -o wide/yaml/json:获取更详细的输出格式

    1
    2
    kubectl get pod <pod-name> -o yaml
    kubectl get endpoints kube-controller-manager -n kube-system -o json
  3. 时间排序事件:排查问题时按时间顺序查看事件

    1
    kubectl get events --sort-by=.metadata.creationTimestamp -A
  4. 监控关键指标:使用 watch 命令实时监控

    1
    watch -n 1 'kubectl get deployments,pods,replicasets -A'

这些命令可以帮助 Kubernetes 管理员有效地监控和管理 Controller Manager 及其管理的各种控制器,确保集群稳定运行。