在检查CentOS上Kubernetes(k8s)安装前,需确保基础环境配置正确,避免因环境问题导致集群异常:
ping或ssh测试);systemctl stop firewalld && systemctl disable firewalld)和SELinux(setenforce 0并修改/etc/selinux/config中SELINUX=disabled);swapoff -a并注释/etc/fstab中swap行),避免影响kubelet运行;ntpdate ntp.aliyun.com),确保节点时间一致。Kubernetes核心组件(kubelet、kubeadm、kubectl)是集群运行的基础,需验证其安装及运行状态:
rpm -qa | grep kube命令检查kubelet、kubeadm、kubectl是否安装,或使用yum list installed | grep kube确认;systemctl status kubelet,确保服务处于active (running)状态(若未运行,执行systemctl start kubelet并排查日志journalctl -xeu kubelet);kubectl version --client查看客户端版本,kubelet --version查看节点服务端版本,kubeadm version查看初始化工具版本),避免因版本冲突导致问题。通过kubectl命令验证集群整体健康状态,覆盖控制平面、节点、Pod等核心组件:
kubectl get componentstatuses(或在v1.19+版本中使用kubectl get --raw /api/v1/componentstatuses),检查controller-manager、scheduler、etcd是否为Healthy(若为Unhealthy,需检查对应组件日志,如journalctl -xeu kube-controller-manager);kubectl get nodes -o wide,确认所有节点(Master/Worker)状态为Ready(若为NotReady,需检查节点kubelet服务、网络连通性或磁盘空间);kubectl get pods -A(-A表示所有命名空间),检查所有Pod是否为Running状态(若存在CrashLoopBackOff、ImagePullBackOff、Pending等异常,需进一步分析,如kubectl describe pod <pod-name> -n <namespace>查看详细事件)。网络插件(如Flannel、Calico)是Pod间通信的关键,需验证其是否正常运行:
kubectl get pods -n kube-system,过滤网络插件相关的Pod(如Flannel的kube-flannel-ds-*、Calico的calico-node-*),确认所有Pod状态为Running;kubectl run nginx --image=nginx --port=80 --restart=Never),创建NodePort服务(kubectl expose deployment nginx --type=NodePort --port=80),获取NodePort后,在任意节点用curl http://<node-ip>:<node-port>访问,若能返回Nginx默认页面,则网络插件工作正常。验证Kubernetes核心服务(如DNS、调度)是否正常:
busybox测试Pod(kubectl run -it --rm --image=busybox:1.28 busybox --restart=Never -- sh),在Pod内执行nslookup kubernetes.default,若能解析到Kubernetes服务的ClusterIP(通常为10.96.0.1),则CoreDNS/DNSmasq工作正常;kubectl run test-pod --image=nginx --requests=cpu=1000m,memory=10Gi --limit=cpu=1000m,memory=10Gi),若Pod状态为Pending,说明调度功能正常(需检查节点资源是否充足,如kubectl top nodes查看节点资源使用情况)。若上述检查发现问题,可通过以下工具深入排查:
journalctl -xeu kubelet,分析节点级别的错误(如容器运行时异常、网络插件问题);ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint health,确认etcd集群健康(etcd是控制平面的数据存储,其异常会导致集群不可用);kubectl cluster-info dump > dump.json,将集群配置、事件、Pod日志等信息导出,便于提交给社区或进一步分析。