ArgoCD 多服务迁移

文章目录

概述

​ 我进行服务迁移的主要目的是建立一个备用集群,以防止主集群宕机时,流量可以迅速切换到备用集群,确保服务的持续运行和高可用性。

为什么选择ArgoCD?

⚡️: 使用 ArgoCD 配合 Helm 部署 Kubernetes 服务非常方便,所有的应用状态都存储在 Git 中,可以实现版本控制和变更追溯,保证配置的一致性和可追溯性。并且每当检测到 Git 仓库中的变更时,ArgoCD 会自动将这些变更应用到集群中。

🏴: 解决ArgoCD自动同步延迟问题

迁移

当需要将服务迁移到其他集群时,如果服务数量多达几百甚至几千个,一个个部署就会变得非常麻烦。之前我们使用 ArgoCD 的 UI 进行服务部署,这种方法需要逐个服务地手动操作(当时服务逐步迁至K8S,所以不影响),效率较低且容易出错。

​ 我们可以通过 kubectl 命令拉取所有的应用配置,并以 YAML 格式打印出来,去掉 status 部分,因为这部分只是一个状态栏,对我们服务的部署没有什么作用。将所有项目的配置汇总到一个 YAML 文件中,然后在新的集群中通过 kubectl apply 命令一次性部署所有服务。

具体步骤已整理为脚本如下:

#!/bin/bash

# 列出所有服务
services=$(kubectl get deploy -n devel | grep -v NAME | awk '{print $1}')

# 输出文件
output_file="all_argocd_application.yaml"

# 如果输出文件存在,则清除该文件
: >> "$output_file"

# 提出status部分
for service in $services; do
    echo "Fetching YAML for service: $service"

    raw_yaml=$(kubectl get application -n argo-cd "${service}" -o yaml)

    clean_yaml=$(echo "$raw_yaml" | yq 'del(.status)')

    echo "$clean_yaml" >> "$output_file"
    echo -e "\n---\n" >> "$output_file"
done

echo "All YAMLs have been fetched and stored in $output_file"

⚡️: yq 是一个用于处理 YAML 文件的命令行工具,它类似于处理 JSON 文件的 jqyq 可以用于查看、编辑、删除和转换 YAML 数据,非常适合用于脚本化操作或自动化任务。

这里要注意服务类型可能不止 Deployment,根据实际情况调整。

将整理后的 YAML 文件应用到新集群: 连接到新的 Kubernetes 集群,并运行以下命令一次性部署所有服务:

> kubectl apply -f all_argocd_application.yaml

总结

通过这种方式,可以大大简化服务迁移的过程,无需手动一个一个部署,节省了大量时间和精力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一名技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值