Kubernetes 资源
此页面上列出的命令/步骤可用于检查中最重要的 Kubernetes 资源。
确保您配置了正确的 kubeconfig(例如,Rancher 高可用时,export KUBECONFIG=$PWD/kube_config_rancher-cluster.yml
)或者通过 Rancher UI 使用内嵌的 kubectl。
#
节点#
获取节点运行以下命令并检查以下内容:
- 集群中的所有节点都应列出,确保没有任何节点丢失。
- 所有节点都应处于
Ready
状态(如果未处于Ready
状态,请使用docker logs kubelet
检查该节点上的kubelet
容器日志) - 检查所有节点是否是正确的版本。
- 检查 OS/内核/Docker 值是否按预期显示(如果不正确可能是由于升级了 OS/内核/Docker 而引起的问题)
输出示例:
#
获取节点 Conditions运行以下命令以列出节点 Conditions,关于节点 Conditions 请查看节点 Conditions
运行以下命令以列出节点有问题的 Conditions,关于节点 Conditions 请查看节点 Conditions
输出示例:
#
Kubernetes Leader 选举#
Kubernetes Controller Manager Leaderleader 选举由选举程序决定。在确定了 leader 节点之后,leader 状态(holderIdentity
) 将会保存在 kube-controller-manager
endpoint 中 (在本示例中,leader 节点是controlplane-0
)。
#
Kubernetes Scheduler Leaderleader 选举由选举程序决定。在确定了 leader 节点之后,leader 状态(holderIdentity
) 将会保存在 kube-scheduler
endpoint 中 (在本示例中,leader 节点是 controlplane-0
)。
#
Ingress Controller默认的 Ingress Controller 是 NGINX,并作为 DaemonSet 部署在ingress-nginx
命名空间中。只能将该 Pod 调度到具有worker
角色的节点上。
检查 Pod 是否在所有节点上运行:
示例输出:
如果 Pod 无法运行(状态不是 Running,Ready
状态未显示为1/1
,或者您看到大量的Restart
次数),请检查 Pod 的详细信息,日志和 namespaces 事件。
#
查看 Pod 详细信息#
查看 Pod 容器日志#
查看 Namespace 事件#
Debug 日志执行下面命令开启 debug 日志:
#
检查配置查看每个 Pod 中生成的配置:
#
Rancher AgentsRancher 通过 cluster-agent 与集群进行通信(通过cattle-cluster-agent
调用 Kubernetes API 与集群通讯),并且通过cattle-node-agent
与节点进行通信。
#
cattle-node-agent检查是否每个节点都正常运行了 cattle-node-agent, 正确运行的状态应该是 Running 并且重启的次数应该不多。
输出示例:
检查特定节点上 cattle-node-agent 或者所有节点上 cattle-node-agent pods 的日志是否有错误:
#
cattle-cluster-agent检查集群中是否正确运行了 cattle-cluster-agent,正确运行的状态应该是 Running 并且重启的次数应该不多。
输出示例:
检查 cattle-cluster-agent pod 的日志是否有错误:
#
其他#
检查所有 Pods/Jobs 的状态执行以下命令进行检查集群中所有 Pod/Job 是否正常运行:
Pods 和 Jobs 正确运行的状态应该是:
- Running,并且重启的次数应该不多。
- 或者是Completed,已经完成运行。
#
查看 Pod 详细信息#
查看 Pod 日志如果 Job 状态是 Completed 则可以通过以下命令检查未完成原因:
#
查看 Job 详细信息#
查看 Job Pod 的日志#
被驱逐的 PodPod 会根据驱逐信号中的描述进行驱逐。
查看被逐出的 Pod 列表(Pod 名称和命名空间):
要删除所有被驱逐的 Pod,
检查被逐出的 Pod,已调度节点的列表以及被驱逐的原因:
#
Job 的状态一直没有变更为 Completed如果您启用了 Istio,而且部署了 Job 之后,Job 的状态一直没有变更为Completed,您需要参考这些步骤手动添加 annotation。
因为 Istio Sidecarh 会无休止地运行,即使 Job 的任务完成了,它的状态也不能被视为Completed。上述步骤是在短期内处理这个问题的方法,它禁止了 Istio 和添加了 annotation 的 Pod 之间的通信。如果您使用了这种方式解决这个问题,这个 Job 就没有权限访问 service mesh,不能够用于集成测试。