增量同步资源 星解语
#!/bin/bash
# 定义集群和它们对应的命名空间
declare -A CLUSTER_NAMESPACES
CLUSTER_NAMESPACES["cluster1"]="default"
#CLUSTER_NAMESPACES["cluster2"]="default logging ncc"
#CLUSTER_NAMESPACES["cluster3"]="default soc dp"
#CLUSTER_NAMESPACES["cluster4"]="default npp"
declare -A SRC_CLUSTER_CONFIG
declare -A TAR_CLUSTER_CONFIG
SRC_CLUSTER_CONFIG["cluster1"]="./cce123/config"
TAR_CLUSTER_CONFIG["cluster1"]="./cce121/config"
# 定义需要同步的资源类型
RESOURCE_TYPES=("deployments" "services")
# 遍历每个集群
for CLUSTER in "${!CLUSTER_NAMESPACES[@]}"; do
# 获取当前集群的命名空间列表
NAMESPACES=${CLUSTER_NAMESPACES[$CLUSTER]}
SRC_CONFIG=${SRC_CLUSTER_CONFIG[$CLUSTER]}
TAR_CONFIG=${TAR_CLUSTER_CONFIG[$CLUSTER]}
# 遍历每个命名空间
for NS in $NAMESPACES; do
echo "正在同步集群[$CLUSTER] 命名空间[$NS] 的资源[$RESOURCE_TYPES]..."
# 遍历每种资源类型(deployment 和 service)
for RESOURCE in "${RESOURCE_TYPES[@]}"; do
# 获取当前命名空间下的每个资源
RESOURCES=$(kubectl --kubeconfig=$SRC_CONFIG get $RESOURCE -n $NS -o jsonpath='{.items[*].metadata.name}')
for RESOURCE_NAME in $RESOURCES; do
echo "正在同步命名空间[$NS]的资源[$RESOURCE/$RESOURCE_NAME]..."
# 获取每个资源的 YAML 配置,并删除不需要的字段
kubectl --kubeconfig=$SRC_CONFIG get $RESOURCE $RESOURCE_NAME -n $NS -o yaml | \
# 对 Deployment 资源,添加 imagePullSecrets 字段
# 对 Service 资源,删除 clusterIP 和 clusterIPs 字段
if [ "$RESOURCE" == "deployments" ]; then
yq eval '.spec.template.spec.imagePullSecrets = [{"name": "secret-image"}]' - | \
yq eval 'del(.status, .metadata.uid, .metadata.creationTimestamp, .metadata.resourceVersion)' - | \
kubectl --kubeconfig=$TAR_CONFIG apply -f -
elif [ "$RESOURCE" == "services" ]; then
yq eval 'del(.spec.clusterIP, .spec.clusterIPs)' - | \
yq eval 'del(.status, .metadata.uid, .metadata.creationTimestamp, .metadata.resourceVersion)' - | \
kubectl --kubeconfig=$TAR_CONFIG apply -f -
fi
# 检查同步操作是否成功
if [ $? -eq 0 ]; then
echo "success: 命名空间[$NS]下资源[$RESOURCE/$RESOURCE_NAME]同步成功!"
else
echo "error: 命名空间[$NS]下资源[$RESOURCE/$RESOURCE_NAME]同步失败!"
fi
done
done
done
done
echo "所有同步操作完成!"
docker 自动登录
#!/bin/bash
# Docker Registry 地址
SRC_REGISTRY="1.1.1.1:8800"
# 用户名和密码
USERNAME1="XXX"
PASSWORD1="XXXX"
USERNAME2="XXX"
PASSWORD2="XXXX"
# 根据传入的参数选择不同的用户名和密码
if [ "$1" -eq 1 ]; then
USERNAME=$USERNAME1
PASSWORD=$PASSWORD1
else
USERNAME=$USERNAME2
PASSWORD=$PASSWORD2
fi
# 使用 expect 模拟交互式登录过程
expect <<EOF
spawn docker login $SRC_REGISTRY
expect "Username:"
send "$USERNAME\r"
expect "Password:"
send "$PASSWORD\r"
expect eof
EOF
# 检查登录是否成功
if [ $? -eq 0 ]; then
echo "登录成功!"
else
echo "登录失败!"
fi
docker 登出
docker logout xxx
本文来自博客园,作者:星解语,转载请注明原文链接:https://www.cnblogs.com/xxjyy/p/18644762

浙公网安备 33010602011771号