【DevOps】使用Argo和Azure Kubernetes服务实现GitOps方案
推荐超级课程:
@TOC
什么是GitOps
首先,什么是GitOps?它与DevOps相同吗?我很高兴你问了这个问题。让我们先回顾一下什么是DevOps:
“DevOps是人员、流程和产品的结合,以实现向最终用户持续交付价值。” ~ Donovan Brown
Donovan说得最好 - DevOps是几个关键因素的组合:人员、流程和产品 - 但它始于人员。开始使用DevOps涉及文化转变,这意味着它远不止是一些流行语,如敏捷、持续集成、持续部署、自动化等。虽然这些流行语有其位置,并且是必需的,但真正拥抱DevOps意味着在你的工程团队之间创建DevOps文化 - 这包括开发人员、运维、安全等。
GitOps与DevOps不同,因为它专注于使用Git改进基础设施和应用程序配置管理的实践。如果你是云原生和开发领域的初学者,Git是一个开源的分布式版本控制系统
,使用所谓的存储库。存储库是项目内部隐藏的.git/文件夹。这个存储库将跟踪对项目所做的所有更改,因此随着项目的增长,创建了一个历史记录。
总的来说,DevOps与GitOps的TL;DR - 一个是关于你工程团队之间的文化转变,包括你可以用来进一步推动这种转变的实践和产品,另一个是关于在使用Git进行开发时可以实施的实践。
什么是Argo
其次,什么是Argo?同样,我很高兴你问了这个问题。简单来说,Argo是一个声明式的GitOps持续交付工具,专门为Kubernetes设计。Argo依赖于Git作为定义应用程序状态的“真相来源”;本质上,你正在声明你想要的应用程序的世界状态,Argo将确保它是这样的,或者如果它不是这样(即不同步),它会提醒你。
使用Argo和Kubernetes
如何在Azure中开始使用Argo和Kubernetes?相当容易。如果你已经有了一个Azure Kubernetes (AKS)集群,你可以简单地部署Argo到现有Kubernetes集群中的命名空间;如果你没有现有的AKS集群,你可以通过遵循这里的文档 来创建一个。
先决条件
要继续进行,你需要安装以下命令行工具:
安装Argo并配置连接
一旦你的命令行环境设置好并可以访问你的Azure Kubernetes集群,你将想要使用kubectl
创建一个命名空间。以下命令演示了如何创建一个名为argocd
的命名空间,但你可以随意命名:
kubectl create namespace argocd
Copy
创建命名空间后,你将想要运行以下命令。如果你使用了其他命名空间名称,你将需要使用该名称更新以下命令。以下示例演示了如何将argocd安装到argocd
命名空间中:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Copy
上述命令将在指定的命名空间中创建几个自定义资源定义(CRDs)、服务账户、网络策略、配置映射和其他Kubernetes对象。
如果你想检查创建的资源,可以运行以下命令。同样,请确保使用你创建的命名空间名称:
kubectl get all -n argocd
Copy
Argo CD API服务器服务默认不公开;这意味着它配置为具有集群IP而不是负载均衡器。要访问API服务器,你必须执行以下操作之一:
1. 配置负载均衡器
一个简单快捷的修复方法是简单地修补argocd-server服务并将服务类型更改为LoadBalancer。如果你想遵循这条路,请运行以下命令:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
Copy
**注意:**上述命令仅用于演示目的。实际上,你应该在部署时定义你的部署,包括服务类型(NodePort、ClusterIP或LoadBalancer)。修补服务对于学习来说很好,但不应依赖于它。
要使用这种方法连接到你的Argo服务器服务,你需要获取新创建的负载均衡器的公共IP。要获取公共IP,请运行以下命令:
kubectl get services --namespace argocd argocd-server --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
Copy
2. 设置Ingress控制器
如果你想设置Ingress控制器,可以遵循上述链接提供的文档。
要使用这种方法连接到你的Argo服务器服务,你需要使用新创建的Ingress的Ingress IP地址或FQDN。这种方法更高级,需要基本的网络和路由知识才能配置。
3. 使用端口转发
最后,你可以使用端口转发来简单地连接到Kubernetes集群中的argocd-server
服务。以下命令演示了如何使用kubectl将本地端口8080和容器端口443转发到argocd
命名空间中的argocd-server
服务。
kubectl port-forward svc/argocd-server -n argocd 8080:443
Copy
要使用这种方法连接到你的Argo服务器服务,假设你已经保留了本地端口8080
,你将使用以下地址:<http://localhost:8080>
**注意:**使用端口转发方法会从你的计算机到在Kubernetes集群中运行的Argo服务创建一个“流式”连接。你需要保持终端或命令行实例中的此连接打开。下面是一个示例:
登录到Argo
一旦你配置了如何连接到在AKS中运行的Argo服务器服务,下一步就是登录。
默认用户名为admin
,密码是自动生成的,并以明文形式存储。你可以使用以下命令检索此密码:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
Copy
你可以通过两种方式之一登录Argo:
1. 从CLI
在你的终端中,假设你已经安装了先决条件的argocd二进制文件,你可以简单地输入:argocd login 127.0.0.1:8080
,输入默认用户名admin
和你在前一个命令中检索到的密码。
2. 从Web
在你的首选浏览器中,导航到http:localhost:8080
,输入用户名admin
以及你在前一个命令中检索到的密码。
创建(部署)你的第一个Argo应用程序
一旦你登录到Argo,你将想要从Git存储库创建一个应用程序。在Argo的上下文中,单词创建实际上意味着部署。
为了可视化,我包括了一个示例,当你从Web登录时,你会看到屏幕:
Argo的GitHub页面上有一个包含guestbook应用程序的示例存储库
。这是一个简单的应用程序,用于演示Argo CD实际上是如何工作的。
你可以通过两种方式之一创建应用程序 - 要么通过CLI,要么通过UI。如果你希望通过命令行使用argo二进制文件创建应用程序,你可以运行以下命令:
CLI
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
Copy
一旦你在Argo中配置了示例应用程序,你就需要同步应用程序。在Argo的上下文中,同步将在你的Kubernetes集群中部署应用程序。
argocd app get guestbook
argocd app sync guestbook
Copy
Web 浏览器
在您喜欢的 Web 浏览器中,登录 Argo 后,点击“+ 新应用”按钮。以下是一个示例:
接下来,您将您的应用程序命名为 guestbook
并使用默认项目。目前,您可以保留同步策略为 手动
。同样,以下是这个屏幕的示例:
接下来,您将通过将存储库 URL 设置为 GitHub 存储库 URL 来将示例存储库 (https://github.com/argoproj/argocd-example-apps.git
) 连接到 Argo。您可以保留修订版为 HEAD
,并将路径设置为简单的 guestbook
。
对于 目标
,您将从下拉列表中选择 <https://kubernetes.default.svc>
选项,并将命名空间设置为 default
。
最后,您可以点击屏幕顶部的创建按钮在 Argo 中创建您的应用程序。
现在,您已经在 Argo 中创建了您的第一个应用程序!
同步(部署)应用程序
创建应用程序后,您可以通过 CLI 或 Web 查看状态。
- 要通过 CLI 查看状态,您可以输入
argocd app get guestbook
。 - 要通过 Web 查看状态,您应该会在管理选项卡下看到应用程序。以下是一个示例:
最初,您会注意到您的应用程序同步状态为OutOfSync
,您的健康状态为Missing
。这些状态显示为这样,因为虽然您已经在 Argo 中创建了应用程序,但您还没有真正告诉 Argo 部署 Guestbook 应用程序,因此,还没有创建 Kubernetes 资源。
要同步(即部署)Guestbook 应用程序,您可以从命令行运行argocd app sync guestbook
,或者您可以在 Web 浏览器中点击应用程序页面下的同步按钮。
Argo 中的同步命令将检索 Guestbook 存储库中的示例 Kubernetes 清单。一旦检索到 Kubernetes 清单,Argo 将在幕后运行kubectl apply
命令。guestbook 应用程序现在应该正在您的 AKS 集群中运行,您应该能够通过 CLI 或 Web 浏览器查看其资源组件、日志、事件甚至健康状态。
回顾
让我们快速回顾一下:GitOps 与 DevOps 的不同之处在于,它以 Git 作为改善基础设施和应用程序管理的手段;即 Git 是 GitOps 的单一事实来源。DevOps 从人开始,并以通过使用 CI/CD 管道实现向最终用户持续交付价值为中心。