温馨提示×

Kubernetes安装后如何验证其运行状态

小樊
80
2025-09-19 15:40:48
栏目: 编程语言

1. 检查核心组件状态

核心组件(API Server、Controller Manager、Scheduler、etcd)是Kubernetes集群的“大脑”,其健康状态直接决定集群能否正常运行。

  • 命令kubectl get componentstatuses
  • 预期输出:所有核心组件状态显示为Healthy(如scheduler Healthy okcontroller-manager Healthy oketcd-0 Healthy {"health":"true"})。若出现UnhealthyUnknown,需检查对应组件的日志(如journalctl -u kube-apiserver)排查问题。

2. 检查节点状态

节点是集群的工作单元,需确保所有节点处于Ready状态(表示节点与控制平面通信正常,可调度Pod)。

  • 命令kubectl get nodes
  • 预期输出:所有节点的STATUS列为Ready(如node-1 Ready control-plane 30d v1.27.0node-2 Ready worker 30d v1.27.0)。若节点状态为NotReady,可能是kubelet服务异常、网络断连或磁盘空间不足。

3. 检查Pod运行状态

Pod是Kubernetes的最小调度单元,需确保系统Pod(如CoreDNS、kube-proxy)和业务Pod均处于Running状态(表示容器正在运行)。

  • 命令kubectl get pods -A-A表示查看所有命名空间)
  • 预期输出
    • 系统Pod(如kube-system命名空间下的corednskube-proxy)状态为RunningRESTARTS次数为0(如coredns-78fcd69978-ckc9b Running 0 20d);
    • 业务Pod状态为RunningREADY列显示预期副本数(如nginx-5c689d88bb-abcde Running 1/1 5m)。
      若Pod状态为Pending(调度失败,可能因资源不足)、CrashLoopBackOff(应用不断重启,可能因镜像问题或代码崩溃),需进一步使用kubectl describe pod <pod-name>分析原因。

4. 验证网络功能

网络是集群内Pod通信的基础,需检查DNS解析和Pod间通信是否正常。

  • DNS解析检查
    • 部署一个临时Pod(如busybox)并测试域名解析:
      kubectl run -it --rm --image=busybox:1.28 busybox --restart=Never -- nslookup kubernetes.default
      
    • 预期输出:能解析到Kubernetes服务的ClusterIP(如Server: 10.96.0.10Address: 10.96.0.10Name: kubernetes.default.svc.cluster.local)。若解析失败,可能是CoreDNS未正常运行。
  • Pod间通信检查
    • 创建两个Pod(如test-pod-1test-pod-2),进入其中一个Pod并尝试ping另一个Pod的IP:
      kubectl create deployment test-pod --image=nginx --replicas=2
      kubectl get pods -o wide
      kubectl exec -it test-pod-xxxxx -- /bin/sh
      ping <test-pod-yyyyy的IP>
      
    • 预期结果:能正常ping通(若无法ping通,可能是网络插件(如Calico、Flannel)未正确部署)。

5. 检查系统服务状态

Kubernetes依赖的系统服务(如kubelet、etcd)需正常运行,可通过以下命令检查:

  • 命令:在每个节点上执行systemctl status kubelet(检查kubelet服务状态)、在控制平面节点上执行ETCDCTL_API=3 etcdctl endpoint health(检查etcd健康状态)。
  • 预期输出
    • kubelet服务状态为active (running)
    • etcd端点返回is healthy: successfully committed proposal。若服务异常,需重启对应服务(如systemctl restart kubelet)。

6. 部署示例应用验证

通过部署一个简单的应用(如Nginx),验证集群的部署、扩缩容和Service暴露功能:

  • 命令
    kubectl create deployment nginx --image=nginx  # 部署Nginx应用
    kubectl get pods -w  # 查看Pod状态(等待变为Running)
    kubectl expose deployment nginx --type=NodePort --port=80  # 暴露Service
    kubectl get svc nginx  # 获取Service的NodePort(如30080)
    
  • 验证步骤
    • 确认Pod状态为Running
    • 在浏览器或通过curl访问<节点IP>:<NodePort>(如http://192.168.1.100:30080),能看到Nginx欢迎页面。若无法访问,可能是Service未正确暴露或防火墙拦截。

0