安装 Argo CD

要求

已安装 kubectl 命令行工具。
有一个 kubeconfig 文件(默认位置是 )。~/.kube/config
CoreDNS。可以通过以下方式为 microk8s 启用microk8s enable dns && microk8s stop && microk8s start

1. 安装 Argo CD

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
#查看状态
kubectl wait --for=condition=Ready pods --all -n argocd --timeout 300s

这将创建一个新的命名空间,Argo CD 服务和应用程序资源将位于其中。

argocd报错
Repo server fails to start - GPG error
请注意,由于云厂商 Kubernetes 版本存在差异,所以如果你在安装过程中发现 argocd-repo-server 工作负载一直无法启动,可以尝试删除 argocd-repo-server Deployment seccompProfile 节点的内容。

在argocd-server的资源配置清单中删除下列内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: argocd-repo-server
spec:
  template:
    spec:
      securityContext:
        ~~seccompProfile: 
          type: RuntimeDefault~~  

警告

安装清单包括引用命名空间的资源。如果您要将 Argo CD 安装到不同的 命名空间,然后确保更新命名空间引用。ClusterRoleBindingargocd

此默认安装将具有自签名证书,如果不做一些额外的工作,就无法访问。 执行下列操作之一:

按照说明配置证书(并确保客户端操作系统信任它)。
将客户端操作系统配置为信任自签名证书。

在本指南中,对所有 Argo CD CLI 操作使用 --insecure 标志。

更改argocd的svc为nodeport模式

kubectl edit svc argocd-server -n argocd

spec:
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 39200
    - name: https
      protocol: TCP
      port: 443
      targetPort: 8080
      nodePort: 32427

获取argocd的初始密码

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

在这里插入图片描述

2. 下载 Argo CD CLI

从 https://github.com/argoproj/argo-cd/releases/latest 下载最新的 Argo CD 版本。更详细的安装说明可以通过 CLI 安装文档找到。

在 Mac、Linux 和 WSL Homebrew 中也可用:

brew install argocd

更详细的方法可以查看https://argo-cd.readthedocs.io/en/stable/cli_installation/

3. 访问 Argo CD API 服务器

默认情况下,Argo CD API 服务器不公开外部 IP。要访问 API 服务器, 选择以下技术之一来公开 Argo CD API 服务器:

服务类型负载均衡器
将 argocd-server 服务类型更改为:LoadBalancer

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

入口
按照 ingress 文档了解如何使用 ingress 配置 Argo CD。
链接: Ingress Configuration

使用ingress域名访问要禁用tls或者直接在k8s上配置tls证书

禁用 TLS

add below entry to the config map argocd-cmd-params-cm.yaml

kind: ConfigMap
apiVersion: v1
metadata:
  name: argocd-cmd-params-cm
  namespace: argocd
  labels:
    app.kubernetes.io/name: argocd-cmd-params-cm
    app.kubernetes.io/part-of: argocd
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cmd-params-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cmd-params-cm","namespace":"argocd"}}
data:
  server.insecure: "true"  # 添加这一行来设定服务器为不安全模式,就可以使用http访问了不会强制跳转https

kubectl rollout restart deployment/argocd-server

或者直接在k8s上配置证书

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  rules:
  - host: argocd.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: argocd-server
            port:
              name: https
  tls:
  - hosts:
    - argocd.example.com
    secretName: argocd-secret # do not change, this is provided by Argo CD

端口转发
Kubectl 端口转发也可用于在不公开服务的情况下连接到 API 服务器。

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

然后可以使用 https://localhost:8080 访问 API 服务器

或者使用nodeport模式前面安装已经介绍

4. 使用 CLI 登录

帐户的初始密码是自动生成的,并存储为 在 Argo CD 安装命名空间中命名的密钥中的字段中清除文本。您可以简单地检索此密码 使用 CLI:admin password argocd-initial-admin-secretargocd

argocd admin initial-password -n argocd
警告

您应该从 Argo CD 中删除 命名空间。这个秘密没有别的 目的而不是将最初生成的密码存储在 clear 和 can 随时安全删除。它将由 Argo CD 按需重新创建 如果必须重新生成新的管理员密码。argocd-initial-admin-secret

在使用 ArgoCD CLI 工具之前,你需要先执行 argocd login 命令登录。
使用上面的用户名和密码,登录Argo CD的IP或主机名:admin

argocd login <ARGOCD_SERVER>
注意

$ argocd login 127.0.0.1:8080 --insecure
Username: admin
Password:
'admin:login' logged in successfully

注意,这里我们指定了 ArgoCD 的服务端地址为 127.0.0.1:8080,并且使用了 --insecur 参数来跳过 SSL 认证,你需要保持在上面运行的端口转发命令才能够顺利登录。

CLI 环境必须能够与 Argo CD API 服务器进行通信。如果无法按照上述步骤 3 中所述直接访问它,则可以告诉 CLI 通过以下机制之一使用端口转发来访问它:
1) 向每个 CLI 命令添加标志;
2) 设置环境变量:-port-forward-namespace argocdARGOCD_OPTSexport ARGOCD_OPTS=‘–port-forward-namespace argocd’

使用以下命令更改密码:

argocd account update-password

5. 注册要将应用部署到的集群(可选)

此步骤将集群的凭据注册到 Argo CD,并且仅在部署到 外部群集。在内部部署时(到运行 Argo CD 的同一集群), https://kubernetes.default.svc 应用作应用程序的 K8s API 服务器地址。

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

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

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

注意

可以修改角色的规则,使其仅具有一组有限的命名空间、组和种类的权限。 但是,Argo CD 在集群范围内需要权限才能正常工作。argocd-manager-rolecreateupdatepatchdeletegetlistwatch

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

登录成功后,通过 argocd repo add 命令添加你的示例应用仓库。

$ argocd repo add https://github.com/lyzhang1999/kubernetes-example.git --username $USERNAME --password $PASSWORD
Repository 'https://github.com/lyzhang1999/kubernetes-example.git' added

https://github.com/argoproj/argocd-example-apps.git 上提供了一个包含留言簿应用程序的示例存储库,以演示 Argo CD 的工作原理。

通过 CLI 创建应用程序
首先,我们需要运行以下命令将当前命名空间设置为 argocd:

kubectl config set-context --current --namespace=argocd

使用以下命令创建示例留言板应用程序:

$ argocd app create example --sync-policy automated --repo https://github.com/lyzhang1999/kubernetes-example.git --revision main --path helm --dest-namespace gitops-example --dest-server https://kubernetes.default.svc --sync-option CreateNamespace=true

这里我简单解释一下每个参数的作用。
–sync-policy 参数代表设置自动同步策略。
automated 的含义是自动同步,也就是说当集群内的资源和 Git 仓库 Helm Chart 定义的资源有差异时,ArgoCD 会自动执行同步操作,实时确保集群资源和 Helm Chart 的一致性。
–repo 参数表示 Helm Chart 的仓库地址。这里的值是示例应用的仓库地址,注意需要替换成你实际的 Git 仓库地址。
–revision 参数表示需要跟踪的分支或者 Tag,这里我们让 ArgoCD 跟踪 main 分支的改动。
–path 参数表示 Helm Chart 的路径。在示例应用中,存放 Helm Chart 的目录是 helm 目录。
–dest-namespace 参数表示命名空间。这里指定了 gitops-example 命名空间,注意,这是一个不存在的命名空间,所以我们额外通过
–sync-option 参数来让 ArgoCD 自动创建这个命名空间。
最后,
–dest-server 参数表示要部署的集群,https://kubernetes.default.svc 表示 ArgoCD 所在的集群。

通过 UI 创建应用程序
打开浏览器进入 Argo CD 外部 UI,然后通过访问浏览器中的 IP/主机名并使用步骤 4 中设置的凭据登录。

登录后,点击 + 新建应用程序 按钮如下图所示:

  • 新建应用程序按钮

为您的应用命名,使用项目,并将同步策略保留为:guestbookdefaultManual

应用信息

通过将存储库 url 设置为 github repo url,将 https://github.com/argoproj/argocd-example-apps.git 存储库连接到 Argo CD,将 revision 保留为 ,并将路径设置为:HEADguestbook

连接存储库

对于 Destination,将 cluster URL 设置为(或将 cluster name 设置为),将 namespace 设置为:https://kubernetes.default.svcin-clusterdefault

目的地

填写上述信息后,单击UI顶部的“创建”以创建应用程序:guestbook

目的地

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

通过 CLI 同步
创建留言板应用程序后,您现在可以查看其状态:

$ 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:
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

通过 UI 同步
查看 ArgoCD 同步状态创建好应用之后,GitOps 工作流中的自动同步部分也就建立起来了。现在,你可以打开 ArgoCD 控制台,进入左侧的“Application”菜单来查看示例应用详情

APP HEALTH:应用整体的健康状态,它包含下面三个值。
Progressing:处理中
Healthy:健康状态
Degraded:宕机
CURRENT SYNC STATUS: 应用定义和集群对象的差异状态,也包含下面三个值。
Synced:完全同步
OutOfSync:存在差异
Unknown:未知
LAST SYNC RESULT:最后一次同步到 Git 仓库的信息,包括 Commit ID 和提交者信息。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值