1.5 Kube Controller Manager
Kube Controller Manager 相关常用命令详解
Kube Controller Manager 作为 Kubernetes 控制平面的核心组件,虽然大多数操作都是自动化的,但管理员仍需要通过一些命令来监控和管理其运行状态。以下是与之相关的常用命令分类说明:
Kube Controller Manager 包含多个内置的控制器,每个控制器都是一个独立的控制循环,监视集群状态并做出相应调整:
主要控制器
Node Controller - 节点控制器
- 监控节点状态
- 当节点不可达时负责响应
- 维护节点列表和节点生命周期
Replication Controller - 副本控制器
- 确保每个 ReplicationController 对象都有正确数量的 Pod 副本在运行
- (注:在新版本中更推荐使用 Deployment 和 ReplicaSet)
Deployment Controller - 部署控制器
- 实现 Deployment 对象的声明式更新
- 控制 ReplicaSet 的创建和滚动更新
ReplicaSet Controller - 副本集控制器
- 维护 ReplicaSet 的正确副本数
- 创建和删除 Pod 以满足副本数要求
Endpoint Controller - 端点控制器
- 维护 Service 与 Pod 的关联关系
- 填充 Endpoints 对象(即 Pod IP:Port 对)
Service Account & Token Controller - 服务账户控制器
- 为新的命名空间创建默认 ServiceAccount
- 为 ServiceAccount 创建和管理 API 访问令牌
Namespace Controller - 命名空间控制器
- 处理命名空间的删除
- 确保所有属于该命名空间的资源都被清除
Job Controller - 任务控制器
- 监控 Job 对象并创建 Pod 来完成任务
- 跟踪任务完成状态
DaemonSet Controller - 守护进程集控制器
- 确保每个符合条件的节点都运行一个指定的 Pod 副本
StatefulSet Controller - 有状态集控制器
- 管理有状态应用的部署和扩展
- 维护 Pod 的唯一性和持久存储
PersistentVolume Controller - 持久卷控制器
- 绑定 PersistentVolumeClaims 到 PersistentVolumes
- 自动执行存储供应
工作原理
- 监控状态:通过 API Server 监听集群中资源对象的变化
- 比较状态:将实际状态与期望状态(在资源对象的 spec 中定义)进行比较
- 执行操作:采取必要操作使实际状态趋向期望状态
- 循环执行:不断重复上述过程
配置参数
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
| kubectl get pods -n kube-system -l component=kube-controller-manager
|
查看日志
1 2 3 4 5 6
| kubectl logs -n kube-system <controller-manager-pod-name>
kubectl logs -n kube-system <controller-manager-pod-name> -f
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
| kubectl get deployments --all-namespaces
kubectl get replicasets --all-namespaces
kubectl get statefulsets --all-namespaces
|
强制删除卡住的资源
1 2 3 4
| kubectl delete pod <pod-name> --grace-period=0 --force
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
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
| kubectl exec -it -n kube-system <controller-manager-pod-name> -- top
|
6. 维护和故障排查
重启 Controller Manager
1 2
| 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
| kubectl get deployments -o wide
kubectl get replicasets -o wide
|
8. 安全相关命令
检查 RBAC 权限
1 2 3 4
| kubectl get pod -n kube-system <controller-manager-pod-name> -o jsonpath='{.spec.serviceAccountName}'
kubectl get clusterrole system:kube-controller-manager -o yaml
|
使用技巧
结合 grep 过滤:大多数命令可以结合 grep 过滤关键信息
1
| kubectl logs -n kube-system <pod-name> | grep -i "error"
|
使用 -o wide/yaml/json:获取更详细的输出格式
1 2
| kubectl get pod <pod-name> -o yaml kubectl get endpoints kube-controller-manager -n kube-system -o json
|
时间排序事件:排查问题时按时间顺序查看事件
1
| kubectl get events --sort-by=.metadata.creationTimestamp -A
|
监控关键指标:使用 watch 命令实时监控
1
| watch -n 1 'kubectl get deployments,pods,replicasets -A'
|
这些命令可以帮助 Kubernetes 管理员有效地监控和管理 Controller Manager 及其管理的各种控制器,确保集群稳定运行。