应用中心迁移应用至ACKOne GitOps实践向导

简介: 本文为您介绍如何从应用中心迁移应用至ACKOne GitOps。

本部分文档只适用于迁移以Git为源的应用中心应用,编排模板为源的应用迁移问题移步 Q&A部分。


前置条件

(1) 已创建ACK One多集群管理实例, 可参考 开启多集群管理

(2) ACK One多集群管理实例中已接入子集群,可参考 管理关联集群

(3) 已在ACk One多集群管理实例中开启GitOps, 可参考 GitOps使用快速入门


步骤一: 下载argocd CLI并访问应用中心主控实例

(1) 访问ArgoCD,下载安装最新的argocd CLI

(2) 使用argocd CLI 访问应用中心主控实例

导入环境变量:

$ export ARGOCD_OPTS='--port-forward-namespace appcenter --plaintext'

查看应用列表,示例如下:

$ argocd app list
NAME                   CLUSTER                     NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                              PATH  TARGET
appcenter/gitops-demo  https://192.168.0.244:6443  gitops     default  Synced  Healthy  <none>      <none>      git@github.com:haoshuwei/gitops-demo-private.git  helm  main

获取需要迁移的应用名称为gitops-demo, 使用的repo为git@github.com:haoshuwei/gitops-demo-private.git,应用部署在目标集群 https://192.168.0.244:6443

步骤二: 导出应用Manifest

(1) 导出应用Application CR Manifests,示例如下:

$ kubectl -n appcenter get application gitops-demo -oyaml > gitops-demo.yaml

(2) 导出应用使用的repo secret,示例如下:

查看repo secret列表:

$ kubectl -n appcenter get secret -l argocd.argoproj.io/secret-type=repository
NAME              TYPE     DATA   AGE
repo-3914117193   Opaque   5      50m

根据步骤一中应用gitops-demo使用的repo url为git@github.com:haoshuwei/gitops-demo-private.git,确认需要导出的repo secret名称,查看repo secret信息如下所示:

$ kubectl -n appcenter get secret repo-3914117193 -o jsonpath="{.data.url}" | base64 -d
git@github.com:haoshuwei/gitops-demo-private.git

确认并导出名称为repo-3914117193的repo secret:

$ kubectl -n appcenter get secret repo-3914117193 -oyaml > repo-3914117193.yaml

步骤三: 下载argocd CLI并访问ACK One主控实例

(1) 请参考 通过ArgoCD CLI方式访问ACK One GitOps

(2) 查看子集群信息,示例如下:

$ argocd cluster list
SERVER                          NAME                                                      VERSION  STATUS      MESSAGE                                                  PROJECT
https://<apiserver>:6443        <clusterid>-ack-production-oversea  1.24+    Successful
https://kubernetes.default.svc  in-cluster                                                         Unknown     Cluster has no applications and is not being monitored.

步骤四: 导入应用Manifest到ACK One主控实例

(1)修改步骤二中导出的gitops-demo.yaml 和repo-3914117193.yaml 文件:

请确认gitops-demo.yaml 中的 {.spec.destination.server} server地址与步骤三ACK One实例中列出的目标集群的server地址是否一致(通常是公网地址或内网地址的区别),若不一致,则执行以下shell命令进行修改,示例如下:

$ sed -i "s/192.168.0.244/<请替换为ACK One实例中集群server ip地址>/g" gitops-demo.yaml

修改 gitops-demo.yaml 中的namespace 为argocd,示例如下:

$ sed -i "s/namespace: appcenter/namespace: argocd/g" gitops-demo.yaml

修改 repo-3914117193.yaml 中的namespace 为argocd,示例如下:

$ sed -i "s/namespace: appcenter/namespace: argocd/g" repo-3914117193.yaml

(2) 导入repo Manifests到ACK One主控实例

导入 repo-3914117193.yaml

$ kubectl apply -f repo-3914117193.yaml

查看repo是否已导入,并确认STATUS为Successful(表示连接repo成功):

$ argocd repo list
TYPE  NAME                 REPO                                              INSECURE  OCI    LFS    CREDS  STATUS      MESSAGE  PROJECT
git   gitops-demo-private  git@github.com:haoshuwei/gitops-demo-private.git  true      false  false  false  Successful

(3) 导入application Manifests到ACK One主控实例

导入 gitops-demo.yaml

$ kubectl apply -f gitops-demo.yaml

查看application列表,并确认应用状态是否与应用中心一致:

$ argocd app list
NAME         CLUSTER                   NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                              PATH  TARGET
gitops-demo  https://<apiserver>:6443  gitops     default  Synced  Healthy  <none>      <none>      git@github.com:haoshuwei/gitops-demo-private.git  helm  main

步骤五:从应用中心移除应用

在应用中心主控实例中,通过以下命令移除Application:

$ argocd app delete gitops-demo --cascade=false

注意: 必须要使用参数--cascade=false,否则会导致实际运行在目标集群中的k8s资源跟随该Application一起被删除。


至此,您已成功完成应用中心迁移应用至ACKOne GitOps实践向导。


Q&A

(1)编排模版源的应用如何迁移?

ACK One GitOps跟随Argocd开源社区进行功能迭代,只支持以Git为源的应用创建和管理。 如果您在应用中心的应用使用编排模板为源,则需要先手动将编排模板迁移为Git源,再使用Git源在ACK One GitOps系统中发布该应用,最后按照步骤五移除应用中心应用。

(2)编排模版源的应用触发器如何替换?

应用中心触发器只支持编排模版源的应用,在ACK One GitOps系统中,Git源的应用则使用image-updater自动更新应用镜像。如何使用image-updater自动更新应用镜像请参考文档:https://developer.aliyun.com/article/1122570?groupCode=kubernetes

(3)应用中心使用image-updater自动更新的应用如何迁移ACK One GitOps?

完成本文步骤一到步骤五的迁移步骤后,还需要在ACK One主控实例中配置访问ACR和Git仓库的凭证:

配置访问ACR的凭证:

$ kubectl -n argocd apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: acr
type: Opaque
stringData:
  acr: <your_username>:<your_password>  # 将<your_username>:<your_password>更换为您自己的容器镜像仓库访问凭证。
EOF

配置访问Git仓库的凭证:

$ kubectl -n argocd create secret generic git-creds \
--from-literal=username=<your_username> \
--from-literal=password=<your_password>

更新应用Application中的annotaion argocd-image-updater.argoproj.io/write-back-method,示例:

metadata:
  annotations:
    argocd-image-updater.argoproj.io/write-back-method: git:secret:argocd/git-creds

即更新  git:secret:<modify from appcenter to argocd>/git-creds 中的命名空间appcenter为argocd


相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
XML JSON Java
SpringMVC中HttpMessageConverter使用实践详解
SpringMVC中HttpMessageConverter使用实践详解
1060 0
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
1519 3
|
监控 负载均衡 分布式数据库
Region 的分裂和合并是如何影响 Region 性能的
Region 的分裂和合并是如何影响 Region 性能的
|
机器学习/深度学习 存储 自动驾驶
《深度剖析:设计最优深度Q网络结构,精准逼近Q值函数》
深度Q网络(DQN)结合深度学习与Q学习,通过神经网络逼近Q值函数,指导智能体在不同状态下选择最优动作。其核心优势在于解决高维状态空间下的决策问题,利用经验回放机制和目标网络提高训练稳定性。设计高效DQN需考虑输入层、隐藏层及输出层结构,针对不同任务选择合适的网络架构,如CNN处理图像数据,MLP应对数值型状态。案例分析显示,在CartPole和Atari游戏中,DQN通过优化网络结构和策略,取得了显著效果。未来研究将聚焦于更智能的网络设计和跨领域技术融合,拓展DQN的应用范围。
900 14
|
开发框架 .NET C#
C# 一分钟浅谈:第一个 C# 控制台应用程序
【9月更文挑战第1天】C# 是一种现代化的、面向对象的编程语言,广泛应用于桌面应用、Web 应用和游戏开发等领域。本文详细介绍如何创建第一个 C# 控制台应用程序,包括使用 Visual Studio 和 .NET SDK 的步骤,并解析常见问题及其解决方法,如控制台窗口立即关闭、编译错误和运行时错误等。通过实践,你将掌握 C# 控制台应用的基础知识,为进一步学习打下坚实基础。
688 49
|
存储 编解码 算法
视频编码格式和封装格式有什么关系?相机常见的编码格式有哪些?
视频编码格式与封装格式的关系类似于酒与酒瓶的关系。编码格式是视频的核心内容,如H.264、H.265等,而封装格式则是将视频、音频、字幕等集成在一起的外壳,如MP4、MKV等。不同的封装格式适应不同的播放需求,例如MP4兼容性最好,MKV适合网络传播。
|
关系型数据库 测试技术 API
SqlAlchemy 2.0 中文文档(二十八)(3)
SqlAlchemy 2.0 中文文档(二十八)
380 1
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之遇到报错:Nested transactions are not supported,该怎么办
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。
441 1
|
前端开发 芯片 索引
技术好文共享:色彩之RGB和灰阶
技术好文共享:色彩之RGB和灰阶
1791 0