一起做 Kubernetes 云原生渐进式交付,刷 Argo CD 技术文档之 Getting Started 篇

358 阅读5分钟

系列

  1. 一起做 Kubernetes 云原生渐进式交付,刷 Argo CD 技术文档之 Overview 篇
  2. 一起做 Kubernetes 云原生渐进式交付,刷 Argo CD 技术文档之 Understand The Basics & Core Concepts 篇

本指南假定您已经了解 Argo CD 所基于的工具。请阅读基础知识以了解这些工具。

前提条件

  • 安装 kubectl 命令行工具。
  • 有一个 kubeconfig 文件 (默认位置是 ~/.kube/config)。

1. 安装 Argo CD

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

这将创建一个新的命名空间 argocd,Argo CD 服务和应用程序资源将驻留在该命名空间中。

如果您对 UI,SSO,多集群管理不感兴趣并且只想将更改放入集群中,则可以使用 --disable-auth flag 禁用身份验证,并使用 --port-forward--port-forward-namespace flag 通过 CLI 访问 Argo CD。并继续执行步骤6:

`kubectl patch deploy argocd-server -n argocd -p '[{"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--disable-auth"}]' --type json`

2. 下载 Argo CD CLI

github.com/argoproj/ar… 下载最新版的 Argo CD。可通过 CLI 安装文档找到更详细的安装说明。

在 Mac Homebrew 中也可用:

brew install argocd

3. 访问 Argo CD API Server

默认情况下,Argo CD API Server 未使用外部 IP 暴露。要访问 API 服务器,请选择以下技术之一以暴露 Argo CD API Server:

Service Type 负载均衡

改变 argocd-server service type 到 LoadBalancer:

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

Ingress

根据 ingress 文档,以了解如何使用 ingress 配置 Argo CD。

端口转发

Kubectl port-forwarding 也可以用于连接到 API server,而无需暴露服务。

kubectl port-forward svc/argocd-server -n argocd 8080:443

然后可以使用 localhost:8080 访问 API server

4. 使用 CLI 登录

初始密码将自动生成为 Argo CD API server 的容器名称。可以使用以下命令进行检索:

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2

使用用户名 admin 和上面的密码,登录到 Argo CD 的 IP 或主机名:

argocd login <ARGOCD_SERVER>

使用以下命令更改密码:

argocd account update-password

在 ArgoCD 的初始启动过程中,初始密码是在名为 argocd-secret 的 kubernetes secret 中设置的。这意味着如果您以任何方式来编辑 deployment 导致新的 Pod 被部署,例如在 Argo CD API server 上禁用 TLS。首次安装Argo CD 时,请记下初始 Pod 名称,或按照以下说明重设密码

5. 注册集群以将应用程序部署到上面(可选)

此步骤将集群的凭据注册到 Argo CD,仅在部署到外部集群时才需要。在内部进行部署(到与 Argo CD 运行所在的同一集群)时,应将 kubernetes.default.svc 用作应用程序的 K8s API server 地址。

首先列出当前 kubeconfig 中的所有集群上下文:

argocd cluster add

从列表中选择一个上下文名称,并将其提供给 argocd cluster add CONTEXTNAME。例如,对于 docker-for-desktop 上下文,运行:

argocd cluster add docker-for-desktop

上面的命令将 ServiceAccount(argocd-manager)安装到该 kubectl 上下文的 kube-system 命名空间中,并将该服务帐户绑定到管理员级别的 ClusterRole。 Argo CD 使用此服务帐户令牌执行其管理任务(即部署/监视)。

可以修改 argocd-manager-role 角色的规则,使其仅对有限的一组名称空间,组和种类具有 createupdatepatchdelete 特权。但是,在 cluster-scope 中,getlistwatch 特权是 Argo CD 起作用所必需的。

6. 从 Git 存储库创建应用程序

包含 guestbook 应用程序的示例存储库可从 github.com/argoproj/ar… 获得,以演示 Argo CD 的工作方式。

通过 CLI 创建应用

您可以使用端口转发访问 Argo CD:在每个 CLI 命令中添加 --port-forward-namespace argocd flag,或设置ARGOCD_OPTS 环境变量:export ARGOCD_OPTS='--port-forward-namespace argocd'

`argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default`

通过 UI 创建应用

打开浏览器进入 Argo CD 外部 UI,然后通过在浏览器中访问 IP/hostname 登录并使用在步骤4中设置的凭据。

登录后,单击 + New App 按钮,如下所示:

+ new app button

给您的应用命名为 guestbook,使用项目 default,并将同步策略保留为 Manual

通过将 Respository url 设置为 github repo url,将 github.com/argoproj/ar… repo 连接到 Argo CD,将 Revision 保留为 HEAD,并将 Path 设置为 guestbook

对于 Destination,将集群设置为 in-cluster,并将名称空间设置为 default

填写完以上信息后,请单击 UI 顶部的 Create 以创建 guestbook 应用程序:

7. 同步(部署)应用程序

创建 guestbook 应用程序后,您现在可以查看其状态:

$ argocd app get guestbook
Name:               guestbook
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://10.97.164.88/applications/guestbook
Repo:               https://github.com/argoproj/argocd-example-apps.git
Target:
Path:               guestbook
Sync Policy:        <none>
Sync Status:        OutOfSync from  (1ff8a67)
Health Status:      Missing

GROUP  KIND        NAMESPACE  NAME          STATUS     HEALTH
apps   Deployment  default    guestbook-ui  OutOfSync  Missing
       Service     default    guestbook-ui  OutOfSync  Missing

由于尚未部署应用程序,并且尚未创建 Kubernetes 资源,因此应用程序状态最初处于 OutOfSync 状态。要同步(部署)应用程序,请运行:

argocd app sync guestbook

该命令从存储库中检索清单,并对清单执行 kubectl apply。该 guestbook 应用程序现在正在运行,您现在可以查看其资源组件,日志,事件和评估的健康状态:

从 UI:

Refs