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


安装后的deployment

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

修改argocd-application-controller的配置清单 deployment

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

安装后的service

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

二,argocd界面使用

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

Argocd 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.2.1 如何添加rancher RKE 到argocd管理?
详细可以访问 最佳解决方案
如果不能访问,请按照如下secret配置好rancher的访问。需要的token 和ca你均能在rancher kubeconfig里面找到。BTW ,ca.pem需要base64 -d回来。

apiVersion: v1
kind: Secret
metadata:
  name:  <secret 的名字:mysql-cluster-secret>
  labels:
    argocd.argoproj.io/secret-type: cluster
  namespace: argocd
type: Opaque
stringData:
  name: <argocd 设置界面显示名字>
  server: <rancher rke endpoint> https://<IP>/k8s/clusters/c-27fv2
  config: |
      {
        "bearerToken": "<token>",
        "tlsClientConfig": {
          "insecure": false,
          "caData": "<ca.pem>"
                         }
      }

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

project 管理界面

#############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

以上操作均可通过界面操作如下图:


project丰富的界面操作

启用orphanedResources后在app界面的开关

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


通过虚实结合的方式显示出当前被argocd管理的和未被管理的资源

通过该界面你不管能看到这些未被argocd管理的资源而且还能对其进行修改。
sync window 可以限制什么时间才能部署你project里面的app
2, 界面使用之app管理

2.1 创建app:

通过界面创建app

通过简单的界面提醒我们就能非常快捷的创建出一个我们的app来,下面如何通过yaml来创建:
yaml 自动化创建app


##因为argocd 是一个operator实现,所以我们可以通过如下命令进行查看和修改:
#kubectl get Application -n gitops
NAME    AGE
nginx   22m
argocd强大的界面显示

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


原始文件的支持,只有后缀是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的基本使用,更多详细的使用请移步官方网站。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349