GitOps实操工具-Flux安装与设置

GitOps实操工具-Flux安装与设置

Flux是一个通过git管理和同步Kubernetes部署状态的支持GitOps的工具,用于完成Docker镜像库与Kubernetes运行时的CD(持续交付)阶段工作的自动化。如下图所示:

6fbfd552829299cd00cc2362356ea95f021.jpg

Flux 包含几个部分:

  • 命令行客户端 fluxctl。
  • daemon服务实例,flux 运行在集群中,维护集群的状态。
  • service, 运行在 Weave Cloud。

你不需要最后一个就能使用 Flux; 只需要运行daemon然后通过命令行客户端工具连接即可。

快速安装

复制Flux repo并且编辑示范配置文件,位于 deploy/flux-deployment.yaml. 然后应用所有 deploy directory下的配置文件。

$EDITOR ./deploy/flux-deployment.yaml
kubectl apply -f ./deploy

Helm 用户

创建所有的资源,定义在 deploy-helm 目录,如下:

$EDITOR ./deploy-helm/helm-operator-deployment.yaml
kubectl apply -f ./deploy-helm

下一步,下载fluxctl 客户端的最新版本,在 github.

细节描述

该部署安装Flux和其依赖。首先,进入示范配置的目录。

注意

Helm用户需要 deploy-helm 目录。

cd deploy

Memcache

Flux 使用 memcache 来cache docker registry requests.

kubectl create -f memcache-dep.yaml -f memcache-svc.yaml

Flux deployment

你需要创建一个secret,其中 Flux 将存储其SSH key。没有该参数,daemon将不会启动。

kubectl create -f flux-secret.yaml

该 Kubernetes 部署配置文件 flux-deployment.yaml运行 Flux daemon,但需要首先编辑一下,至少提供你自己的configuration repo (即 --git-repo 参数)。

$EDITOR flux-deployment.yaml
kubectl create -f flux-deployment.yaml

对于 Kubernetes >=1.6 的访问控制 (RBAC)

你需要给fluxd提供service account,使其能够访问希望使用Flux的 namespaces。查看 flux-account.yaml 中的服务账户(which puts essentially no constraints on the account) 以及RBAC documentation, 以及创建服务账户,在你放置Flux的namespace之中,你需要修改 namespace: default 一行,如果直接采用这个例程。

你需要明确地告诉fluxd 使用这个服务账户,通过去掉文件fluxd-deployment.yaml中这一行的注释 # serviceAccountName: flux 

Flux API service

为了使 pod对于命令行客户端 fluxctl可以访问,你需要将集群中的API暴露出来。

一个简单的方法是使用 kubectl port-forward,赋予存取 Kubernetes API的权限。

fluxpod=$(kubectl get pod -l name=flux -o name | awk -F / '{ print $2; }')
kubectl port-forward "$fluxpod" 10080:3030 &
export FLUX_URL="http://localhost:10080/api/flux"
fluxctl list-controllers --all-namespaces

Local endpoint

须知: 这里暴露出的 Flux API, 是非授权的,是通过非安全的通道。除非你完全在本地局域网上,否则不要进行此操作。而且,只是为了试验、验证工作。

如果运行 Flux 在本地环境,比如说 minikube,你可以使用基于 NodePort的service。

一个示范的 manifest为 flux-nodeport.yaml

然后你可以通过 NodePort访问 API,获取端口方法如下 (假定用的是minikube):

fluxport=$(kubectl get svc flux --template '{{ index .spec.ports 0 "nodePort" }}')
export FLUX_URL="http://$(minikube ip):$fluxport/api/flux"
fluxctl list-controllers --all-namespaces

fluxctl

这将允许你通过命令行控制 Flux ,如果没有通过 Weave Cloud连接,这是唯一的与Flux交互的方式。

 github 下载最新的fluxctl版本。

Helm operator (Helm users only)

Kubernetes deployment configuration 文件 helm-operator-deployment.yaml 运行helm operator, 但需要首先编辑,至少提供configuration repo (提供 --git-repo 用于 flux 以及 --git-charts-path 参数)。

$EDITOR helm-operator-deployment.yaml
kubectl create -f flux-helm-release-crd.yaml -f helm-operator-deployment.yaml

连接 fluxctl 到 daemon

你需要告诉fluxctl到哪里找到 Flux API。如果你使用minikube,你可以获得host的 IP address和port,如下:

$ flux_host=$(minikube ip)
$ flux_port=$(kubectl get svc flux --template '{{ index .spec.ports 0 "nodePort" }}')
$ export FLUX_URL=http://$flux_host:$flux_port/api/flux

输出 FLUX_URL 对 fluxctl 就足够了,也可以每次通过--url参数来指定。

定制daemon配置

连接flux到repository

你需要连接 flux 到 Kubernetes manifests存放的repository。通过设置 --git-url--git-branch 参数来实现,位于 flux-deployment.yaml 文件中的manifest。

Helm 用户

需要连接 helm-operator 到同样的 repository,将 helm-operator 指向包含Charts的 git path。这通过为Flux设置 --git-url 和 --git-branch 参数,同样设置 --git-charts-path 参数,在helm-operator-deployment.yaml manifest之中。

添加SSH deploy key到repository

Flux连接到repository需要使用SSH key。有两个选项:

1. 允许 flux为你创建 key。

如果没有指定需要使用的key,Flux 将创建一个。可以通过fluxctl获得public key:

$ fluxctl identity
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCN2ECqUFMR413CURbLBcG41fLY75SfVZCd3LCsJBClVlEcMk4lwXxA3X4jowpv2v4Jw2qqiWKJepBf2UweBLmbWYicHc6yboj5o297//+ov0qGt/uRuexMN7WUx6c93VFGV7Pjd60Yilb6GSF8B39iEVq7GQUC1OZRgQnKZWLSQ==
0c:de:7d:47:52:cf:87:61:52:db:e3:b8:d8:1a:b5:ac
+---[RSA 1024]----+
|            ..=  |
|             + B |
|      .     . +.=|
|     . + .   oo o|
|      . S . .o.. |
|           .=.o  |
|           o =   |
|            +    |
|           E     |
+------[MD5]------+

可选地,你可以在flux log中看见public key。

该public key需要给到托管Git repository的。例如,在GitHub 创建一个SSH deploy key在repository之中,把这个public key给相应的参数。

该 flux logs将显示连接到的 repository以及正在同步的cluster。

当使用Kubernetes,该key作为 Kubernetes secret而存储。你可以重新启动flux,将能够继续使用同样的key。

2. 指定使用的key

从private key创建Kubernetes Secret:

kubectl create secret generic flux-git-deploy --from-file /path/to/identity

现在该secret 到 flux-deployment.yaml manifest文件中:

    ...
    spec:
      volumes:
      - name: git-key
        secret:
          secretName: flux-git-deploy

然后为容器添加 volume mount:

    ...
    spec:
      containers:
      - name: fluxd
        volumeMounts:
        - name: git-key
          mountPath: /etc/fluxd/ssh

可以通过参数来定制选择的key的paths 和 names (examples使用缺省值),分别为:--k8s-secret-name=flux-git-deploy--k8s-secret-volume-mount-path=/etc/fluxd/ssh 以及 --k8s-secret-data-key=identity。

使用 SSH key 允许你维持对 repository的控制。你可以任何时候收回flux对该 repository的控制,通过移除该 deploy key即可。

转载于:https://my.oschina.net/u/2306127/blog/1827186

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值