day12 : argo gitops服务以及ingress (中)

昨天透过kustomize的方式做了base的yaml和规划了怎麽应用,那麽今天就来利用这些yaml布署服务吧。

kustomize在使用上其实可以直接用kubectl -k 的方式去create目录下的resources,不过这样就像昨天所说要靠人为去执行,那麽要如何自动化呢?传统的方式会选择在cd中加入pipeline自动执行,但是这样间接遭遇了几个问题,要如何取得布署的权限、如果cluster有多座应该怎麽同时,为了一次性的解决这些问题,我使用了argocd 进行gitops的布属流程,让具有deploy权限的帐号放在k8s内,同时让每座cluster的argo监看同一座git,这样就可以推送git的同时异动所有cluster了。

那麽什麽是argocd呢? 先用一张官网的架构图来检视,那只可爱的外星章鱼就是argo
https://ithelp.ithome.com.tw/upload/images/20210912/20139661hY7txG7HqY.png

官方给的图,我个人认为其实看起来是满复杂的,不过对於argo来说其实没有那麽困难,他的元件主要分成四个 dex、repo-server、application-controller、redis,其中dex负责操作帐号的管理(本次不介绍),repo-server负责argo会监看哪些git repo进行布署,application-controller会负责真实进行服务create,redis则是提供缓存的功能,并且元件都用pod的方式运行,相关的设定也都会透过crd的方式布署,所以流程上会比较贴近简单一点的图如下
https://ithelp.ithome.com.tw/upload/images/20210912/20139661Lal4TO8iAw.png
了解他的运作後,就开始配置argocd吧,argo的配置其实很简单,因为他都是yaml,所以要应用他甚至可以全部靠yaml去更新,第一步的安装就是熟悉的create

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

如果想要统一版本,其实也可以把image和yaml拉下来改,并且为了维运的方便,也顺便抓取argocd的cli下来使用(https://github.com/argoproj/argo-cd/releases/download/v2.1.0-rc2/argocd-linux-amd64)。

安装好argo後可以用istio ingress的方法把argo-server的service expose出来使用,介面的使用方法其实还满简单的,所以我就介绍如何不透过介面的方式设定好argocd,最简易的配置会需要设定的有两个

  1. git repo
  2. listen git的application crd配置

第一个git repo的配置

透过secret拿到密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
argocd --insecure --grpc-web login URL:443 --username admin --password
argocd repo add git_repo_url --username user --password password

第二个listen git的application crd其实是在告诉argocd,我希望他抓取这个git目录下的档案,定期去帮我确认有没有crd要新增,然後再透过更新的crd去确认这个crd所监看的repo有没有异动,看起来很饶口,其实说简单了就是用application去管理argocd application有没有新的或是异动,如图。
https://ithelp.ithome.com.tw/upload/images/20210912/20139661uOMZccS3DG.png

管理application的crd yaml简易的写法如下

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: application-monitor
  namespace: argocd
spec:
  destination:
    namespace: argocd
    server: 'https://kubernetes.default.svc'
  project: default
  source:
    path: argo-application/
    repoURL: >-
      git-repo-url
    targetRevision: HEAD
  syncPolicy:
    automated: {}

这样之後只要git推送application到git-repo的argo-application/目录下,就会自动把application crd布署完成,并且再根据这个布署好的application配置服务,行成完全自动化的布署。

推给monitor的application大概长这样

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: test-hello-world
  namespace: argocd
spec:
  destination:
    namespace: test
    server: 'https://kubernetes.default.svc'
  project: default
  source:
    path: k8s-cluster/test/hello-word
    repoURL: >-
      git-repo-url
    targetRevision: HEAD
  syncPolicy:
    automated: {}

那麽服务就会自动被注册为新的application : test-hello-world ,然後将k8s-cluster/test/hello-word内定义的yam布署到test这个namespace 下。
https://ithelp.ithome.com.tw/upload/images/20210912/201396611nI5yqT1zI.png
我这次是布署在test的ns下(昨天是default),并且重新给一个url。
https://ithelp.ithome.com.tw/upload/images/20210912/20139661kxrTkmU5D2.png


<<:  [30天 Vue学好学满 DAY12] v-model 双向绑定

>>:  30天零负担轻松学会制作APP介面及设计【DAY 03】

Day.4深入理解连结之Object file

目标文件格式 (Object file) 可重定位目标文件 (Relocatable Object ...

给客户提供优质服务并验证服务,让客户感觉有被重视

服务&验证 今日会直接讲解readinessProbe的部分,以及稍微提到Service这项...

Day4:Input 输入

在Python 2中raw_input( )将所有输入作为字符串(String)看待,返回字符串类型...

Day27 火堆实作 - 连接模组方块

在进到 " Shading " 之前,我们必须先调整 " Partic...

宝塔面板操作日志定时清理

这里删除的仅是面板的操作日志,与网站日志无关联 Linux宝塔操作记录日志路径: /www/serv...