Flux是一个经过git管理和同步Kubernetes部署状态的支持GitOps的工具,用于完成Docker镜像库与Kubernetes运行时的CD(持续交付)阶段工做的自动化。以下图所示:node
Flux 包含几个部分:git
你不须要最后一个就能使用 Flux; 只须要运行daemon而后经过命令行客户端工具链接便可。github
复制Flux repo而且编辑示范配置文件,位于 deploy/flux-deployment.yaml. 而后应用全部 deploy directory下的配置文件。docker
$EDITOR ./deploy/flux-deployment.yaml kubectl apply -f ./deploy
建立全部的资源,定义在 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
Flux 使用 memcache 来cache docker registry requests.ide
kubectl create -f memcache-dep.yaml -f memcache-svc.yaml
你须要建立一个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
你须要给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
为了使 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
须知: 这里暴露出的 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
这将容许你经过命令行控制 Flux ,若是没有经过 Weave Cloud链接,这是惟一的与Flux交互的方式。
从 github 下载最新的fluxctl版本。
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
到哪里找到 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参数来指定。
你须要链接 flux 到 Kubernetes manifests存放的repository。经过设置 --git-url
和--git-branch
参数来实现,位于 flux-deployment.yaml
文件中的manifest。
须要链接 helm-operator 到一样的 repository,将 helm-operator 指向包含Charts的 git path。这经过为Flux设置 --git-url
和 --git-branch
参数,一样设置 --git-charts-path
参数,在helm-operator-deployment.yaml
manifest之中。
Flux链接到repository须要使用SSH 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。
从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便可。