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

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

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

Flux 包含几个部分:git

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

你不须要最后一个就能使用 Flux; 只须要运行daemon而后经过命令行客户端工具链接便可。github

快速安装

复制Flux repo而且编辑示范配置文件,位于 deploy/flux-deployment.yaml. 而后应用全部 deploy directory下的配置文件。docker

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

Helm 用户

建立全部的资源,定义在 deploy-helm 目录,以下:api

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

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

细节描述

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

注意

Helm用户须要 deploy-helm 目录。ssh

cd deploy

Memcache

Flux 使用 memcache 来cache docker registry requests.ide

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便可。

相关文章
相关标签/搜索