美文网首页
【k8s学习】GitOps工具Flux CD v1的安装介绍

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

作者: 伊丽莎白2015 | 来源:发表于2022-06-25 23:34 被阅读0次

【前置文章】

【环境】

  • 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/

相关文章

网友评论

      本文标题:【k8s学习】GitOps工具Flux CD v1的安装介绍

      本文链接:https://www.haomeiwen.com/subject/ekkbvrtx.html