基于k8s的Flux简单部署

1.Flux 简介

Flux 是一种工具,用于保持 Kubernetes 集群与配置源(如 Git 仓库)同步,并在有新代码要部署时自动更新配置。
Flux 从一开始就使用 Kubernetes 的 API 扩展系统,并与 Prometheus 和 Kubernetes 生态系统的其他核心组件集成。Flux 支持多租户,并支持同步任意数量的 Git 仓库

2.架构图

Flux 采用 GitOps 工具包组件构建,该组件是一套专用工具和 Flux 控制器
可组合 API,fluxcd GitHub organisation下的 GitOps 可重用 Go 软件包用于在 Kubernetes 上构建持续交付(Continuous Delivery)。
Alt

3.快速开始

3.1前提条件

1.Kubernetes 集群。我们建议在本地开发环境中试用 参见Kubernetes Kind
2.具有 repo 权限的 GitHub 个人访问令牌 GitHub 个人访问令牌

3.2 安装 Flux CLI

Flux 命令行界面(CLI)用于启动 Flux 并与之交互
使用以下命令来安装flux

#通过bash安装flux 适用于mac和linux
curl -s https://fluxcd.io/install.sh | sudo bash

其他的操作系统参考CLI install documentation

3.3 配置shell

. <(flux completion bash)

要配置 shell 以加载 flux bash completions,将其添加到你的配置文件

3.4 设置凭证

设置环境变量包括 GitHub 个人访问令牌用户名
token获取在前提条件里有

export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>

3.5检查Kubernetes 集群

运行以下命令,检查是否具备运行 Flux 所需的一切条件

flux check --pre

输出结果类似于以下,kubernetes版本要大于1.24

► checking prerequisites
✔ kubernetes 1.27.3 >=1.24.0
✔ prerequisites checks passed

3.6在集群上安装FLux

运行以下初始化命令

flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=fleet-infra \
  --branch=main \
  --path=./clusters/my-cluster \
  --personal

输出结果类似于以下

► connecting to github.com
✔ repository created
✔ repository cloned
✚ generating manifests
✔ components manifests pushed
► installing components in flux-system namespace
deployment "source-controller" successfully rolled out
deployment "kustomize-controller" successfully rolled out
deployment "helm-controller" successfully rolled out
deployment "notification-controller" successfully rolled out
✔ install completed
► configuring deploy key
✔ deploy key configured
► generating sync manifests
✔ sync manifests pushed
► applying sync manifests
◎ waiting for cluster sync
✔ bootstrap finished

bootstrap命令做了以下的事情
1.在你的 GitHub 账户上创建一个 git 仓库 fleet-infra。
2.向该仓库添加 Flux 组件清单。
3.将 Flux 组件部署到 Kubernetes 集群。
4.配置 Flux 组件,以跟踪版本库中的 /clusters/my-cluster/ 路径。
注意在初始化flux的时候,可以查看flux-system里的pod是否全部已经运行,
如果,pod没有成功运行,会显示一直卡在响应sync,然后超时失败

3.7克隆git仓库

将 fleet-infra 仓库克隆到本地计算机上

git clone https://github.com/$GITHUB_USER/fleet-infra
cd fleet-infra

3.8将 podinfo 仓库添加到 Flux

这里使用的是公共存储库 github.com/stefanprodan/podinfo,podinfo 是一个使用 Go 开发的小型网络应用程序。

3.8.1 GitRepository 清单

创建指向 podinfo 仓库主分支的 GitRepository 清单

flux create source git podinfo \
  --url=https://github.com/stefanprodan/podinfo \
  --branch=master \
  --interval=1m \
  --export > ./clusters/my-cluster/podinfo-source.yaml

注意:如果是你自己的仓库,这里的url是你自己将来要存放资源的那个仓库的url

podinfo-source.yaml里的内容如下

apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: podinfo
  namespace: flux-system
spec:
  interval: 1m
  ref:
    branch: master
  url: https://github.com/stefanprodan/podinfo

3.8.2 push 源文件

提交 podinfo-source.yaml 文件并将其推送至你的 fleet-infra 源库

git add -A && git commit -m "Add podinfo GitRepository"
git push

3.9 部署 podinfo 应用程序

3.9.1 创建Kustomization

使用 flux create 命令创建可应用 podinfo 部署的 Kustomization

flux create kustomization podinfo \
  --target-namespace=default \
  --source=podinfo \
  --path="./kustomize" \
  --prune=true \
  --wait=true \
  --interval=30m \
  --retry-interval=2m \
  --health-check-timeout=3m \
  --export > ./clusters/my-cluster/podinfo-kustomization.yaml

注意:这里的path路径是上面你自己的仓库存放的manifest的资源文件夹路径
在本文里./kustomize就是https://github.com/stefanprodan/podinfo里的文件夹
里面存放的就是podinfo相关的manifest文件

在这里插入图片描述

podinfo-kustomization.yaml里的内容如下

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: podinfo
  namespace: flux-system
spec:
  interval: 30m0s
  path: ./kustomize
  prune: true
  retryInterval: 2m0s
  sourceRef:
    kind: GitRepository
    name: podinfo
  targetNamespace: default
  timeout: 3m0s
  wait: true

3.9.2 push Kustomization 资源文件

提交并将 Kustomization 清单推送至版本库

git add -A && git commit -m "Add podinfo Kustomization"
git push

fleet-infra仓库的结构如下

fleet-infra
└── clusters/
    └── my-cluster/
        ├── flux-system/                        
        │   ├── gotk-components.yaml
        │   ├── gotk-sync.yaml
        │   └── kustomization.yaml
        ├── podinfo-kustomization.yaml
        └── podinfo-source.yaml

4 查看Flux 同步应用程序

flux get kustomizations --watch

结果如下

NAME          REVISION             SUSPENDED  READY   MESSAGE
flux-system   main@sha1:4e9c917f   False      True    Applied revision: main@sha1:4e9c917f
podinfo       master@sha1:44157ecd False      True    Applied revision: master@sha1:44157ecd

检查 podinfo 是否已部署到群集上

kubectl -n default get deployments,services

结果如下

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/podinfo   2/2     2            2           108s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
service/podinfo      ClusterIP   10.100.149.126   <none>        9898/TCP,9999/TCP   108s

对主分支中 podinfo Kubernetes manifest所做的更改会映射在这个集群里
使用kubectl edit更改 podinfo 部署时,更改会被还原为与 Git仓库 中描述的状态一致。

5 参考资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
InfluxDB在KubernetesK8s)中的应用场景主要涉及以下几个方面: 1. **时间序列数据存储和分析**:InfluxDB是一个专为时间序列数据设计的高性能数据库。在Kubernetes集群中,您可以使用InfluxDB来存储和分析与集群相关的监控数据、日志数据、事件数据等。通过将InfluxDB与其他监控和日志收集工具集成,您可以实时监视和分析Kubernetes集群的性能、资源利用率和事件。 2. **应用程序指标监控**:Kubernetes集群中的应用程序通常会生成各种指标,例如请求速率、响应时间、错误率等。使用InfluxDB,您可以收集和存储这些指标,并使用其查询语言(InfluxQL或Flux)进行实时监控、仪表盘展示和报警。这可以帮助您更好地理解应用程序的行为和性能,并及时采取措施来解决问题。 3. **自动扩展和资源优化**:Kubernetes的弹性特性允许根据负载情况来自动扩展和缩减应用程序的实例数量。使用InfluxDB,您可以通过收集和分析与负载相关的指标,根据自定义规则来自动调整应用程序的实例数量。这有助于实现资源优化和成本控制。 4. **日志和事件分析**:Kubernetes集群中的事件和日志记录对于故障排除和系统分析至关重要。通过将InfluxDB与日志收集工具(如Fluentd、Filebeat等)集成,您可以将集群中的日志数据发送到InfluxDB中,并使用其查询功能进行分析和检索。这有助于快速定位问题、进行故障排除和改进系统性能。 这些是InfluxDB在Kubernetes中的一些常见应用场景,但并不限于此。由于InfluxDB的灵活性和可扩展性,您可以根据具体需求将其用于其他用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值