Kubernetes集群Shell脚本:遍历筛选出的Pod执行指定命令
遍历Kubernetes中指定Pod并执行命令的Shell脚本方案
完整脚本示例
#!/bin/bash # 方式1:通过标签筛选(推荐,精准匹配) # 假设你的test Pod带有app=test标签,直接筛选该标签下的Pod名称 PODS=$(kubectl get pods --selector=app=test -o custom-columns=NAME:.metadata.name --no-headers) # 方式2:通过名称包含test筛选(如果没有标签可用) # PODS=$(kubectl get pods -o custom-columns=NAME:.metadata.name --no-headers | grep -i test) # 逐个处理每个Pod for pod in $PODS; do echo "开始处理Pod: $pod" # 执行mysqldump备份命令,注意脚本环境下不要用-it(交互式终端) kubectl exec "$pod" -- mysqldump -u你的用户名 -p你的密码 目标数据库名 > "${pod}_$(date +%Y%m%d).sql" # 检查命令执行结果 if [ $? -eq 0 ]; then echo "✅ Pod $pod 备份成功,文件已保存为 ${pod}_$(date +%Y%m%d).sql" else echo "❌ Pod $pod 备份失败,请检查Pod状态或命令参数" fi echo "--------------------------------------------------" done
关键细节说明
精准获取Pod名称:
优先用Kubernetes标签筛选(--selector参数),避免grep误匹配其他列的内容。如果只能按名称过滤,用-o custom-columns=NAME:.metadata.name --no-headers只输出Pod名称列,再做grep过滤,结果更可靠。脚本环境下的kubectl exec注意事项:
不要加-t参数(终端分配),脚本是非交互式环境,加-t可能导致执行报错。如果mysqldump需要密码,建议通过--defaults-extra-file指定配置文件,或者使用Kubernetes Secrets传递敏感信息,避免明文写在脚本里。错误处理与日志:
通过$?判断上一条命令的退出码,配合echo输出清晰的处理日志,方便后续排查问题。可以加上日期后缀区分不同备份文件,避免覆盖。
内容的提问来源于stack exchange,提问作者Devaddy
相关产品推荐
相关产品推荐

