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

相關文章
相關標籤/搜索