此脚本可以实现自动给,你指定的一个名称空间下的所有 deployment 添加你指定的便签和值,并且同时给每个 deployment 下的所有 Pod 一起添加相同的标签。
已验证投产。
#!/bin/bash# 设置命名空间
NAMESPACE="you-namespace" # 修改为你的命名空间# 设置标签
LABEL_KEY="app.kubernetes.io/name" # 标签键# 获取命名空间下所有的 Deployment 名称
deployments=$(kubectl get deployments -n "$NAMESPACE" -o=jsonpath='{.items[*].metadata.name}')# 遍历每个 Deployment,添加标签
for deployment in $deployments; doecho "为 Deployment '$deployment' 添加标签 $LABEL_KEY=$LABEL_VALUE"kubectl label deployment "$deployment" "$LABEL_KEY"="$deployment" -n "$NAMESPACE" --overwrite# 获取 Deployment 的 label selectorLABEL_SELECTOR=$(kubectl get deployment "$deployment" -n "$NAMESPACE" -o=jsonpath='{.spec.selector.matchLabels}')# 检查是否成功获取到 label selectorif [ -z "$LABEL_SELECTOR" ]; thenecho "未能找到 Deployment '$DEPLOYMENT_NAME' 的 label selector"exit 1fi# 将 JSON 格式的标签选择器转换为 key=value 格式FORMATTED_SELECTOR=$(echo "$LABEL_SELECTOR" | jq -r 'to_entries | map("\(.key)=\(.value)") | join(",")')# 获取所有符合标签选择器的 Pod 名称echo "根据 label selector '$FORMATTED_SELECTOR' 获取 Pod 名称..."PODS=$(kubectl get pods -n "$NAMESPACE" -l "$FORMATTED_SELECTOR" -o=jsonpath='{.items[*].metadata.name}')# 循环所有pod 名称for pod in $PODSdoecho "为 Pod '$pod' 添加标签 $LABEL_KEY=$deployment"kubectl label pod "$pod" "$LABEL_KEY"="$deployment" -n "$NAMESPACE" --overwritedone
doneecho "所有 Deployment 和 Pod 标签添加完成!"