在Debian系统上,Kubernetes的核心组件(如kubelet、kube-apiserver、etcd等)以系统服务形式运行。通过systemctl命令可验证这些服务是否处于active (running) 状态:
# 检查kubelet状态(每个节点均需运行)
sudo systemctl status kubelet
# 检查kube-apiserver状态(仅在Master节点运行)
sudo systemctl status kube-apiserver
# 检查etcd状态(仅在Master节点运行,若使用etcd作为数据库)
sudo systemctl status etcd
# 检查kube-controller-manager状态(仅在Master节点运行)
sudo systemctl status kube-controller-manager
# 检查kube-scheduler状态(仅在Master节点运行)
sudo systemctl status kube-scheduler
若服务状态显示为Active: active (running),说明组件正在正常运行;若为inactive或failed,需查看对应日志(如journalctl -u kubelet)排查问题。
kubectl是Kubernetes的核心命令行工具,需提前配置好kubeconfig文件(通常位于~/.kube/config),用于与集群API服务器通信。
确保kubectl已正确安装并与集群版本兼容:
kubectl version --client
输出应包含Client Version(客户端版本)和Server Version(集群版本,若已连接),例如:
Client Version: version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", ...}
Server Version: version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.2", ...}
通过kubectl get nodes命令查看集群中所有节点的状态,所有节点的STATUS列需显示为Ready(表示节点已加入集群并可调度Pod):
kubectl get nodes
示例输出:
NAME STATUS ROLES AGE VERSION
node-1 Ready master 10d v1.28.2
node-2 Ready <none> 10d v1.28.2
node-3 Ready <none> 10d v1.28.2
若节点状态为NotReady,需检查节点上的kubelet日志(journalctl -u kubelet)或网络连接。
使用kubectl get pods --all-namespaces(或简写kubectl get pods -A)查看集群中所有命名空间的Pod状态,所有Pod的STATUS列需显示为Running,且READY列需显示为1/1(单容器Pod)或对应比例(多容器Pod):
kubectl get pods --all-namespaces
示例输出:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-xxxxxx 1/1 Running 0 10d
kube-system calico-node-xxxxx 1/1 Running 0 10d
kube-system coredns-xxxxxx 1/1 Running 0 10d
default nginx-deployment-xxxxx 1/1 Running 0 5m
若Pod状态为Pending、Error或CrashLoopBackOff,需进一步使用kubectl describe pod <pod-name>查看详细原因。
通过kubectl cluster-info命令查看集群的核心服务地址(如API服务器、KubeDNS),确认集群基础服务已启动:
kubectl cluster-info
示例输出:
Kubernetes control plane is running at https://192.168.1.100:6443
CoreDNS is running at https://192.168.1.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
若无法访问API服务器,需检查kube-apiserver服务的防火墙设置或证书配置。
Kubernetes依赖网络插件(如Calico、Flannel、Cilium)实现Pod间通信。需检查网络插件的Pod是否正常运行(通常位于kube-system命名空间):
# 以Calico为例,检查其Pod状态
kubectl get pods -n kube-system | grep calico
示例输出:
calico-kube-controllers-xxxxxx 1/1 Running 0 10d
calico-node-xxxxx 1/1 Running 0 10d
calico-node-yyyyy 1/1 Running 0 10d
若网络插件Pod未运行,需重新部署网络插件或检查其配置。
创建一个简单的Nginx Pod,通过kubectl exec进入Pod内部,测试与其他Pod的网络连通性:
# 创建Nginx Pod
kubectl run test-pod --image=nginx --port=80 --rm -it -- /bin/sh
# 在Pod内安装ping工具(若镜像中没有)
apt-get update && apt-get install -y iputils-ping
# 获取另一个Pod的IP地址(如coredns Pod)
kubectl get pod -n kube-system -l k8s-app=kube-dns -o wide
# 测试Ping通其他Pod(替换为目标Pod的IP)
ping <target-pod-ip>
若能正常Ping通,说明Pod间网络配置正确;若无法Ping通,需检查网络插件的配置或节点网络连通性。
若上述步骤中发现异常(如Pod无法启动、节点未就绪),可通过kubectl logs命令查看对应组件的日志,定位问题根源:
# 查看kubelet日志(节点级)
journalctl -u kubelet
# 查看kube-apiserver日志(Master节点)
journalctl -u kube-apiserver
# 查看特定Pod的日志(如nginx-deployment的第一个容器)
kubectl logs <nginx-pod-name> -n default
日志中会包含错误信息(如证书过期、资源不足、配置错误),帮助快速解决问题。