昨天透过kustomize的方式做了base的yaml和规划了怎麽应用,那麽今天就来利用这些yaml布署服务吧。
kustomize在使用上其实可以直接用kubectl -k 的方式去create目录下的resources,不过这样就像昨天所说要靠人为去执行,那麽要如何自动化呢?传统的方式会选择在cd中加入pipeline自动执行,但是这样间接遭遇了几个问题,要如何取得布署的权限、如果cluster有多座应该怎麽同时,为了一次性的解决这些问题,我使用了argocd 进行gitops的布属流程,让具有deploy权限的帐号放在k8s内,同时让每座cluster的argo监看同一座git,这样就可以推送git的同时异动所有cluster了。
那麽什麽是argocd呢? 先用一张官网的架构图来检视,那只可爱的外星章鱼就是argo
官方给的图,我个人认为其实看起来是满复杂的,不过对於argo来说其实没有那麽困难,他的元件主要分成四个 dex、repo-server、application-controller、redis,其中dex负责操作帐号的管理(本次不介绍),repo-server负责argo会监看哪些git repo进行布署,application-controller会负责真实进行服务create,redis则是提供缓存的功能,并且元件都用pod的方式运行,相关的设定也都会透过crd的方式布署,所以流程上会比较贴近简单一点的图如下
了解他的运作後,就开始配置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,最简易的配置会需要设定的有两个
第一个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有没有新的或是异动,如图。
管理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 下。
我这次是布署在test的ns下(昨天是default),并且重新给一个url。
<<: [30天 Vue学好学满 DAY12] v-model 双向绑定
>>: 30天零负担轻松学会制作APP介面及设计【DAY 03】
目标文件格式 (Object file) 可重定位目标文件 (Relocatable Object ...
服务&验证 今日会直接讲解readinessProbe的部分,以及稍微提到Service这项...
在Python 2中raw_input( )将所有输入作为字符串(String)看待,返回字符串类型...
在进到 " Shading " 之前,我们必须先调整 " Partic...
这里删除的仅是面板的操作日志,与网站日志无关联 Linux宝塔操作记录日志路径: /www/serv...