文章目录
- 1、相关API
- 获取token
- 创建你需要的命名空间
- 导入配置
- 2、脚本
1、相关API
获取token
curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"
创建你需要的命名空间
# 注意$token的替换,这里创建个docker的namespace
curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"
导入配置
# $token替换为第一步获取到的token
# $nacosConfigFile替换为Nacos配置压缩包的绝对路径
curl --location --request POST 'http://$nacosPodIp:8848/nacos/v1/cs/configs?tenant=&accessToken=$token&username=nacos&import=true&namespace=docker&policy=ABORT' --form 'file=@"$nacosConfigFile"'
2、脚本
背景是用K8S部署了Nacos,相关资源有:
- nacos-headless
- sts
- pod
这里先判断nacos的服务是否成功启动:
# 这里每隔20s轮询一次,检测到Nacos启动后开始进行导入
checkNacosPodStatus(){namespace=$1 # 命名空间echo -e "\033[32m正在等待Nacos启动....\033[0m"waitTime=0while true; dostatus=`kubectl get po -n $namespace | grep -i nacos-0 | awk '{print $3}'`if [[ $status == "Running" ]]; thenecho -e "\033[32mNacos启动成功....\033[0m"breakfiif [ $waitTime -gt 300 ]; thenecho -e "\033[31mNacos启动超时,自动取消后续的Nacos配置导入操作,请手动导入....\033[0m"breakexit 1fisleep 20waitTime=$((waitTime+20))done
}
如果Nacos启动成功,则开始导入配置。这里可取k8s服务的IP,但Nacos这里用的无头服务,没有固定IP,直接去获取Pod的IP:
nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`
完整脚本:
function importNacosConfig(){echo -e "\033[32m即将导入Nacos配置,准备中....\033[0m"# nacos无头服务没有固定IP,这里去取podIP# nacosServiceIp=$(kubectl get svc -n dmz nacos-headless -o jsonpath='{.spec.clusterIP}')nacosPodIp=`kubectl get po -n dmz nacos-0 -o jsonpath='{.status.podIP}'`getTokenResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/auth/users/login -d "message=true&username=nacos&password=nacos"`token=`echo $getTokenResult | yq -r '.accessToken'`createNsResult=`curl -X POST http://$nacosPodIp:8848/nacos/v1/console/namespaces -d "accessToken=$token&message=true&customNamespaceId=docker&namespaceName=docker&namespaceDesc=docker"`if [[ $createNsResult == "true" ]]; thenecho -e "\033[32mNacos命名空间docker创建成功,请输入配置包的绝对地址:\033[0m"read nacosConfigFileimportResultJson=`curl --location --request POST 'http://$nacosPodIp:8848/nacos/v1/cs/configs?tenant=&accessToken=$token&username=nacos&import=true&namespace=docker&policy=ABORT' --form 'file=@"$nacosConfigFile"'`importResult=`echo $importResultJson | yq -r '.message'`if [[ $importResult == "导入成功" ]]; thenecho -e "\033[32mNacos配置导入完成!可访问https://${YOUR_HOST}:30100/nacos\033[0m"echo -e "\033[32mNacos请参照部署文档按需修改Nacos配置,键入Y/y表示修改完成:\033[0m"read editResultif [[ $editResult == "y" || $editResult == "Y" ]]; thenkubectl delete pod `kubectl get po -n namespace|grep -iEv "web|nacos"|awk '{print$1}'` -n dmzsleep 60 # 歇60秒,等后端服务重新启动,以加载最新配置fielseecho -e "\033[31mNacos配置导入失败,请手动导入!\033[0m"fielseecho -e "\033[31mNacos命名空间创建失败,请手动创建!\033[0m"exit 1fiecho}