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