debian

怎样检查debian上k8s安装状态

小樊
43
2025-11-03 04:16:31
栏目: 智能运维

1. 检查Kubernetes组件服务状态(系统级)

在Debian系统上,Kubernetes的核心组件(如kubeletkube-apiserveretcd等)以系统服务形式运行。通过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),说明组件正在正常运行;若为inactivefailed,需查看对应日志(如journalctl -u kubelet)排查问题。

2. 使用kubectl验证集群状态(集群级)

kubectl是Kubernetes的核心命令行工具,需提前配置好kubeconfig文件(通常位于~/.kube/config),用于与集群API服务器通信。

2.1 检查kubectl版本

确保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", ...}

2.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)或网络连接。

2.3 查看所有Pod状态

使用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状态为PendingErrorCrashLoopBackOff,需进一步使用kubectl describe pod <pod-name>查看详细原因。

2.4 查看集群基本信息

通过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服务的防火墙设置或证书配置。

3. 验证网络插件状态

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未运行,需重新部署网络插件或检查其配置。

4. 测试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通,需检查网络插件的配置或节点网络连通性。

5. 查看组件日志(排查问题)

若上述步骤中发现异常(如Pod无法启动、节点未就绪),可通过kubectl logs命令查看对应组件的日志,定位问题根源:

# 查看kubelet日志(节点级)
journalctl -u kubelet

# 查看kube-apiserver日志(Master节点)
journalctl -u kube-apiserver

# 查看特定Pod的日志(如nginx-deployment的第一个容器)
kubectl logs <nginx-pod-name> -n default

日志中会包含错误信息(如证书过期、资源不足、配置错误),帮助快速解决问题。

0
看了该问题的人还看了