【k8s学习】GitOps工具Flux CD v1的安装介绍

【前置文章】

【环境】

  • MacOS
  • minikube version: v1.25.2
  • helm v3.8.2

【资源】

说明

fluxcd的学习,需要对Kubernetes和helm有一定的基础。

本文主要参考这个链接:Flux安装参考:https://fluxcd.io/legacy/flux/tutorials/get-started-helm/,用官网的示例项目flux-get-started通过flux工具,实现GitOps配置文件的自动化部署。

【但是】,从这个安装参考的网址上就可以看出,它是legacy的url,(即历史遗留版本,已经有另外的更新的解决方案了。

网址:https://fluxcd.io/legacy/helm-operator/,有说明:

This documentation is for Flux (v1) and Helm Operator (v1). Both projects are in maintenance mode and will soon reach end-of-life. We strongly recommend you familiarise yourself with the newest Flux and start looking at your migration path.

【即最新的flux和helm一起工作协调的,已经朋helm operator升级到了helm controller了。】

【而本文是通过helm operator,以及flux安装版本还停在v1,所以应该没什么参考价值。我会再出一个基于flux v2版本的文章。】

【不过通过自己的实践,还是对flux以及其工作运转有了一定的了解,以及也安装了fluxctl,然后学会了一些交互。】

关于flux和helm:

  • flux的工作原理是安装在kubernetes集群中的agent,每隔一段时间对比Git Repo中的配置和kubernetes集群中的配置是否一样,如果不一样,则开始从Git中pull最新配置,apply到kubernetes集群中。
  • helm则是kubernetes上的包管理工具,即我们每次都要自己写deployment, service, ingress等yaml配置,这样子比较麻烦,通过一些通用的模板(template),以传入动态的values.yaml,来帮助生成k8s中的yaml文件。

另外:本文没有对flux作更多的解释,目标只是跑通官网的demo示例。

1. 准备工作

【如果已经安装了helm,那么可以直接通过helm安装。】
如果没有helm,可以先安装helm:brew install helm

Add the Flux repository:

helm repo add fluxcd https://charts.fluxcd.io

通过kubectl运行Helm crds.yaml配置:

kubectl apply -f https://raw.githubusercontent.com/fluxcd/helm-operator/master/deploy/crds.yaml

通过kubectl在minikube中创建namespace:

kubectl create namespace flux

前三步截图:
image.png

2. 使用Helm安装Flux:

从Flux官方github中fork项目到自己的git中:
官网github:https://github.com/fluxcd/flux-get-started
右上角点击fork:

image.png

需要修改fork后的以下文件git地址(注:需要在自己的repo中改):
https://github.com/fluxcd/flux-get-started/blob/master/releases/ghost.yaml#L13

开始安装flux(需要用自己的git信息来替换)

helm upgrade -i flux fluxcd/flux
--set git.url=git@github.com:YOURUSER/flux-get-started
--namespace flux

image.png

根据上述的提示查看:

kubectl -n flux logs deployment/flux | grep identity.pub | cut -d '"' -f2

image.png

继续使用helm安装helm-operator:

helm upgrade -i helm-operator fluxcd/helm-operator
--set git.ssh.secretName=flux-git-deploy
--namespace flux

image.png

使用kubectl命令在namaspace=flux下查看Pod:

image.png

可以看到helm-operator-6ff96bf4d5-c82qv READY = 0/1,用kubectl查看下log:

kubectl logs -f helm-operator-6ff96bf4d5-c82qv -n flux

打印的日志:ts=2022-06-23T00:34:13.207913657Z caller=helm.go:61 component=helm version=v2 error="errored creating Helm 2 client: services \"tiller-deploy\" not found"

找到原因了,因为我用的是helm3,version3是没有tiller的,所以在安装的时候出错了,重新安装下(加上参数--set helm.versions=v3

image.png

再重新使用`kubectl get pods -n flux查看:
image.png

可以看到:Pod为flux和flux-memcached,还有helm-operator都已经安装好了。

【通过查看deployment中的image,可以看到安装的flux版本有点低】
image.png

3. fluxctl安装与学习

3.1 安装flux命令行工具:fluxctl

对于MacOS系统,使用HomeBrew来安装:

brew install fluxctl

image.png

fluxctl version

1.25.0

3.2 学习fluxctl命令

使用fluxctl --help来查看学习下fluxctl命令。
其中一个命令:fluxctl identity:用来显示SSH公钥。

再使用命令:fluxctl identity --help,查看具体的参数,其中:
--k8s-fwd-ns <namespace>:可以查看在传入的namespace下的SSH的公钥。

image.png

把上述ssh-rsa复制到git网站上的SSH and GPG keys中:

image.png

4. Demo-1

上述我们fork的flux-get-started项目可以当做一个例子来演示。
flux-get-started项目里面的配置,namespace都为demo。

4.1 首先是改下mongodb的yaml配置文件:

地址(把YOURUSER改成自己的github地址):https://github.com/YOURUSER/flux-get-started/edit/master/releases/mongodb.yaml下。

这里我是fork到自己的github下,如果是fork到别的git仓库也可以的,文件就是在flux-get-started项目的releases目录的mondodb.yaml。

我们的目标是在这里修改一点点内容,如把tag从4.0.13改到4.0.14

image.png

4.2 commit代码到master branch后,查看flux log:

kubectl -n flux logs deployment/flux -f

默认情况下,flux operator会每隔5分钟同步一次(即对比Kubernetes中的配置和Git Repo配置)。

4.3 手动同步配置:

fluxctl sync --k8s-fwd-ns flux

可以看到目标Git Repo即是我们配置的url:
image.png
4.4 设置k8s-fwd-ns

这里每次都要在fluxctl命令后加上--k8s-fwd-ns,是因为默认的namespace为default,而我们要查看的ns为flux,可以通过export set环境变量:

export FLUX_FORWARD_NAMESPACE=flux

【如此一来,就可以不用加--k8s-fwd-ns flux这个参数了。】

4.5 通过fluxctl list-workloads来查看flux的工作负载

fluxctl list-workloads -a

可以看到demo的namespace下的mongodb的version从4.0.13更新到了4.0.14了:


image.png

这里为什么redis为locked呢?是因为在demo中是这么配置的:
image.png

5. Demo-2

首先在(YOURUSER改成自己的用户名):https://github.com/YOURUSER/flux-get-started/blob/master/workloads/podinfo-hpa.yaml

可以看到配置:
image.png

再通过kubectl查看已经在运行的Pod,确实有2个podinfo:


image.png

【修改podinfo-hpa.yaml中的minReplicas和macReplicas为1】:
等待一段时间(flux同步时间为5分钟),查用kubectl查看podinfo数量,从2个减到了1个:

image.png

【目标达成】

我们仅仅改了一个在Git Repository中的podinfo-hpa.yaml文件里的内容,别的什么都没有动,在本地的minikube中的pod数据,就自动的从2个变成了1个。做到了GitOps的目标,即配置文件的CI/CD。


参考:
https://techbloc.net/archives/4283
https://fluxcd.io/legacy/flux/tutorials/driving-flux/

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

推荐阅读更多精彩内容