使用 Argo CD GitOps 和 Helm Charts 持续部署 Kubernetes 应用程序。
简介
在本文中,我们将学习如何使用 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/
更多推荐
所有评论(0)