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(" "))"'
代码说明:
kubectl get pods --all-namespaces -o json
获取所有命名空间中的 Pod,并以 JSON 格式输出,便于后续解析。
jq -r '...'
使用jq
工具处理 JSON 数据,-r
表示输出原始字符串(不带引号)。
.items[]
遍历 JSON 中的每个 Pod 对象。
select(.spec.containers[].image | contains("grafana"))
筛选出至少有一个容器镜像包含"grafana"
的 Pod。
.metadata.namespace as $ns
将当前 Pod 的命名空间保存到变量$ns
,供后续使用。
.metadata.name as $pod
将 Pod 名称保存到变量$pod
。
.spec.containers[]
展开该 Pod 的所有容器,逐个处理。
select(.image | contains("grafana"))
只保留镜像中包含"grafana"
的容器(防止多容器 Pod 中误输出非目标容器)。
"Namespace: \($ns) | Pod: \($pod) | ..."
格式化输出结果,显示命名空间、Pod 名、容器名和启动命令;
若未设置command
,则显示<none>
。
| 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>