【DevOps】使用Argo和Azure Kubernetes服务实现GitOps方案

2022-03-15T09:21:35+08:00 | 7分钟阅读 | 更新于 2022-03-15T09:21:35+08:00

Macro Zhao

【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服务创建一个“流式”连接。你需要保持终端或命令行实例中的此连接打开。下面是一个示例:

2022_argo_blog_1.png

登录到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登录时,你会看到屏幕:

2022_argo_create_app.png

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 后,点击“+ 新应用”按钮。以下是一个示例:

2022_new_app_argo.png

接下来,您将您的应用程序命名为 guestbook 并使用默认项目。目前,您可以保留同步策略为 手动。同样,以下是这个屏幕的示例:

2022_app_ui_information.png

接下来,您将通过将存储库 URL 设置为 GitHub 存储库 URL 来将示例存储库 (https://github.com/argoproj/argocd-example-apps.git ) 连接到 Argo。您可以保留修订版为 HEAD,并将路径设置为简单的 guestbook

2022_connect_repo.png

对于 目标,您将从下拉列表中选择 <https://kubernetes.default.svc> 选项,并将命名空间设置为 default
最后,您可以点击屏幕顶部的创建按钮在 Argo 中创建您的应用程序。

2022_create_guestbook_ui.png

现在,您已经在 Argo 中创建了您的第一个应用程序!

同步(部署)应用程序

创建应用程序后,您可以通过 CLI 或 Web 查看状态。

  • 要通过 CLI 查看状态,您可以输入 argocd app get guestbook
  • 要通过 Web 查看状态,您应该会在管理选项卡下看到应用程序。以下是一个示例:

    2022_ui_guestbook_status.png


    最初,您会注意到您的应用程序同步状态为 OutOfSync,您的健康状态为 Missing。这些状态显示为这样,因为虽然您已经在 Argo 中创建了应用程序,但您还没有真正告诉 Argo 部署 Guestbook 应用程序,因此,还没有创建 Kubernetes 资源。
    要同步(即部署)Guestbook 应用程序,您可以从命令行运行 argocd app sync guestbook,或者您可以在 Web 浏览器中点击应用程序页面下的同步按钮。

    2022_sync_app_ui.png


    Argo 中的同步命令将检索 Guestbook 存储库中的示例 Kubernetes 清单。一旦检索到 Kubernetes 清单,Argo 将在幕后运行 kubectl apply 命令。guestbook 应用程序现在应该正在您的 AKS 集群中运行,您应该能够通过 CLI 或 Web 浏览器查看其资源组件、日志、事件甚至健康状态。

    2022_argo_success_sync_small.png


    2022_argo_success_sync_big.png

回顾

让我们快速回顾一下:GitOps 与 DevOps 的不同之处在于,它以 Git 作为改善基础设施和应用程序管理的手段;即 Git 是 GitOps 的单一事实来源。DevOps 从人开始,并以通过使用 CI/CD 管道实现向最终用户持续交付价值为中心。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee