gitops 之argocd

简介:本文旨在通过实际的例子让大家感受argocd如何实现gitops的CD 管理,帮助你快速的在实际生产环境中快速使用起来argocd。
本文实践全是基于其argocd 官方网址以及arogcd github
系列文章同步更新中:
argocd的secret管理之SealedSecret:在git里面加密敏感配置
argocd告警管理之notification服务:让你第一时间得到argocd app的状态信息
argocd蓝绿/金丝雀发布之rollout: 快速方便的启用基于gitops的蓝绿/金丝雀发布
gitops之argocd
一,argocd安装部署
1,首先你的有个k8s集群,关于搭建k8s集群还是比较简单,可以自行解决哈,如果用kubeadm搭建也可以参考 我的github地址.
2, 安装argocd
如果你应用于你的生产考虑HA等点击我了解详细的官方安装yaml
快速简单安装使用如下命令:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
3,安装完成后如下:
3.1

3.1.1
argocd-application-controller: controller 是argocd的处理器,主要是帮你管理你的k8s 资源,基本上你之前用kubectl 做的的操作它都集成了,operater的controller。
当你的app过多时,可以通过修改启动参数提高其处理能力如下:

controller uses two separate queues to process application reconciliation (milliseconds) and app syncing (seconds). Number of queue processors for each queue is controlled by --status-processors (20 by default) and --operation-processors (10 by default) flags. Increase number of processors if your Argo CD instance manages too many applications. For 1000 application we use 50 for --status-processors and 25 for --operation-processors
argocd-dex-server: 认证token服务,为后面实现gitlab登录等。高可用版本时候不支持多pod,只能单个pod。
The argocd-dex-server uses an in-memory database, and two or more instances would have inconsistent data
argocd-redis: 缓存所用。
argocd-repo-server: 这个服务主要功能是去git 你的gitlab 公有/私有仓库到argocd-repo-server这个pod里面最后让argocd进行相应的kubectl 操作。高可用建议:多个pod来处理多个应用在一个repo的场景。repo管理建议:repo里面主要存放配置管理文件以免消耗过多的本地空间,因为argocd-repo-server会拉取你的repo 到本地。如果repo实在是太大的话,建议挂载磁盘到该服务的/tmp目录。
argocd-server: argocd 的前后端服务,整个web服务。里面还内置helm/kubectl 等工具,具体可以进入到pod里面去查看。
3.2

正如上图所示我们将argocd-server 用nodeport的方式暴露出来以供我们访问argocd的界面。值得注意的是需要我们自己去安装清单文件里面去修改暴露的方式。
二,argocd界面使用

1, 登录用户名密码admin/<argocd-pod-name>
2, 界面使用之settings

2.1 Repositories:添加私有repo 地址,让argocd 有权限去你的私人仓库git pull代码,注意ssk-key的权限最好是owner,因为他不光是git clone 还有很多git的操作比如查看你的revision等。然后就是你的gitlab 的网络最好是和argocd在一个内网里面这样会稳定点。

2.2 Clusters: cluster 功能主要是为了添加多kubernetes 集群管理支持的,这样你只需要将argocd部署在一个k8s集群,然后通过cluster功能关联新的k8s集群,即可将你的应用部署到相关连的多个集群上。

注意:目前不支持界面手动添加cluster,只能通过命令行添加:
添加多个cluster之shell 代码支持
总结:
第一步: 按照官方文档添加多cluster信任
第二步:
#列出你当集群当前添加过的信任的集群,类似kubectl config get-contexts
#所以前提是你先将你的待添加k8s集群加入到你的contexts里面。
argocd cluster add
##一切都准备好了之后就可以用这个命令添加你的目标机器到你的argocd server了
argocd cluster add <contenxt-name>
The above command installs a ServiceAccount (argocd-manager), into the kube-system namespace of that kubectl context, and binds the service account to an admin-level ClusterRole. Argo CD uses this service account token to perform its management tasks (i.e. deploy/monitoring).

最后你就可以在创建app的时候选择需要部署的目标集群了。
2.3 Projects: settings之project管理,project 主要用来做权限限制的,我们将不同的app的app放在不同的project以方便我们区分和管理,project可以限制所管理的app部署时间通过sync windows、限制app部署的集群/命名空间等、以及那个APP才能部署。后期做相应的权限控制比如指定某个用户只能对某个project里面的app进行sync等操作。
2.3.1 创建project可以通过界面直接创建也可以通过以下yaml创建:

#############project here
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: <project name here>
namespace: argocd
spec:
##部署窗口设置,如下
syncWindows:
- kind: allow
##+8 utc eveyday 9-11 can be sync
schedule: '0 1 * * *'
duration: 12h
applications:
- '*'
manualSync: false
# Project description
description: <project 描述方便维护>
# Allow manifests to deploy from any Git repos
sourceRepos:
##限制你project能git的 repo
- 'https://github.com/keanlee/kubernetes_deploy.git'
# Only permit applications to deploy to the guestbook namespace in the same cluster
destinations:
- namespace: <对命名空间进行限制>
server: https://<ip addr>:6443 ##对集群进行限制,限制app只能部署到指定集群
# Enables namespace orphaned resource monitoring.
orphanedResources: ##这个功能主要是启动对非argocd管理的k8s 资源进行管理(删除 修改配置等)
warn: true
以上操作均可通过界面操作如下图:


上面这个选项勾选后会利用argocd强大的界面讲此app 同一个namespace下的所以资源罗列出来:

通过该界面你不管能看到这些未被argocd管理的资源而且还能对其进行修改。

2, 界面使用之app管理
2.1 创建app:

通过简单的界面提醒我们就能非常快捷的创建出一个我们的app来,下面如何通过yaml来创建:
yaml 自动化创建app
##因为argocd 是一个operator实现,所以我们可以通过如下命令进行查看和修改:
#kubectl get Application -n gitops
NAME AGE
nginx 22m

2.2 配置管理工具支持:
2.2.1 原始的yaml支持:

2.2.2 helm等工具的支持
helm是目前比较推荐的上argocd的方式,通过不同的values 文件区分出不同的环境,从而达到一套部署模板适用于多个环境。不同的values可以在创建app的时候通过参数指定:
...
helm:
valueFiles:
- values-producation.yaml
...
2.3 同步方式选择:
2.3.1 手动同步,这种方式就是创建了app后需要每次在界面点击 sync按钮方能从你的git 仓库中拉取最新的部署代码进行操作。
2.3.2 自动同步:

#代码中启用
...
syncPolicy:
automated:
prune: true #是否随着部署文件删除回收资源,例如你有个service的配置,启用后当你在gitlab里面注释或删除了该配置代码后,argocd会将其对应的service资源删除
selfHeal: true #自愈功能,时刻保持和git仓库同步,例如有人通过k8s dashboad改了你的一个配置,这个功能启用后快速冲掉其修改的配置,通过k8s dashboard删除该资源也一样会快速创建。包括但不限于deployment。
...
总结
以上就是关于argocd的基本使用,更多详细的使用请移步官方网站。