k8s-shell脚本判断pod状态并进入pod执行sql语句

文章讲述了如何通过kubectl获取Pod状态,进入Pod并在其中执行SQL脚本,包括设置环境变量、查询Pod状态、复制文件并执行初始化SQL命令的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:
思路:
查看pod状态:
1、通过pod的label 获取到pod的名称(因为label总是固定的,名称不是固定的)
2、拿到pod名称,就可以确定pod的状态;

进入pod并执行sql文件:
1、创建sql文件,复制到pod内
2、通过kubectl exec 执行该脚本

#!/usr/bin/env bash

set -exo pipefail

if [[ -z "${COM_HOME}" ]]; then
    COM_HOME=$(cd `dirname $0`; cd ../..; pwd)
fi

sed -i "s#\${APP_HOME}#${APP_HOME}#g" ${COM_HOME}/yaml/*.yaml

kubectl apply -f "${COM_HOME}/yaml/"

#Namespace Name
namespace="default"
#Provide label name which is specified in pod definition
appname="videoaccess"

# Get the pod name
pod_name=$(kubectl get pod -n $namespace -l app=$appname -o=jsonpath="{range .items[*]}{.metadata.name}")

# Get the pod status
pod_status=$(kubectl get pods -n $namespace -o=jsonpath="{.items[?(@.metadata.name == '$pod_name')].status.phase}")

echo "${pod_status}"
# if pod is running,modify the mysql; else wait
while [ ! "$pod_status" == "Running" ]
do
  echo "..."
  sleep 1
  pod_status=$(kubectl get pods -n $namespace -o=jsonpath="{.items[?(@.metadata.name == '$pod_name')].status.phase}")
done

kubectl cp "${COM_HOME}/file/init_mysql.sql" -n $namespace $pod_name:/tmp/
kubectl exec -it -n $namespace $pod_name  --  mysql -hlocalhost -uroot -p123456 -A -N -e "source /tmp/init_mysql.sql"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值