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:模拟节点维护流程#

  1. 选择一个工作节点并执行 cordon
  2. 使用 drain 驱逐业务Pod。
  3. 验证业务是否在其他节点恢复。
  4. 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镜像拉取失败#

  1. 创建一个不存在的镜像Pod。
  2. 查看事件与日志定位错误。
  3. 修正镜像并验证恢复。

参考命令

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>

以上内容形成“命令—排错—验证”的闭环,便于建立标准化巡检与快速故障定位流程。