kubectl 命令

常用命令整理

kubectl 获取所有命名空间下的 Deployment 和 StatefulSet 负载信息,并检查是否配置了反亲和(Pod Anti-Affinity)

# 
echo "命名空间|负载名称|负载类型|副本数量|是否配置反亲和|反亲和配置" && \
kubectl get deploy,sts --all-namespaces -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,KIND:.kind,REPLICAS:.spec.replicas,PAA:.spec.template.spec.affinity.podAntiAffinity' --no-headers | \
awk '{
    ns = $1; name = $2; kind = $3; replicas = $4; paa = $5;
    gsub(/,.*/, "", replicas);  # 修复 replicas 可能拼接的问题
    if (paa == "<none>") {
        print ns "|" name "|" kind "|" replicas "|否|"
    } else {
        print ns "|" name "|" kind "|" replicas "|是|" paa
    }
}'

kubectl 获取镜像包含特定字符串的负载

kubectl get pods --all-namespaces -o json | \
  jq -r '.items[] | 
    select(.spec.containers[].image | contains("grafana")) | 
    .metadata.namespace as $ns | 
    .metadata.name as $pod | 
    .spec.containers[] | 
    select(.image | contains("grafana")) | 
    "Namespace: \($ns) | Pod: \($pod) | Container: \(.name) | Command: \(.command // ["<none>"] | join(" "))"'

代码说明:

  1. kubectl get pods --all-namespaces -o json
    获取所有命名空间中的 Pod,并以 JSON 格式输出,便于后续解析。

  2. jq -r '...'
    使用 jq 工具处理 JSON 数据,-r 表示输出原始字符串(不带引号)。

  3. .items[]
    遍历 JSON 中的每个 Pod 对象。

  4. select(.spec.containers[].image | contains("grafana"))
    筛选出至少有一个容器镜像包含 "grafana" 的 Pod。

  5. .metadata.namespace as $ns
    将当前 Pod 的命名空间保存到变量 $ns,供后续使用。

  6. .metadata.name as $pod
    将 Pod 名称保存到变量 $pod

  7. .spec.containers[]
    展开该 Pod 的所有容器,逐个处理。

  8. select(.image | contains("grafana"))
    只保留镜像中包含 "grafana" 的容器(防止多容器 Pod 中误输出非目标容器)。

  9. "Namespace: \($ns) | Pod: \($pod) | ..."
    格式化输出结果,显示命名空间、Pod 名、容器名和启动命令;
    若未设置 command,则显示 <none>

  10. | join(" "))"'
    将容器的启动命令以空格连接成字符串输出。
    原始命令:["sh", "-c", "start"],使用 join(" ") 后变为 "sh -c start"

kubectl 日志查看

kubectl logs <pod-name> -n <namespace>

# 查看上一个容器的日志
kubectl logs <pod-name> -n <namespace> --previous

# 持续输出日志
kubectl logs <pod-name> -n <namespace> -f

# 指定行数
kubectl logs <pod-name> -n <namespace> --tail=<line-number>