增量同步资源 星解语

#!/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
posted @ 2024-12-31 20:43  星解语  阅读(11)  评论(0)    收藏  举报