16.2.7 常用运维命令与日常巡检清单
本节聚焦 Kubernetes 集群日常运维高频命令与巡检清单,覆盖节点、组件、资源、网络、存储与安全等维度,确保可快速定位问题并形成标准化巡检流程,并给出可执行示例、排障步骤与练习。
常用运维命令#
原理草图:日常巡检数据流#
集群与节点#
示例:查看集群信息与版本(含命令解释)
# 查看集群入口与核心组件地址
kubectl cluster-info
# 查看客户端与服务端版本(--short更简洁)
kubectl version --short
示例:节点状态与污点/标签
# 查看节点与IP、版本、容器运行时
kubectl get nodes -o wide
# 详细查看某节点(含资源、事件、污点)
kubectl describe node worker-01
# 为节点打标签(用于调度选择)
kubectl label nodes worker-01 node-role.kubernetes.io/edge=true
# 添加污点(避免普通Pod调度)
kubectl taint nodes worker-01 dedicated=infra:NoSchedule
示例:节点维护(含预期效果)
# 让节点停止接收新Pod
kubectl cordon worker-01
# 驱逐Pod(保留DaemonSet,删除emptyDir)
kubectl drain worker-01 --ignore-daemonsets --delete-emptydir-data
# 恢复调度
kubectl uncordon worker-01
排错:节点 NotReady
# 查看节点状态与原因
kubectl describe node worker-01 | sed -n '/Conditions/,$p'
# 查看kubelet日志(节点上执行)
sudo journalctl -u kubelet -n 200 --no-pager
命名空间与资源#
示例:命名空间与资源总览
# 查看所有命名空间
kubectl get ns
# 创建业务命名空间
kubectl create ns ops
# 查看命名空间内所有资源
kubectl get all -n ops
示例:资源监控(需metrics-server)
# 查看节点CPU/内存使用
kubectl top nodes
# 查看Pod资源使用
kubectl top pods -n ops
Pod 与控制器#
示例:部署一个Nginx并滚动升级
# 1) 创建部署文件
cat > /tmp/nginx-deploy.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-nginx
namespace: ops
spec:
replicas: 2
selector:
matchLabels:
app: web-nginx
template:
metadata:
labels:
app: web-nginx
spec:
containers:
- name: nginx
image: nginx:1.23
ports:
- containerPort: 80
EOF
# 2) 应用配置
kubectl apply -f /tmp/nginx-deploy.yaml
# 3) 查看滚动状态
kubectl rollout status deploy/web-nginx -n ops
# 4) 升级镜像
kubectl set image deploy/web-nginx nginx=nginx:1.25 -n ops
# 5) 查看历史并回滚
kubectl rollout history deploy/web-nginx -n ops
kubectl rollout undo deploy/web-nginx -n ops
排错:CrashLoopBackOff
# 查看Pod状态与事件
kubectl describe pod <pod> -n ops
# 查看容器日志(若有多容器需指定-c)
kubectl logs <pod> -n ops
kubectl logs <pod> -c <container> -n ops
# 进入容器查看进程/配置
kubectl exec -it <pod> -n ops -- /bin/sh
日志与排障#
示例:事件排序与关键字段
# 按时间排序查看事件(定位最近异常)
kubectl get events -n ops --sort-by=.lastTimestamp
# 仅显示Warning事件
kubectl get events -n ops --field-selector type=Warning
服务与网络#
示例:Service/Ingress检查
# 查看服务
kubectl get svc -n ops
kubectl describe svc web-nginx -n ops
# 查看Ingress
kubectl get ingress -n ops
kubectl describe ingress web -n ops
示例:网络调试Pod
# 临时启动网络工具容器
kubectl run -it --rm netshoot \
--image=nicolaka/netshoot -n ops -- /bin/bash
# 容器内测试DNS与服务连通性
dig kubernetes.default.svc.cluster.local
curl -I http://web-nginx.ops.svc.cluster.local
存储#
示例:PVC/PV/StorageClass
kubectl get pvc -n ops
kubectl describe pvc data-claim -n ops
kubectl get pv
kubectl get sc
排错:PVC Pending
# 查看PVC事件
kubectl describe pvc data-claim -n ops
# 查看存储类参数
kubectl describe sc standard
配置与密钥#
示例:ConfigMap/Secret
# ConfigMap查看与详情
kubectl get cm -n ops
kubectl describe cm app-config -n ops
# Secret查看与详情(内容是base64)
kubectl get secret -n ops
kubectl describe secret db-secret -n ops
核心组件与系统命名空间#
示例:检查kube-system组件
kubectl get pod -n kube-system -o wide
kubectl describe pod coredns-xxxx -n kube-system
排错:CoreDNS解析异常
# 查看CoreDNS日志
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=200
# 检查DNS配置
kubectl get cm coredns -n kube-system -o yaml
日常巡检清单(建议每日/每周)#
集群层面(含示例命令)#
- 集群版本与关键组件版本一致性
bash kubectl version --short - API Server 可达性与响应时延
bash time kubectl get --raw=/healthz time kubectl get --raw=/readyz?verbose - etcd 集群健康与磁盘使用率(控制面节点)
```bash
sudo ETCDCTL_API=3 etcdctl endpoint health \
--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
df -h /var/lib/etcd
- 控制面组件状态bash
kubectl get pod -n kube-system -l component=kube-apiserver
kubectl get pod -n kube-system -l component=kube-controller-manager
kubectl get pod -n kube-system -l component=kube-scheduler
- 集群事件异常bash
kubectl get events -A --field-selector type=Warning
```
节点层面#
- 节点 Ready 状态与 NotReady 原因
bash kubectl get nodes kubectl describe node <node> | sed -n '/Conditions/,$p' - CPU/内存/磁盘/ inode 使用率
bash kubectl top nodes df -h df -i - 容器运行时状态
bash systemctl status containerd crictl info | head -n 20 - 时间同步与时区
bash timedatectl status chronyc tracking - 关键系统服务与端口
bash ss -lntp | egrep '6443|10250|10257|10259'
业务资源层面#
- 业务 Pod 运行状态
bash kubectl get pod -n ops -o wide kubectl get pod -n ops | egrep 'CrashLoopBackOff|OOMKilled' - Deployment/StatefulSet 副本数一致
bash kubectl get deploy -n ops kubectl get sts -n ops - HPA 异常触发
bash kubectl get hpa -n ops kubectl describe hpa <hpa> -n ops - 资源配额与 LimitRange
bash kubectl get resourcequota -n ops kubectl get limitrange -n ops - 关键日志与错误告警
bash kubectl logs -n ops <pod> --tail=200
网络与服务#
- Service/Ingress 可用性
bash kubectl get svc -n ops kubectl get ingress -n ops - DNS 解析(CoreDNS)
bash kubectl run -it --rm dns \ --image=busybox:1.36 -n ops -- nslookup kubernetes.default - CNI 插件健康
bash kubectl get pod -n kube-system -l k8s-app=calico-node
存储与数据#
- PVC 绑定状态与容量
bash kubectl get pvc -n ops kubectl describe pvc <pvc> -n ops - 关键存储类可用性
bash kubectl get sc - 状态应用读写延迟与错误
bash kubectl logs -n ops <stateful-pod> --tail=200
安全与配置#
- 证书有效期
bash sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates - RBAC 关键权限变更
bash kubectl get clusterrolebinding kubectl get rolebinding -A - Secret/ConfigMap 变更记录
bash kubectl get cm -n ops -o yaml kubectl get secret -n ops -o yaml - 镜像来源与拉取策略
bash kubectl get pod -n ops -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
推荐巡检输出模板(简要)#
日期:YYYY-MM-DD
集群状态:Ready 节点数 5 / 总节点数 5
核心组件:kube-apiserver(正常) kube-controller-manager(正常) kube-scheduler(正常)
资源概览:CPU/内存/磁盘使用率 Top 节点(node-02 78%/65%/70%)
业务状态:异常 Pod 列表(ops/web-nginx-xxx CrashLoopBackOff)
网络与存储:异常服务 0;PVC Pending 1(ops/data-claim)
处理动作:已处理(重启web-nginx);待跟踪(存储类校验)
练习与实操#
练习1:模拟节点维护流程#
- 选择一个工作节点并执行
cordon。 - 使用
drain驱逐业务Pod。 - 验证业务是否在其他节点恢复。
uncordon恢复调度。
参考命令
kubectl cordon worker-02
kubectl drain worker-02 --ignore-daemonsets --delete-emptydir-data
kubectl get pod -n ops -o wide
kubectl uncordon worker-02
练习2:排查Pod镜像拉取失败#
- 创建一个不存在的镜像Pod。
- 查看事件与日志定位错误。
- 修正镜像并验证恢复。
参考命令
cat > /tmp/bad-image.yaml <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: bad-image
namespace: ops
spec:
containers:
- name: app
image: nginx:not-exist
EOF
kubectl apply -f /tmp/bad-image.yaml
kubectl describe pod bad-image -n ops
kubectl delete pod bad-image -n ops
练习3:DNS 解析验证#
kubectl run -it --rm dns \
--image=busybox:1.36 -n ops -- nslookup kubernetes.default
练习4:PVC Pending 排查#
kubectl get pvc -n ops
kubectl describe pvc <pvc> -n ops
kubectl describe sc <sc>
以上内容形成“命令—排错—验证”的闭环,便于建立标准化巡检与快速故障定位流程。