Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >外包精通--在 ArgoCD 中加载现有的 Helm 应用程序

外包精通--在 ArgoCD 中加载现有的 Helm 应用程序

原创
作者头像
Godev
修改于 2023-07-31 11:31:50
修改于 2023-07-31 11:31:50
3.3K0
举报
文章被收录于专栏:GodevGodev

GitOps 是为云原生应用程序实施持续部署的推荐方式。它通过在部署应用程序时最大限度地减少手动错误来帮助组织,因为 Git 将是唯一的真实来源。因此,可以轻松地跨团队跟踪更改。

本文旨在帮助那些希望通过 ArgoCD 在已经部署并在 Kubernetes 集群中运行的应用程序上采用 GitOps 文化的工程师。

由于 GitOps 相对较新,人们可能会对如何在不重新部署其微服务的情况下将现有应用程序载入 ArgoCD 产生疑问。让我们看看如何解决这个问题。

Prerequisites

  • Kubernetes cluster
  • Helm v3

Application via Helm repository

在 ArgoCD 中,您可以通过两种方式安装基于 Helm 的应用程序。其中之一是直接通过远程 Helm 存储库安装应用程序。这可以是 Gitlab 的 Helm 存储库、自托管选项(如 Chartmusem)或 GitHub Pages。

让我们使用 helm 存储库安装应用程序。在通过 ArgoCD 安装它之前,此步骤尝试模拟已经在通过 helm install 命令部署的集群中运行的应用程序。nginx-ingress

代码语言:txt
AI代码解释
复制
#add the helm repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

#install the helm chart
helm install ingress-nginx ingress-nginx/ingress-nginx --version 4.4.0 --set controller.service.type=ClusterIP

#kubectl get pod
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-6f7bd4bcfb-dp57x   1/1     Running   0          3m50s

Pod 运行后,让我们将 ArgoCD 安装到我们的集群中。

代码语言:txt
AI代码解释
复制
#add the helm repo
helm repo add argo https://argoproj.github.io/argo-helm

#install the helm chart
helm install argocd argo/argo-cd --set-string configs.params."server\.disable\.auth"=true --version 5.12.0 --create-namespace -n argocd

验证 ArgoCD pod 正在运行并处于 READY 状态。

代码语言:txt
AI代码解释
复制
kubectl get pod -n argocd

NAME                                                READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                     1/1     Running   0          14m
argocd-applicationset-controller-6cb8549cd9-ms2tr   1/1     Running   0          14m
argocd-dex-server-77b996879b-j2zd8                  1/1     Running   0          14m
argocd-notifications-controller-6456d4b685-kb6hn    1/1     Running   0          14m
argocd-redis-cdf4df6bc-xg7v6                        1/1     Running   0          14m
argocd-repo-server-8b9dd576b-xfv8s                  1/1     Running   0          14m
argocd-server-b9f6c4ccd-7vdjz                       1/1     Running   0          14m

现在 ArgoCD 正在运行,让我们为我们的应用程序创建 ArgoCD 应用程序清单。

代码语言:txt
AI代码解释
复制
cat <<EOF >> nginx-ingress.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: ingress-nginx
  namespace: argocd
spec:
  project: default
  destination:
    namespace: default  #update namespace name if you wish
    name: in-cluster   #update cluster name if its different
  source:
    repoURL: https://kubernetes.github.io/ingress-nginx
    targetRevision: "4.4.0"
    chart: ingress-nginx
    helm:
      values: |
        controller:
          service:
            type: ClusterIP    
EOF

上述清单中有几点需要注意:

  • 如果您是 ArgoCD 的新手并且不了解应用程序清单的结构,我建议您在此处阅读有关 ArgoCD 应用程序的信息。
  • 您希望在默认 helm 值上覆盖的任何 helm 自定义值都需要添加到helm 值部分。
  • 将来,每当您需要升级应用程序/图表版本时,您只需更新targetRevisionhelm 图表版本的 git 标签,ArgoCD 就会拉取该图表并应用更改。这可以通过编辑此文件或通过 ArgoCD UI 更新标签来完成。
  • [**metadata.name**](<http://metadata.name>)应该与 helm 版本名称完全匹配。否则这将被视为新版本。

这里的主要思想是通过 ArgoCD 指定的 helm 值配置应该与helm 安装或升级时指定的配置(值文件)完全匹配。

例如,在 helm 安装期间,如果服务类型是ClusterIP,ArgoCD 应用程序清单也应该具有该配置。如果您不指定,ArgoCD 将覆盖默认图表值,这将导致停机。

这主要需要处理依赖的第三方图表,例如 MongoDBRedis 等。

好的。让我们应用我们使用命令创建的清单。

代码语言:txt
AI代码解释
复制
kubectl apply -f nginx-ingress.yaml

#application.argoproj.io/my-ingress-nginx created

要访问 Argo UI,让端口转发 argocd-server 服务并在浏览器中打开:https://localhost:8080

代码语言:txt
AI代码解释
复制
kubectl port-forward service/argocd-server 8080:8080 -n argocd

现在,如果您转到 nginx-ingress 应用程序,它的状态是 OutOfSync。

的具体应用中,对于几乎所有的 Kubernetes 资源,都需要来自 ArgoCD 端的注解。这就是 ArgoCD 跟踪它需要跟踪的资源的方式。您可以在此处的文档中阅读有关此注释的更多信息。

让我们的sync应用程序将在所有资源上应用该 ArgoCD 注释。

同步后,您可以看到没有资源被删除或重新创建。

代码语言:txt
AI代码解释
复制
kubectl get all -l app.kubernetes.io/name=ingress-nginx

NAME                                            READY   STATUS    RESTARTS   AGE
pod/ingress-nginx-controller-6f7bd4bcfb-dp57x   1/1     Running   0          21m

NAME                                         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/ingress-nginx-controller             ClusterIP   10.96.156.40   <none>        80/TCP,443/TCP   21m
service/ingress-nginx-controller-admission   ClusterIP   10.96.118.65   <none>        443/TCP          21m

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           21m

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-6f7bd4bcfb   1         1         1       21m

通过 Git 存储库的应用程序

如果您的 helm chart 未托管在 helm 存储库中,而是存储在 GitHub 或任何其他 SCM 工具(如 GitLab 或 BitBucket)中,则也可以轻松完成该 helm 应用程序的迁移。

分叉示例应用程序存储库:https://github.com/kernelpod/podinfo

克隆存储库并将 values.yaml 中的 replicacount 从 1 更新为 3。

代码语言:txt
AI代码解释
复制
#clone your fork
git clone https://github.com/kernelpod/podinfo && cd podinfo/charts/podinfo

#update  replcaCount to 3
sed -i -e '/replicaCount/ s/: .*/: 3/' values.yaml

将此更改推送到您的 GitHub 存储库。

通过 helm 部署 helm 图表。

代码语言:txt
AI代码解释
复制
helm install podinfo-git . -f values.yaml -n default

创建一个 ArgoCD 应用程序清单,它将指向您的存储库和存储 helm chart 的存储库内的路径。

代码语言:txt
AI代码解释
复制
cat <<EOF >> podinfo-app-git.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: podinfo-git
  namespace: argocd
spec:
  project: default  
  destination:
    namespace: default  #update namespace name if you wish
    name: in-cluster   #update cluster name if its different
  source:
    repoURL: 'https://github.com/tanmay-bhat/podinfo'  #replace with your username
    path: charts/podinfo
    targetRevision: HEAD
    helm:
      valueFiles:
        - values.yaml       #any custom value file you want to apply.
EOF

ArgoCD 会自动检测到在您指定的路径中,应用程序必须作为 Helm 图表而不是通过 Kubernetes 清单文件加载。它通过在您指定的路径中扫描来了解该类型以检测应用程序的种类。在我的例子中是在存储库中。您可以在此处阅读有关自动工具检测的更多信息。Chart.yaml ``chart.yaml``charts/podinfo

将您创建的清单应用到argocd命名空间中。

代码语言:txt
AI代码解释
复制
kubectl apply -f podinfo-app-git.yaml -n argocd               

#application.argoproj.io/podinfo configured

就像之前的迁移一样,这个应用程序也会与注释更改更新不同步。Sync审查后的申请。App Diff

从上面的快照中可以看出,没有重新创建 pod 和其他资源。

如果你通过 UI查看这个,我们可以看到它已将配置同步到我们的 GitHub 存储库。App Details

Gotchas

  • 我没有在 ArgoCD 应用程序定义中添加自动同步选项,因为最好查看应用程序的差异、审查然后同步。
  • 某些应用程序(如 Grafana)在其模板定义中有。
代码语言:txt
复制

checksum/secret

代码语言:txt
复制
  • 迁移到 ArgoCD 时,需要应用其自己的注释,如上所示。
  • 一旦该注解应用于秘密,其校验和就会发生变化,并且该校验和将在部署中得到更新
  • 因此,对于像这样的应用程序配置,pod 将被重新创建。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 GitLab CI 与 Argo CD 进行 GitOps 实践
在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,在网上也可以找到很多关于它的资源,但是关于 GitOps 相关的工作流实践的示例却并不多见,我们这里就将详细介绍一个使用示例,希望对大家实践 GitOps 有所帮助。
我是阳明
2020/07/17
5.9K0
使用 GitLab CI 与 Argo CD 进行 GitOps 实践
使用 Argo CD 进行 GitOps 流水线改造
Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署工具。Argo CD 可在 Git 存储库更改时自动同步和部署应用程序。
我是阳明
2023/09/25
1.9K0
使用 Argo CD 进行 GitOps 流水线改造
使用 Argo CD 管理 Helm/helmfiles Chart包
Argo CD 是一个用于部署和管理 Kubernetes 应用程序的开源工具。本文将介绍如何使用 Argo CD 部署和管理 Helm Charts、Helmfiles 以及来自 Git 仓库的 Helm Charts。
用户10763634
2024/03/20
1.5K0
Argo CD 保姆级入门教程
❝原文链接🔗:https://icloudnative.io/posts/getting-started-with-argocd/ 请复制粘贴到浏览器打开 在上一篇『👉GitOps 介绍[1]』中,我介绍了什么是 GitOps,包括 GitOps 的原则和优势,以及 GitOps 与 DevOps 的区别。本文将介绍用于实施 GitOps 的工具 Argo CD。 Argo CD 是以 Kubernetes 作为基础设施,遵循声明式 GitOps 理念的持续交付(continuous delivery, C
米开朗基杨
2022/11/07
4.7K0
Argo CD 保姆级入门教程
使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes
本指南将引导您在 Kubernetes 集群上设置渐进式交付 GitOps 管道。
为少
2021/05/27
1.3K0
使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes
外包精通--官网一步一步教你Argocd GuestBook Demo
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
Godev
2023/05/04
9100
使用 Argo CD 的 UI 界面可视化管理 Flux 应用?
Flux 项目原本提供了一个 Web UI 来管理 Flux 集群,但该项目已经存档,FluxCD 组织不再开发,所以我们这里不再介绍了,如果你想使用 Web UI 来管理 Flux 集群,可以使用 Weaveworks 提供的 weave-gitops(https://github.com/weaveworks/weave-gitops) 项目,该下面为 Flux 提供了一个免费的开源 GUI。
我是阳明
2023/09/28
6410
使用 Argo CD 的 UI 界面可视化管理 Flux 应用?
argocd部署
注意事项:默认下载的是最新版argocd,安装argocd时,务必参阅支持的k8s版本列表,否则会出现安装失败pod运行异常的情况。 参考文档:https://argo-cd.readthedocs.io/en/stable/operator-manual/installation/#supported-versions 由于k8s集群版本为1.23.16。因此安装的argo cd版本为2.4.28,yaml文件地址:https://github.com/argoproj/argo-cd/blob/v2.4.28/manifests/install.yaml 执行成功后会在argocd的namespace下创建如下资源。
章工运维
2024/03/14
1940
详解kubernetes的企业级监控(付文档)
• request(需求资源):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod • limit(资源限额):即运行Pod期间,可能内存使用量会增加,可以在yaml文件中设定最多能使用多少内存配置资源限额
IT运维技术圈
2022/10/24
1.2K0
基于ArgoCD的GitOps实践
GitOps 是 Weaveworks 提出的一种持续交付方式,它的核心思想是将应用系统的声明性基础架构 和应用程序存放在 Git 版本库中。将 Git 作为交付流水线的核心,每个开发人员都可以提交拉取请求 (Pull Request)并使用 Git 来加速和简化 Kubernetes 的应用程序部署和运维任务。通过使用像 Git 这样的简单工具,开发人员可以更高效地将注意力集中在创建新功能而不是运维相关任务上(例如,应用系统安装、配置、迁移等)。
100000798482
2023/03/19
1.4K0
基于ArgoCD的GitOps实践
ArgoCD 简明教程
Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,它的配置和使用非常简单,并且自带一个简单易用的 Dashboard 页面,并且支持多种配置管理/模板工具(例如 Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)。Argo CD 被实现为一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如 Git 仓库中的配置)进行比较,在 Git 仓库更改时自动同步和部署应用程序。
Se7en258
2021/12/27
3.1K0
ArgoCD 简明教程
Argo CD 实践教程 04
在本节中,我们将深入描述Argo CD的架构,并将深入研究Argo CD的核心组件。最后,我们将在本地Kubernetes集群中运行Argo CD,并运行一些示例,以获得更好的实践经验。
拿我格子衫来
2023/08/24
6260
Argo CD 实践教程 04
k8s 通过helm发布应用
在红帽系的Linux中我们使用yum来管理RPM包,类似的,在K8s中我们可以使用helm来管理资源对象(Deployment、Service、Ingress...)实现K8s中应用的快速发布、升级、维护和分享。helm 官方文档[1]
你大哥
2022/03/14
6490
k8s 通过helm发布应用
Argo CD系列视频图文版之安装 argocd 并运行示例
本期视频,我们来在试验环境中安装 ArgoCD,然后跑个官方 demo,带大家初步感受下 ArgoCD 的功能。
LinuxSuRen
2021/12/28
1.6K0
Argo CD系列视频图文版之安装 argocd 并运行示例
ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成
ArgoCD 是一种 GitOps 持续交付工具,专为 Kubernetes 设计。它能够自动同步 Git 仓库中的声明性配置,并将其应用到 Kubernetes 集群中。本文将介绍 ArgoCD 的架构、安装步骤,以及如何结合 Helm 和 Kustomize 进行 Kubernetes 自动化部署。
连连LL
2025/02/08
2610
ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成
基础设施即代码·3分钟搭建一套本地K8s集群
本文是第七期DevOps训练营,开营环境准备内容。通过terraform+kind进行本地测试环境Kubernetes集群部署,部署ArgoCD来对后续DevOps工具进行交付。
DevOps云学堂
2023/08/22
6350
基础设施即代码·3分钟搭建一套本地K8s集群
ingress通过daemonSet,nodeSelector,hostNetwork方式部署
首先我们需要在k8s集群中准备边缘节点,用来部署ingress(需要对边缘节点打污点或者使用亲和性/反亲和性),如果是私有化部署,需要对ingress做高可用,如果资源充足,还可以再做一次负载均衡,这里在本地测试的话,直接在其中一个node上启动一个就可以了
dogfei
2020/08/19
3.9K0
tke上如何通过jenkins和argocd完成代码自动化发布
CI/CD是大部分企业非常重要的一部分,也是必备的,相信大家都不陌生,每个企业都有自己的CI/CD,今天我们讲讲如何通过jenkins和argocd来实现CI/CD。
聂伟星
2022/05/10
2.5K1
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
chart看作linux中rpm包,repository看作repo仓库,release就是我们的yum install安装启动后的软件。
秋意零
2022/05/12
1.7K0
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
使用 NGINX ingress controller 和 Flagger 来实现 canary deployments
Flagger 是一个渐进式的交付工具,可以为运行在 Kubernetes 上的应用程序自动发布流程。它通过逐步将流量转移到新版本,同时测量指标和运行一致性测试,降低了在生产中引入新软件版本的风险.
philentso
2022/12/21
7240
相关推荐
使用 GitLab CI 与 Argo CD 进行 GitOps 实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档