首页 > 其他分享 >Argocd使用说明

Argocd使用说明

时间:2023-09-20 19:22:41浏览次数:60  
标签:https Argocd argocd 应用程序 CD 说明 io 使用 argoproj

一,背景概述

1.0,背景知识

  1. docker虚拟化技术
  2. Kubernetes容器编排技术

1.1,历史操作

​ 以自身的使用经历来说明,之前在一个服务器上部署java程序的流程如下

  1. 本地java-maven打包成为成果物
  2. 将java程序的成果物上传到服务器上
  3. 使用命令kill具体服务的进程
  4. 使用命令启动java服务

​ 上述的4个小步骤可以划分为2大步,其中1、2为集成阶段,3、4为部署阶段。

​ 这样的做法有什么缺点呢?

  1. 麻烦、麻烦、麻烦(一个服务还好,如果是微服务架构一次将近50多个服务,让你一个人去维护怎么办?直接当场爆炸)
  2. 不安全(上述步骤的执行,需要暴露服务器的读写访问权限,如果权限控制没有做好,有人直接执行 rm -rf / 呢?!!也是直接当前爆炸)

如何解决上述的一些问题呢?这就涉及到后面出现的CI/CD(持续集成部署)

1.2,CI/CD

​ 持续集成和持续部署(CI/CD)管道是为了交付新版本软件而必须执行的一系列步骤。

​ CI/CD 管道是一种实践,主要是通过自动化在整个软件开发生命周期改进软件交付。

​ 在软件开发生命周期中的开发、测试、生产和监控阶段自动化 CI/CD,企业能够更快地开发更高质量的代码。尽管可以手动执行 CI/CD 管道的每个步骤,但 CI/CD 管道的真正价值在于自动化。

CI/CD Flow

优点:

  1. 节省运维成本(以前需要一个运维团队,在使用CI/CD方案后)
  2. 安全(物理服务器信息无需暴露给运维人员)

​ 得益于docker虚拟化技术、k8s容器编排工具的大规模推广,当前已经有很多CI/CD实践方案,下图红框中其常用的工具。

image-20230918191012750

​ 这次要讲解的Argocd就是用于CD持续部署的一个k8s工具,同时Argo也有一个用于工作流(可以编写持续集成CI流水线)的工具argo-workflow。

1.3,Argo CD

​ Argo CD 是 Kubernetes 的声明式 GitOps 持续交付工具。

​ 一般认为应用程序的定义、配置和环境应该是声明式的,并受版本控制。应用程序部署和生命周期管理应该是自动化的、可审计的,并且易于理解。Argo CD正是为了实现上述目标而生。

Argo CD Architecture

​ Argo CD ui页面

Argo CD UI

二,安装部署

2.1,yaml安装

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

2.2,Kustomize安装

kustomization.yaml样例文件

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

namespace: argocd
resources:
- https://raw.githubusercontent.com/argoproj/argo-cd/v2.7.2/manifests/install.yaml

执行安装命令(上述文件的同路径下):

kubectl apply -k

2.3,helm安装

helm repo add argo https://argoproj.github.io/argo-helm
helm install my-argo-cd argo/argo-cd --version 5.46.4

​ 待全部的pod处于running状态(如下图所示),即可正常使用

image-20230918172613346

三,系统准备

3.1,进入ui页面

​ 想办法暴露argocd-server的对外访问能力,例如:NodePort、Loadbalance、Ingress等(此处略过)

image-20230918173405894

进入UI页面如下

image-20230918173547246

获取系统初始化密码,执行如下命令

kubectl get secret -n argocd argocd-initial-admin-secret -o yaml

image-20230918173721667

将其中的password进行转换解析(此处的密码为样例)

echo cFN4SG5kR0tadFpjQ3Jaag== |base64 -d

image-20230918173836810

添加账户密码后登录,正式进入页面

image-20230918173534411

3.2,添加git仓库

进入setting页面

image-20230918174033364

进入Repositories页面

image-20230918174018427

添加git仓库(或者helm仓库)

image-20230918174130155

添加完成后,CONNECTION STATUS状态如果为 Successful,表明argocd已经正常连接到,如下图所示

image-20230918174018427

四,基础元素说明

4.1,核心概念

Application:由manifest定义的一组Kubernetes资源。这是自定义资源定义(CRD)。
Target state:应用程序的期望状态,由Git存储库中的文件表示。
Live state:该应用程序的活动状态。部署了哪些pod资源等。
Sync status:当前状态是否与目标状态匹配。部署的应用程序是否与Git要求的相同?
Sync:使应用程序移动到其目标状态的过程。例如,通过对Kubernetes集群应用更改。
Sync operation status:同步是否成功。
Refresh:将Git中的最新代码与实时状态进行比较。找出不同之处。
Health:应用程序的运行状况,是否正常运行?它能处理请求吗?

image-20230918193506180

4.2,操作方式

​ 可以通过WebUI、CLI命令行、第三方访问进行控制

4.3,支持方式

4.4,声明式配置

​ Argo CD应用程序、项目和设置可以使用Kubernetes清单进行声明式定义。这些可以使用kubectl apply来更新,而不需要使用argocd命令行工具。
​ 所有资源,包括Application和AppProject规范,都必须安装在Argo CD命名空间中(默认情况下是argocd)。

4.4.1, Application

Application CRD是Kubernetes资源对象,表示环境中已部署的应用程序实例。它由两个关键信息定义:

source:到Git中所需状态的源代码引用(存储库、修订、路径、环境)

destination:目标集群和名称空间的目标引用。对于集群,可以使用服务器或名称中的一个,但不能同时使用两者(这会导致错误)。当服务器丢失时,它将根据名称进行计算,并用于任何操作。

​ 本质就是声明了将要部署哪些资源。这些资源来源于哪里、部署在哪里。

​ 样例(部署git仓库某个目录下的资源):

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: dev-apps-index
  namespace: argocd
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
  destination:
    namespace: argocd # 部署的目标namespace
    server: https://kubernetes.default.svc # 部署于哪一个集群中
  project: dev-apps-index # 部署在哪个项目下
  source: # 部署的材料来源
    path: cd/index/dev/microservice
    repoURL: https://gitee.com/activeclub/gitops-dev.git
    targetRevision: HEAD
    directory:
      recurse: true
  syncPolicy: # 同步策略
    automated: {}

样例(helm部署Cassandra):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: database-cassandra
  namespace: argocd
spec:
  destination:
    namespace: database
    server: https://kubernetes.default.svc
  source:
    repoURL: 'https://charts.bitnami.com/bitnami'
    targetRevision: 10.5.3
    chart: cassandra
  sources: []
  project: dev-apps
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

下图为成功部署后的资源运行状态

image-20230918202943561

image-20230918203000376

4.4.2,AppProject

​ AppProject CRD是Kubernetes资源对象,表示应用程序的逻辑分组(项目)。它由以下关键信息定义:

sourceRepos: 对存储库的引用,项目中的应用程序可以从中提取清单。

destinations:引用项目中的应用程序可以部署到的集群和名称空间(不要使用name字段,只匹配server字段)。

roles:列表中的实体定义了它们对项目内资源的访问权限。

​ AppProject限定了可以使用哪些资源仓库(git、helm等仓库)、可以部署到哪些命名空间、可以使用哪些集群资源、可以使用哪些命名空间下的资源。

样例:

---
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: dev-apps
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  description: Dev Applications
  sourceRepos: # 可用仓库地址
  - 'https://gitee.com/abcd/gitops-dev.git'
  destinations: # 可部署namespace
  - namespace: microservice
    server: https://kubernetes.default.svc
  - namespace: "*"
    server: https://kubernetes.default.svc
  clusterResourceWhitelist: # 集群资源白名单
  - group: '*'
    kind: '*'
  namespaceResourceWhitelist: # 集群命名空间下资源白名单
  - group: '*'
    kind: '*'

部署上述AppProject资源

image-20230918200855765

可以在setting中看到相关信息

image-20230918200725476

4.5,相关配置

​ 可以直接在ui上进行配置也可以直接在注解中配置

image-20230919123119992

PRUNE

​ 删除没有存在价值的对象

sync option no prune

DRY RUN

​ 干运行(试运行)。禁止ApplicationSet创建、修改或删除所有应用程序

https://github.com/argoproj/argo-cd/issues/12592

APPLY ONLY

​ 如果选择“Apply Only”,那么Argo CD将跳过前后同步挂钩,只运行kubectl申请应用程序资源。

FORCE

​ 强制执行。但是,需要注意的是,当补丁重试5次后遇到冲突时,强制操作会删除资源。

SKIP SCHEMA VALIDATION

​ 是否跳过模式验证

AUTO-CREATE NAMESPACE

​ 自动创建命名空间

PRUNE LAST
此特性允许在部署其他资源并恢复正常之后,以及在所有其他波成功完成之后,将资源修剪作为同步操作的最后隐式波进行。

APPLY OUT OF SYNC ONLY

​ 目前,使用自动同步进行同步时,Argo CD会应用应用程序中的每个对象。 对于包含数千个对象的应用程序,这需要相当长的时间,并且会给 api 服务器带来不适当的压力。 启用选择性同步选项,该选项将仅同步不同步的资源。

RESPECT IGNORE DIFFERENCES

​ 此同步选项用于使 Argo CD 在同步阶段也考虑属性中进行的配置。

​ 默认情况下,Argo CD 仅使用配置来计算实时状态和所需状态之间的差异,该状态定义了应用程序是否同步。但是,在同步阶段,所需状态将按原样应用。修补程序是使用实时状态、所需状态和注释之间的 3 向合并来计算的。这有时会导致不希望的结果。

SERVER-SIDE APPLY

​ 默认情况下,Argo CD 执行操作来应用 Git 中存储的配置。 这是一个客户端操作,它依赖于注释来存储以前的资源状态。

​ 资源太大,无法容纳 262144 字节允许的注释大小。在这种情况下 服务器端应用可用于避免此问题,因为在这种情况下不使用注释。

REPLACE

​ 替换资源,而不是修改资源(更新)

​ 在同步过程中,将使用“kubectl 替换/创建”命令同步资源。 此同步选项可能具有破坏性,并可能导致必须重新创建资源,这可能会导致应用程序中断。

RETRY

​ 重试策略

    # The retry feature is available since v1.7
    retry:
      limit: 5 # number of failed sync attempt retries; unlimited number of attempts if less than 0
      backoff:
        duration: 5s # the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h")
        factor: 2 # a factor to multiply the base duration after each failed retry
        maxDuration: 3m # the maximum amount of time allowed for the backoff strategy

五,扩展使用

5.1,argocd-image-updater

​ 一个自动更新由Argo CD管理的Kubernetes工作负载的容器映像的工具。

​ 核心功能:检测docker镜像仓库中的版本变更情况,依照选定的策略进行自动化的服务版本更新

安装部署

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml

配置docker镜像仓库信息

kubectl create -n argocd secret docker-registry dockerhub-secret \
	--docker-username someuser \
	--docker-password s0m3p4ssw0rd \
	--docker-registry "https://registry-1.docker.io"

修改argocd-image-updater-config内容

---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/name: argocd-image-updater-config
    app.kubernetes.io/part-of: argocd-image-updater
  name: argocd-image-updater-config
data:
  registries.conf: |
    registries:
    - name: AlibabaCloud Container Registry
      api_url: https://registry.cn-hangzhou.aliyuncs.com
      prefix: registry.cn-hangzhou.aliyuncs.com
      credentials: pullsecret:argocd/aliyun-docker-secret

调整application资源

添加 《argocd-image-updater.argoproj.io》相关的注解

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: uid-server
  namespace: argocd
  annotations:
    argocd-image-updater.argoproj.io/image-list: uidserver=registry.cn-hangzhou.aliyuncs.com/abcd/uidserver
    argocd-image-updater.argoproj.io/trace-collector.update-strategy: latest
    argocd-image-updater.argoproj.io/write-back-method: git
    argocd-image-updater.argoproj.io/write-back-target: kustomization
    argocd-image-updater.argoproj.io/git-branch: master
spec:
  destination:
    namespace: microservice
    server: https://kubernetes.default.svc
  source:
    path: cd/apps/dev/project/uid-server
    repoURL: https://gitee.com/activeclub/gitops-dev.git
    targetRevision: HEAD
  sources: []
  project: dev-apps
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

调整Kustomization

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
  name: blog-server
commonLabels:
  app: blog-server
resources:
- deployment.yaml
- ingress-http.yaml
images:
- name: registry.cn-hangzhou.aliyuncs.com/activeclub/blog-server
  newTag: 1.0.0-230912-141907-0694

六,拓展知识点

Devops

DevOpsDevelopment和Operations的混成词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

Docker

Docker是一个开放源代码开放平台软件,用于开发应用、交付(shipping)应用和运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Kubernetes

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。[4]该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。

声明式vs命令式

​ 声明式(declarative)是结果导向的,命令式(imperative)是过程导向的。它们都有自己适用的场景和局限,于是现实中的编程语言常常都有两者的身影。

参考文档:

  1. What is CI/CD?
  2. Argo CD官方文档
  3. Argo CD Image Updater
  4. Cloud native certificate management
  5. docker仓库配置问题
  6. Apply Only?

标签:https,Argocd,argocd,应用程序,CD,说明,io,使用,argoproj
From: https://www.cnblogs.com/Mufasa/p/17718170.html

相关文章

  • 使用js开发一个快速打开前端项目的alfred插件
    使用js开发一个快速打开前端项目的插件目录前言使用的技术栈步骤问题发现待优化前言一直以来开发都是先打开vscode,然后选择项目,在项目多的情况下会觉得挺繁琐;如果同时打开了许多vscode窗口,寻找目标窗口也比较麻烦,于是萌生了开发一个alfred的工作流插件的想法,目标是在alf......
  • ubuntu下使用rtaudio采集桌面音频&扬声器音频
    最近在做国产化系统的音频采集,Ubuntu/Kylin/UOS下可以使用PulseAudio来控制音频输入输出,可以直接使用aptinstalllibpulse-dev获取相关库进行开发。不过我选择使用封装更好的RtAudio来进行ubuntu下的音频采集,RtAudio提供了一套跨平台的音频输入输出控制API,而且在linux下除了Puls......
  • 使用openssl创建ssl证书,用于测试https服务
    一个web站点要对外提供https服务就需要ssl证书,ssl证书可以从云服务厂商那里购买,通常也能申请到免费的,但是如果只是为了测试,则可以使用openssl来创建ssl证书。下面是完整的生成过程:第一步:创建私钥opensslgenrsa-outserver.key2048第二步:创建签名请求文件opensslreq-new-key......
  • 应用层-在IP网络中经常使用的应用层协议和服务包括哪些?主要提供哪些功能?对应的端口号
    1.TELNET远程登录主机,端口号TCP232.FTP文件传输协议。客户端首先连接到FTP服务器的TCP21端口,进行用户的认证,认证成功后,当我们要传输文件时,服务器会开一个端口为TCP20来进行传输数据文件。3.TFTP简单文件传输协议,FTP的简化版,端口号TCP694.NFS文件共享协议,让两种不同的文件......
  • 代码混淆工具ipaguard:如何使用ipaguard保护和混淆iOS应用程序代码
    ​转载:怎么保护苹果手机移动应用程序iosipa文件中的代码? 目录转载:怎么保护苹果手机移动应用程序iosipa文件中的代码?代码混淆步骤1.选择要混淆保护的ipa文件2.选择要混淆的类名称3.选择要混淆保护的函数,方法4.配置签名证书5.混淆和测试运行   ​编辑在......
  • 使用layui写多个下拉选项框
    文件 css  <linkrel="stylesheet"href="https://unpkg.com/[email protected]/dist/css/layui.css">js  <scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  <scriptsrc=&q......
  • c# 多线程的使用
    需求描述 需要定期获取设备的状态目前需要ping的设备只有200个左右   耗时 177.429秒   Stopwatchsw=newStopwatch();sw.Start();try{varlist=_assetinfoService.GetLi......
  • Linux环境下sentence-transformers 之 all-MiniLM-L6-v2模型安装与使用
    好记性不如烂笔头系列一、背景:1、之前使用chatgpt接口生成embeddings的向量维度为1536维,数据库中占用较大,所以找寻低维度的向量生成方法,减少数据占用2、在huggingface上发现all-mpnet-base-v2及all-MiniLM-L6-v2两个模型不错,前者会生成768维的向量,后者会生成384维的向量 二......
  • 关于pagehelper分页无法使用的情况下进行分页,以及对显示页码navigatePages限制
    IntegerpageNum=1;IntegerpageSize=10;//计算总数inttotal=list==null?0:list.size();//计算总页数intpageSum=total%pageSize==0?total/pageSize:total/pageSize+1;PageHelper.startPage(pageNum,pageSize);//开始分页List<ActTrsDetailDto>collect......
  • 使用dom4j解析xml文件及selectNodes取不到值问题解决
    参考文档:https://blog.csdn.net/PARADDD/article/details/131307189https://blog.csdn.net/weixin_37703598/article/details/81273199......