简介

在本文中,我们将学习如何使用 Helm 轻松将 Argo CD 设置为应用程序的应用程序,使用 Argo CD 部署应用程序并随后管理这些应用程序。

外形图

  • Argo CD?舵?这些是什么东西?

  • 现在我们知道了它们,我们想用它们做什么?

  • 创建Kubernetes集群(在GKE上)

  • 将 Argo CD 部署到我们的 Kubernetes 集群

  • 将 ArgoCD 连接到我们的 Git 存储库

  • 将Argo CD设置为apps的app

Argo CD?舵?这些是什么东西?

zoz100005 Argo CD

Argo CD是一个声明性的,GitOps用于Kubernetes的持续交付工具。

我们需要 Argo CD,因为应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的和易于理解的。

头盔

Helm帮助您管理 Kubernetes 应用程序 — Helm Charts 帮助您定义、安装和升级甚至是最复杂的 Kubernetes 应用程序。

图表易于创建、版本化、共享和发布。在本教程中,我们主要重用现有图表(包括我们的一个)。要了解如何构建您自己的图表并将其发布到 GitHub 页面,您可以查看这篇文章。

现在我们知道了它们,我们想用它们做什么?

我们想在我们的 Kubernetes 集群上设置 Argo CD,然后按照以下步骤使用它来部署其他应用程序:

  • 创建一个 Kubernetes 集群或使用现有的集群(我们将在本教程中使用GKE,其他的也可以。)

  • 将 Argo CD 部署到我们的 Kubernetes 集群。

  • 将 ArgoCD 连接到我们的 Git 存储库

  • 将Argo CD设置为apps的app

创建Kubernetes集群(在GKE上)

如果您使用的是 Google Cloud Platform (GCP),则可以按照以下说明设置 Kubernetes 集群,否则,请查看AWS或Azure的方法。

登录

$ gcloud 身份验证登录

配置项目信息

$ gcloud config set project <PROJECT_ID>$ gcloud config set compute/region <COMPUTE_REGION>

创建一个集群(在本例中为自动驾驶仪)

$ gcloud 容器集群创建自动演示集群\

--区域我们-west1 \

--projectu003ddev-workloads

此处的集群名称为“demo-cluster”,位于“us-west1”区域,项目为“dev-workloads”。

您可以登录到您的云控制台环境以查看部署进度。

使用 CLI 在 GKE 上创建 Kubernetes 集群

创建集群

注意:也可以使用云环境的 UI 创建集群(但其中的乐趣在哪里?)。

将 Argo CD 部署到我们的 Kubernetes 集群

连接到演示集群

$ gcloud container clusters get-credentials demo-cluster --region us-west1 --project dev-workloads

连接到集群

使用 Helm Chart 安装 ArgoCD

通常,我们会通过应用其清单并遵循其他说明来安装 ArgoCD此处,但相反,我们将使用 Helm 安装 ArgoCD,因为我们喜欢 Helm,它使我们的生活变得超级轻松(查看上面的 Helm 部分中的原因)。

添加 Argo CD Helm 存储库

$ helm repo 添加 argo-cd https://argoproj.github.io/argo-helm

! swz 100102 swz 100103 swz 100101

添加 Argo CD Helm 存储库

安装 Argo CD

$ helm install argocd argo-cd/argo-cd

! swz 100105 swz 100106 swz 100104

安装 Argo 光盘

您可以添加“--create-namespace”标志和“-n <namespace>”以将 Argo CD 安装在新的命名空间中,或者添加“-n <namespace>”以在现有命名空间中执行此操作。

确认安装

$ kubectl 获取部署

$ kubectl 获取服务

! swz 100108 swz 100109 swz 100107

确认 ArgoCD 安装

暴露服务

默认情况下,Argo CD API 服务器不使用外部 IP 公开。要访问 API 服务器,我们可以使用将我们的服务器服务更改为负载均衡器、使用 Ingress 或简单的端口转发。它们都有自己的长处和短处(您可以查看它们)。在本教程中,我们将把我们的服务更改为负载均衡器。

$ kubectl patch svc argocd-server -p '{"spec": {"type": "LoadBalancer"}}'

将 argocd-server 更改为负载均衡器

现在我们可以访问外部 IP 来查看 ArgoCD 的漂亮登陆页面。

Argo CD UI 登录页面

因为KD慢

获取 ArgoCD 的默认密码和登录名(用户名为“admin”)。

$ kubectl 获取秘密 argocd-initial-admin-secret -o jsonpathu003d"{.data.password}" | base64 -d;回声

申请页面

将 ArgoCD 连接到我们的 Git 存储库

我们将在 Github 上建立一个 git 存储库,并将我们的 Argo CD 配置指向此存储库中的目录/文件夹。这里的方向是,为了可维护性,我们可以在这个目录中添加清单,Argo CD 会自动部署这些应用程序。

想象一下,我们添加了一个根应用程序资源,而其他所有应用程序都是该应用程序的子应用程序。根应用程序会为其他应用程序生成清单,ArgoCD 会监视这个应用程序并同步它生成的任何应用程序(不要想太多)。

这样,我们只需要手动添加一个应用程序,没错,就是根应用程序。

设置 Git 存储库

在本教程中,我们将使用现有存储库,但您可以根据需要创建一个新存储库。重要的是为您的所有 Argo CD 清单创建一个文件夹。

Argo CD 目录(空的 YAML 不重要)

将 ArgoCD 连接到我们的 git 存储库

打开存储库管理菜单,然后单击“存储库”

使用方便的方法连接 repo(我们使用 SSH)

! swz 100129 swz 100130 swz 100128

配置 repo 连接信息

要获取 SSH 密钥,请使用:

猫 ~/.ssh/id_rsa

在此处查找有关 SSH的更多信息。

! zwz 100135 zwz 100136 zwz 100134

成功连接repo

将 Argo CD 设置为应用程序的应用程序

创建根应用程序

! zwz 100138 zwz 100139 zwz 100137

应用创建页面

! swz 100141 swz 100142 swz 100140

应用配置

  • 应用程序名称是您自定义的。我们在这里使用 root 是因为,好吧,所有其他应用程序都会从它发展而来。

  • 项目名称是您的 Argo CD 项目名称。默认情况下,它是“默认”。可以定制其他项目以控制活动。

  • 同步策略确定您是否希望此应用自动或手动从其源同步。默认设置为“手动”。

  • 当我们希望 Argo 在 Git 上不再定义资源时删除资源时,选中“prune resources” 选项。默认情况下未选中所有选项。

  • 如果我们希望 Argo 将 Git 中定义的状态强制到集群中,即使集群不同,也可以选中“**self愈”选项。

  • 当我们想向这个应用程序添加一个删除终结器时,**‘设置删除终结器’**选项被选中。这个终结器所做的是删除集群上的应用程序和资源,当它不再在 Git 上定义时。

! swz 100144 swz 100145 swz 100143

应用配置

  • repository URL是我们之前配置的git仓库。

  • Revision 可以是分支或标签。如果我们愿意,我们可以根据我们的痛点为不同的分支或标签设置不同的应用程序。

  • path 是我们希望 Argo 监视清单的地方。由于我们在本例中为它创建了一个文件夹,这就是我们将指向的位置。

! swz 100147 swz 100148 swz 100146

应用配置

  • cluster URL 是我们的目标集群(通常是默认的)。

  • namespace 是我们要使用的目标命名空间。

! zwz 100150 zwz 100151 zwz 100149

新应用

使用 Helm 图表部署其他应用程序

传统上,在 Argo CD 中,我们可以在清单中部署应用程序,其配置与我们运行“kubectl apply”的配置相同。然而,在我们的例子中,我们使用 Helm 图表(因为它更容易)。

这通常是一个 3 步过程:

  • 找到应用程序的 Helm 图表——我们可以在图表存储库中找到清单,例如。Bitnami,神器中心和许多其他(只需谷歌它)。

  • 在我们的“ArgoCD-Apps”文件夹中准备清单。

  • 同步

我们要部署的所有应用程序的步骤都是相同的,除了有时有特殊要求。

示例:部署 Nginx

  • 查找图表

一个标准的 Nginx 图表可以在这里找到。

  • 准备清单

api版本:argoproj.io/v1alpha1

种类:应用

元数据:

名称:nginx

命名空间:默认

终结者:

  • 资源终结器.argocd.argoproj.io

规格:

目的地:

命名空间:nginx

服务器:https://kubernetes.default.svc

项目:默认

资源:

图表:nginx 入口

repoURL:https://helm.nginx.com/stable

目标修订:0.14.0

同步策略:

自动化:

修剪:真

自愈:真

同步选项:

  • 创建命名空间u003d真

Nginx 应用配置

这些属性中的大多数是Kubernetes 部署清单所共有的。

一些提示:

  • 元数据中的命名空间(第 5 行)在 Argo 中使用,而 规范中的命名空间(第 10 行)在 Kubernetes 集群中使用。

  • 使用了 finalizer(第 6 行),因此如果我们从 Git 中删除此应用程序,它不仅会在 Argo 上被删除,而且它的资源也会在 Kubernetes 集群上被删除。

  • source 信息(第 13 行)指向我们的舵图所在的位置,例如。在这种情况下,我们的 Nginx 图表位于(repoURL)https://helm.nginx.com/stable,其中名称是'nginx-ingress'和最新的撰写本文时的版本是“0.14.0”。有时版本是动态值,例如。头。

! swz 100177 swz 100178 swz 100176

来自 Nginx Helm 图表的源信息

  • 同步

我们的同步是自动完成的,因为我们是这样设置的。

! swz 100180 swz 100181 swz 100179

添加清单后部署的 Nginx

点击“nginx”应用

Nginx 部署了所有资源

我们可以使用网络视图查看流量(网络)信息

! swz 100186 swz 100187 swz 100185

Nginx 网络视图

我们可以访问负载均衡器的IP地址

Nginx 入口

导航回应用程序并单击根应用程序

根应用程序

从上图中,我们可以看到“nginx”应用程序被表示为“root”应用程序的子级。这是“应用程序的应用程序”概念的基本表示。

从现在开始,您的部署过程基本上是自动驾驶(在某种程度上)。我们将继续做的就是添加清单,如果需要的话,也许可以自定义它们。让我们添加 Grafana 和 Prometheus 应用程序。

示例 2:部署 Grafana

  • 查找图表

[

Grafana 社区 Kubernetes Helm 图表

代码按原样提供,不提供任何保证。必须安装 Helm 才能使用图表。请参考 Helm 的...

grafana.github.io

](https://grafana.github.io/helm-charts)

  • 准备清单

api版本:argoproj.io/v1alpha1

种类:应用

元数据:

在家里:格拉法纳

命名空间:默认

终结者:

  • 资源终结器.argocd.argoproj.io

规格:

目的地:

命名空间:监控

服务器:https://kubernetes.default.svc

项目:默认

资源:

图表:格拉法纳

repoURL:https://grafana.github.io/helm-charts

目标修订:6.32.11

同步策略:

自动化:

修剪:真

自愈:真

同步选项:

  • 创建命名空间u003d真
  • 同步

Grafana 应用已创建

已创建 Grafana 资源

Grafana 作为根应用程序的子项创建

而已。让我们为 Prometheus 做同样的事情(在按照以下说明操作之前,您可以尝试自己做这个)。

_ 示例 3:部署 Prometheus _

  • 查找图表

[

Prometheus 社区 Kubernetes Helm Charts

此功能处于测试阶段,可能会发生变化。代码按原样提供,不作任何保证。测试版功能...

prometheus-community.github.io

](https://prometheus-community.github.io/helm-charts/)

  • 准备清单

api版本:argoproj.io/v1alpha1

种类:应用

元数据:

名称:普罗米修斯

命名空间:默认

终结者:

  • 资源终结器.argocd.argoproj.io

规格:

目的地:

命名空间:监控

服务器:https://kubernetes.default.svc

项目:默认

资源:

图表:普罗米修斯

repoURL:https://prometheus-community.github.io/helm-charts/

目标修订:15.12.0

同步策略:

自动化:

修剪:真

自愈:真

同步选项:

  • 创建命名空间u003d真
  • 同步

已创建 Prometheus 应用

已创建 Prometheus 资源

这里的错误是因为我们没有 GKE 自动驾驶权限,不要打扰。

Prometheus 创建为根应用程序的子级

在这篇文章中,我们能够学到:

  • 如何使用 Helm 在 Kubernetes 集群上设置 Argo CD。

  • Argo CD上的基本配置。

  • 如何将 Argo CD 连接到我们的 Github 存储库。

  • 如何使用 Argo CD 快速部署其他应用程序,且不易出错。

TBH,一种或另一种方式,有些东西会起作用。 — 蒂莫西·奥拉莱克

建议探索的东西:

  • 以 GitOps 方式自定义资源属性(通过自定义清单)。例如。向我们的 Grafana 应用程序添加负载均衡器,以便我们可以从外部访问它。

  • 其他部署方式如。基于标签的部署。

  • 使用其他“种类”的部署,例如。 “进入”。

参考文献

  • https://argo-cd.readthedocs.io/en/stable/

  • https://helm.sh/

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐