首页 > 其他分享 >认识 ArgoCD

认识 ArgoCD

时间:2023-06-10 18:36:04浏览次数:59  
标签:认识 ArgoCD argocd 应用程序 CD -- https Argo

ArgoCD

官网: https://argo-cd.readthedocs.io/en/stable/

应用程序的定义、配置和环境应该是声明式的,并受版本控制。应用程序部署和生命周期管理应该是自动化的、可审计的,并且易于理解。

Argo CD遵循GitOps模式,使用Git存储库作为定义所需应用程序状态的真实源。Kubernetes清单可以通过几种方式指定:

  • kustomize应用程序
  • helm charts
  • jsonnet files
  • Plain directory of YAML/json manifests
  • 任何配置为配置管理插件的自定义配置管理工具

Argo CD在指定的目标环境中自动部署所需的应用程序状态。应用程序部署可以在Git提交时跟踪分支、标记或固定到特定版本的清单的更新。有关可用的不同跟踪策略的更多详细信息,请参阅跟踪策略。

应用程序控制器是一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(如 repo 中指定)进行比较。它检测OutOfSync应用程序状态并有选择地采取纠正措施。它负责为生命周期事件(PreSync、Sync、PostSync)调用任何用户定义的挂钩

架构概述

 

1、核心概念

假设您熟悉核心 Git、Docker、Kubernetes、持续交付和 GitOps 概念。以下是一些特定于 Argo CD 的概念。

  • 应用程序清单定义的一组 Kubernetes 资源。这是自定义资源定义 (CRD)。
  • 应用程序源类型用于构建应用程序的工具
  • 目标状态应用程序的期望状态,由 Git 存储库中的文件表示。
  • 实时状态该应用程序的实时状态。部署了哪些 pod 等。
  • 同步状态实时状态是否与目标状态匹配。部署的应用程序是否与 Git 所说的一样?
  • 同步使应用程序移动到其目标状态的过程。例如,通过将更改应用于 Kubernetes 集群。
  • 同步操作状态同步是否成功。
  • 刷新将 Git 中的最新代码与实时状态进行比较。弄清楚有什么不同。
  • Health应用程序的健康状况,是否正常运行?它可以满足请求吗?
  • 工具从文件目录创建清单的工具。例如 Kustomize。请参阅应用程序源类型
  • 配置管理工具请参阅工具
  • 配置管理插件自定义工具。

2、安装部署argocd

Argo CD 有两种安装类型:多租户和核心。

多租户部署

多租户安装是安装 Argo CD 最常见的方式。这种类型的安装通常用于为组织中的多个应用程序开发团队提供服务,并由一个平台团队维护。

最终用户可以使用 Web UI 或argocdCLI 通过 API 服务器访问 Argo CD。argocd必须使用命令配置 CLI (argocd login <server-host>在此处了解更多信息)。

提供了两种类型的安装清单:

非高可用性:

不推荐用于生产。这种类型的安装通常在评估期间用于演示和测试。

  • install.yaml - 具有集群管理员访问权限的标准 Argo CD 安装。如果您计划使用 Argo CD 在运行 Argo CD 的同一集群(即 kubernetes.svc.default)中部署应用程序,请使用此清单集。它仍然可以使用输入的凭据部署到外部集群。
  • namespace-install.yaml - Argo CD 安装只需要命名空间级别的权限(不需要集群角色)。如果您不需要 Argo CD 在运行 Argo CD 的同一集群中部署应用程序,并且将仅依赖于输入的集群凭据,请使用此清单集。使用这组清单的一个例子是,如果您为不同的团队运行多个 Argo CD 实例,其中每个实例都会将应用程序部署到外部集群。仍然可以使用输入的凭证(即 )部署到同一个集群(kubernetes.svc.default)argocd cluster add <CONTEXT> --in-cluster --namespace <YOUR NAMESPACE>。

注意:Argo CD CRD 不包含在namespace-install.yaml中。并且必须单独安装。CRD 清单位于manifests/crds目录中。使用以下命令安装它们: kubectl apply -k https://github.com/argoproj/argo-cd/manifests/crds\?ref\=stable

高可用性:

建议将高可用性安装用于生产用途。该捆绑包包含相同的组件,但针对高可用性和弹性进行了调整。

核心部署

核心安装最适合独立使用 Argo CD 且不需要多租户功能的集群管理员。此安装包括更少的组件并且更易于设置。该捆绑包不包括 API 服务器或 UI,并安装每个组件的轻量级(非 HA)版本。

最终用户需要 Kubernetes 访问权限来管理 Argo CD。argocd必须使用以下命令配置 CLI :

 

kubectl config set-context --current --namespace=argocd # change current kube context to argocd namespace
argocd login --core

 

Web UI 也可用,可以使用argocd admin dashboard命令启动。

安装清单在core-install.yaml中可用。

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

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

如果您对UI, SSO,多集群功能不感兴趣,那么您可以只安装核心Argo CD组件:

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

定制化

Argo CD 清单也可以使用 Kustomize 安装。建议将清单作为远程资源包含在内,并使用 Kustomize 补丁应用额外的自定义。

 

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: argocd
resources:
- github.com/argoproj/argo-cd/manifests/ha/base?ref=v2.6.2

Helm安装

Argo CD 可以使用Helm安装。Helm chart 目前由社区维护,可在 argo-helm/charts/argo-cd获取。

支持的版本

与 Kubernetes 项目类似,Argo CD 在任何给定时间点支持的版本都是 N 和 N-1 次要版本的最新补丁版本。这些 Argo CD 版本在 Kubernetes 本身支持的相同版本的 Kubernetes 上得到支持(通常是最后 3 个发布的版本)。

本质上,Argo CD 项目遵循与 Kubernetes 相同的支持方案,但针对 N、N-1,而 Kubernetes 支持 N、N-1、N-2 版本。

例如,如果 ArgoCD 的最新次要版本为 2.4.3 和 2.3.5,而支持的 Kubernetes 版本为 1.24、1.23 和 1.22,则支持以下组合:

  • Kubernetes 1.24 上的 Argo CD 2.4.3
  • Kubernetes 1.23 上的 Argo CD 2.4.3
  • Kubernetes 1.22 上的 Argo CD 2.4.3
  • Kubernetes 1.24 上的 Argo CD 2.3.5
  • Kubernetes 1.23 上的 Argo CD 2.3.5
  • Kubernetes 1.22 上的 Argo CD 2.3.5

Argo CD CLI

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

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

https://github.com/argoproj/argo-cd/releases/download/v2.7.4/argocd-windows-amd64.exe

brew install argocd

Mac (M1)

VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')

curl -sSL -o argocd-darwin-arm64 https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-darwin-arm64

sudo install -m 555 argocd-darwin-arm64 /usr/local/bin/argocd
rm argocd-darwin-arm64

 

ArchLinux

pacman -S argocd

Download latest version

 

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

 

Download concrete version

Set VERSION replacing <TAG> in the command below with the version of Argo CD you would like to download:

VERSION=<TAG> # Select desired TAG from https://github.com/argoproj/argo-cd/releases
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

访问 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"}}'

转发端口

Kubectl 端口转发也可用于连接到 API 服务器而不暴露服务。

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

 

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

使用 CLI 登录

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

argocd admin initial-password -n argocd

警告: argocd-initial-admin-secret更改密码后,您应该从 Argo CD 命名空间中删除。这个秘密除了以明文形式存储最初生成的密码并可以随时安全地删除外,没有其他用途。如果必须重新生成新的管理员密码,Argo CD 将根据需要重新创建它。

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

 

argocd login <ARGOCD_SERVER>

 

笔记: CLI 环境必须能够与 Argo CD API 服务器通信。如果它不能像上面第 3 步中描述的那样直接访问,您可以告诉 CLI 通过以下机制之一使用端口转发来访问它:1)--port-forward-namespace argocd向每个 CLI 命令添加标志;或 2) 设置ARGOCD_OPTS环境变量:export ARGOCD_OPTS='--port-forward-namespace argocd'.

argocd更改密码:

argocd account update-password

获取完整的用户列表

 

argocd account list

 

获取特定用户详细信息

 

argocd account get --account <username>

 

设置用户密码

 

# if you are managing users as the admin user, <current-user-password> should be the current admin password.
argocd account update-password \
  --account <name> \
  --current-password <current-user-password> \
  --new-password <new-user-password>

 

生成授权令牌

 

# if flag --account is omitted then Argo CD generates token for current user
argocd account generate-token --account <username>

 

登录失败限速

为了防止密码暴力破解,Argo CD 在失败次数过多后拒绝登录尝试。以下环境变量可用于控制限制设置:

  • ARGOCD_SESSION_FAILURE_MAX_FAIL_COUNT:Argo CD 开始拒绝登录尝试之前的最大登录失败次数。默认值:5。
  • ARGOCD_SESSION_FAILURE_WINDOW_SECONDS:失败窗口的秒数。默认值:300(5 分钟)。如果将其设置为 0,则禁用失败窗口并且在连续 10 次登录失败后登录尝试将被拒绝,无论它们发生的时间范围如何。
  • ARGOCD_SESSION_MAX_CACHE_SIZE:缓存中允许的最大条目数。默认值:1000
  • ARGOCD_MAX_CONCURRENT_LOGIN_REQUESTS_COUNT:限制并发登录请求的最大数量。如果设置为 0,则禁用限制。默认值:50。

 

3、注册一个集群来部署应用程序

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

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

 

kubectl config get-contexts -o name

 

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

 

argocd cluster add docker-desktop

 

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

笔记: 可以修改角色的规则argocd-manager-role,使其仅对一组有限的命名空间、组、种类具有 , create, update,patch特权delete。但是get, Argo CD 的list集群watch范围需要特权才能运行。

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

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

通过 CLI 创建应用程序

首先,我们需要将当前命名空间设置为运行以下命令的 argocd:

 

kubectl config set-context --current --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/主机名并使用在第 4 步中设置的凭据登录。

登录后点击+New App按钮,如下图:

 

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

 

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

 

对于Destination,将集群 URL 设置为https://kubernetes.default.svc(或in-cluster集群名称)并将命名空间设置为default:

 

填写以上信息后,点击UI上方的Createguestbook创建应用:

 

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

通过 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:        <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

 

应用状态为初始OutOfSync状态,因为应用尚未部署,还没有创建 Kubernetes 资源。要同步(部署)应用程序,请运行:

 

argocd app sync guestbook

 

此命令从存储库中检索清单并执行kubectl apply清单中的一个。留言簿应用程序现在正在运行,您现在可以查看其资源组件、日志、事件和评估的运行状况。

通过 UI 同步

 

 

 

6、备份恢复

使用argocd admin导入和导出所有 Argo CD 数据。

确保您已~/.kube/config指向您的 Argo CD 集群。

找出您正在运行的 Argo CD 版本:

 

argocd version | grep server
# ...
export VERSION=v1.0.1

 

导出到备份

 

docker run -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd admin export > backup.yaml

 

从备份导入

 

docker run -i -v ~/.kube:/home/argocd/.kube --rm argoproj/argocd:$VERSION argocd admin import - < backup.yaml

 

笔记 : 如果您在不同于默认的命名空间上运行 Argo CD,请记住传递命名空间参数(-n). 如果您在错误的命名空间中运行,“argocd admin export”不会失败。

 

7、通过卷安装添加工具

第一种技术是使用一个init容器和一个volumeMount将不同版本的工具复制到 repo-server 容器中。在以下示例中,init 容器使用与 Argo CD 中捆绑的版本不同的版本覆盖 helm 二进制文件:

 

spec:
      # 1. Define an emptyDir volume which will hold the custom binaries
      volumes:
      - name: custom-tools
        emptyDir: {}
      # 2. Use an init container to download/copy custom binaries into the emptyDir
      initContainers:
      - name: download-tools
        image: alpine:3.8
        command: [sh, -c]
        args:
        - wget -qO- https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz | tar -xvzf - &&
          mv linux-amd64/helm /custom-tools/
        volumeMounts:
        - mountPath: /custom-tools
          name: custom-tools
      # 3. Volume mount the custom binary to the bin directory (overriding the existing version)
      containers:
      - name: argocd-repo-server
        volumeMounts:
        - mountPath: /usr/local/bin/helm
          name: custom-tools
          subPath: helm

 

有时替换二进制文件是不够的,您需要安装其他依赖项。以下示例从 Dockerfile 构建一个完全自定义的 repo-server,安装生成清单可能需要的额外依赖项。

 

FROM argoproj/argocd:v2.5.4 # Replace tag with the appropriate argo version

# Switch to root for the ability to perform install
USER root

# Install tools needed for your repo-server to retrieve & decrypt secrets, render manifests 
# (e.g. curl, awscli, gpg, sops)
RUN apt-get update && \
    apt-get install -y \
        curl \
        awscli \
        gpg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    curl -o /usr/local/bin/sops -L https://github.com/mozilla/sops/releases/download/3.2.0/sops-3.2.0.linux && \
    chmod +x /usr/local/bin/sops

# Switch back to non-root user
USER $ARGOCD_USER_ID

 

8、Kustomize

The following configuration options are available for Kustomize:

  • namePrefix 添加到用于定制应用程序的资源的前缀
  • nameSuffix 添加到用于定制应用程序的资源的后缀
  • images 一个Kustomize图像覆盖列表
  • replicas 一个Kustomize副本覆盖列表
  • commonLabels 附加标签的字符串映射
  • forceCommonLabels 一个布尔值,它定义了是否允许覆盖现有标签
  • commonAnnotations 附加注释的字符串映射
  • namespace kubernetes资源命名空间
  • forceCommonAnnotations 一个布尔值,它定义了是否允许覆盖现有的注解
  • commonAnnotationsEnvsubst 一个布尔值,它允许在注释值中替换环境变量

要对叠加使用Kustomize,请将路径指向叠加。

Tip

如果您正在生成资源,则应该了解如何使用 IgnoreExtraneouscompare option.

在某些情况下,您可能希望从应用程序的整体同步状态中排除资源。例如,如果它们是由工具生成的。这可以通过在你想要排除的资源上添加以下注释来实现

metadata:
  annotations:
    argocd.argoproj.io/compare-options: IgnoreExtraneous



参考链接:  https://argo-cd.readthedocs.io/en/stable/

标签:认识,ArgoCD,argocd,应用程序,CD,--,https,Argo
From: https://www.cnblogs.com/weiweirui/p/17471722.html

相关文章

  • java——微服务——spring cloud——Nacos——Nacos认识与安装
                   Nacos开发必知Nacos开发必知官网:https://nacos.io/zh-cn/index.htmlNocas文档:https://nacos.io/zh-cn/docs/what-is-nacos.htmlNocas下载:https://github.com/alibaba/nacos/releases  说明:1.4.0以下使用的mysql驱......
  • 注解:认识注解
          ......
  • 国产云和容器云的认识
       很多项目受限于安全等需要必须使用国产云厂商的云,今天来介绍下国产云--凤凰云。他是凤凰新媒体集团推出的一款云计算服务,它是一种综合性的云计算服务,包括计算、存储、网络、安全、数据库等服务。凤凰云提供了一系列的云计算解决方案,包括云主机、云存储、云数据库、云安全......
  • 认识soui4js(第1篇)
    源代码:https://github.com/soui4js/soui4jssoui4js是soui4+quickjs的结合体。soui4是一套c++directui客户端开发框架,soui4js则将soui4的开发语言从C++迁移到了js。可能有人要问:为什么要使用js来开发?使用js开发最大的优势就是开发快速,代码写下来就可以运行,测试,同时更方便热更......
  • 【Netty】从0到1(一):NIO-认识 ByteBuffer
    前言本篇博文是《从0到1学习Netty》系列的第一篇博文,主要内容是介绍NIO的核心之一Buffer中的ByteBuffer,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;什么是Netty?Netty是一个高性能、异步事件驱动的网络应用程序框架,主要用于快速开......
  • 1. 认识IntelliJ IDEA
    恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程)1.WhyIDEA?【注】JetBrains官方说明:尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向JetBrains产品的用户,因为这些用户更有可能参加调查。此外,2022年,某美国软件开发商在对近千名专业的Java......
  • 进程的基本认识
    进程进程的提出是为什么?因为程序,计算机中运行程序是并不止一个的,为了如何方便地管理这些程序,操作系统提出了进程这个抽象的概念,相当于每一个进程都有一个运行中的程序进程能够同时执行是为什么?CPU的调度,也就是操作系统提出的上下文切换,通过保存和恢复进程在运行中的......
  • 认识网络安全
    一网络攻击链踩点-工具准备-载荷投递-漏洞利用-释放载荷-建立通道-目标达成简化下:目标侦察:准确识别目标,收集目标详细信息,比如网络、邮箱、员工、社会关系、对外提供服务、漏洞信息等,为后续攻击做准备。边界突破:突破边界防护,获取跳板,通过各种手段突破边界,如应用攻击、邮......
  • PACS在工作中需要认识的知识点有哪些?
    PACS系统特点:•覆盖院内大多数影像科室。可连接医院的多种影像设备:包括CT、MRI、CR/DR、DSA、ECT、PET、PET/CT、PET/MR、US、内窥镜、病理显微镜、ECG等;•高效的检查信息查询:可通过影像号、患者姓名、年龄、性别、检查时间、检查设备等多种查询条件迅速的获取查询患者;•具有......
  • 认识LightDB - 高可用安装
    认识LightDB-高可用安装LightDB是恒生电子股份有限公司开发的一款关系型数据库,基于PostgreSQL生态。LightDB分为lightdb-x与lightdb-a两款产品,-a是基于Greeplum开发的,适用于OLAP场景,不太适合日间实时交易。本文若不进行特殊说明,所有LightDB都指的是lightdb-x......