<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用 helmfile 時,我們首先得了解 helm 的使用,以及如何開發一個 helm chart。helm 是 kubernetes 的包管理工具。在實際的使用場景中我們涉及同時部署多個 chart、區分不同的部署環境、版本控制等需求。基於此需求,可以使用 helmfile 工具。helmfile 通過 helmfile 檔案幫助使用者管理和維護多個 helm chart,可以來區分環境、實現版本控制。github 連結:helmfile[1]
我們在公有云場景或者私有化場景中,同一個產品可能涉及多套環境的設定,例如:每套環境部署依賴的環境差異、使用的資料庫、訊息佇列中介軟體等範例的地址、賬號密碼等都不同。因此針對不同環境我們需要維護開發環境、測試環境、預生產環境、生產環境甚至多套環境的部署檔案以及祕鑰檔案,每個小小的改動將涉及多套環境設定的修改,這給運維人員增加了極大的負擔,以及多套環境的設定如何保持統一,也極大的考驗運維人員的細緻程度,極大的增加了運維的複雜度。同時涉及的資料庫中介軟體範例的賬戶密碼的存放,也給運維流程增加了巨大的安全隱患。基於上面的述求,這裡可以將業務部署的各服務檔案改造成 helm chart,同時區分多套環境以及版本控制,我們使用 helmfile 來統一部署管理。涉及範例涉及的賬戶密碼,我們可以使用 helm secrets 來實現加密解密,以及來保證運維的安全性,從而極大的減少運維的複雜度。關於 helm secrets 的使用,我們在其他文章進行的詳細的介紹。
helmfile 提供了多種安裝方式,具體可以參考:helmfile release[2]helmfile 還支援執行在容器中,可以很方便的整合到 CICD 的流程中:
# helm 2 $ docker run --rm --net=host -v "${HOME}/.kube:/root/.kube" -v "${HOME}/.helm:/root/.helm" -v "${PWD}:/wd" --workdir /wd quay.io/roboll/helmfile:v0.135.0 helmfile sync # helm 3 $ docker run --rm --net=host -v "${HOME}/.kube:/root/.kube" -v "${HOME}/.config/helm:/root/.config/helm" -v "${PWD}:/wd" --workdir /wd quay.io/roboll/helmfile:helm3-v0.135.0 helmfile sync
helmfile.yaml 是 helmfile 的核心檔案,其用來宣告所有的設定。下面會簡要介紹一下,具體說明可以參考官方檔案:helmfile-configuration[3]
# 宣告 repo 設定 repositories: - name: <repo-name> # url: repo url # 可以設定基礎設定 或 tls 認證 # certFile: certificate 檔案 # keyFile: key 檔案 # username: 使用者名稱 # password: 密碼 # helm 二進位制檔案的路徑 helmBinary: path/to/helm3 # helm 的一些預設設定,這些設定與 `helm SUBCOMMAND` 相同,可以通過這個設定宣告一些,預設的設定 helmDefaults: tillerNamespace: tiller-namespace #dedicated default key for tiller-namespace tillerless: false #dedicated default key for tillerless kubeContext: kube-context #dedicated default key for kube-context (--kube-context) cleanupOnFail: false #dedicated default key for helm flag --cleanup-on-fail # additional and global args passed to helm (default "") args: - "--set k=v" # verify the chart before upgrading (only works with packaged charts not directories) (default false) verify: true # wait for k8s resources via --wait. (default false) wait: true # time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness) (default 300) timeout: 600 # performs pods restart for the resource if applicable (default false) recreatePods: true # forces resource update through delete/recreate if needed (default false) force: false # when using helm 3.2+, automatically create release namespaces if they do not exist (default true) createNamespace: true ... # 為 helmfile 中所有的 release 設定相同的 label,可用於為所有 release 標記相同的版本 commonLabels: hello: world # 設定 release 設定(支援多 release) releases: # 遠端 chart 範例(chart 已經上傳到 remote 倉庫) - name: vault # name of this release namespace: vault # target namespace createNamespace: true # helm 3.2+ automatically create release namespace (default true) labels: # Arbitrary key value pairs for filtering releases foo: bar chart: roboll/vault-secret-manager # the chart being installed to create this release, referenced by `repository/chart` syntax version: ~1.24.1 # the semver of the chart. range constraint is supported condition: vault.enabled # The values lookup key for filtering releases. Corresponds to the boolean value of `vault.enabled`, where `vault` is an arbitrary value missingFileHandler: Warn # set to either "Error" or "Warn". "Error" instructs helmfile to fail when unable to find a values or secrets file. When "Warn", it prints the file and continues. # Values files used for rendering the chart values: # Value files passed via --values - vault.yaml # Inline values, passed via a temporary values file and --values, so that it doesn't suffer from type issues like --set - address: https://vault.example.com # Go template available in inline values and values files. - image: # The end result is more or less YAML. So do `quote` to prevent number-like strings from accidentally parsed into numbers! # See https://github.com/roboll/helmfile/issues/608 tag: {{ requiredEnv "IMAGE_TAG" | quote }} # Otherwise: # tag: "{{ requiredEnv "IMAGE_TAG" }}" # tag: !!string {{ requiredEnv "IMAGE_TAG" }} db: username: {{ requiredEnv "DB_USERNAME" }} # value taken from environment variable. Quotes are necessary. Will throw an error if the environment variable is not set. $DB_PASSWORD needs to be set in the calling environment ex: export DB_PASSWORD='password1' password: {{ requiredEnv "DB_PASSWORD" }} proxy: # Interpolate environment variable with a fixed string domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com scheme: {{ env "SCHEME" | default "https" }} # Use `values` whenever possible! # `set` translates to helm's `--set key=val`, that is known to suffer from type issues like https://github.com/roboll/helmfile/issues/608 set: # single value loaded from a local file, translates to --set-file foo.config=path/to/file - name: foo.config file: path/to/file # set a single array value in an array, translates to --set bar[0]={1,2} - name: bar[0] values: - 1 - 2 # set a templated value - name: namespace value: {{ .Namespace }} # will attempt to decrypt it using helm-secrets plugin # 本地 chart 範例(chart 儲存在本地) - name: grafana # name of this release namespace: another # target namespace chart: ../my-charts/grafana # the chart being installed to create this release, referenced by relative path to local helmfile values: - "../../my-values/grafana/values.yaml" # Values file (relative path to manifest) - ./values/{{ requiredEnv "PLATFORM_ENV" }}/config.yaml # Values file taken from path with environment variable. $PLATFORM_ENV must be set in the calling environment. wait: true # 可以巢狀其他的 helmfiles,支援從本地和遠端拉取 helmfile helmfiles: - path: path/to/subhelmfile.yaml # label 選擇器可以過濾需要覆蓋的 release selectors: - name=prometheus # 覆蓋 value values: # 使用檔案覆蓋 - additional.values.yaml # 覆蓋單獨的 key - key1: val1 - # 遠端拉取設定 path: git::https://github.com/cloudposse/helmfiles.git@releases/kiam.yaml?ref=0.40.0 # 如果指向不存在路徑,則列印告警錯誤 missingFileHandler: Error # 多環境管理 environments: # 當沒有設定 `--environment NAME` 時,使用 default default: values: # 內容可以是檔案路徑或者 key:value - environments/default/values.yaml - myChartVer: 1.0.0-dev # "production" 環境,當設定了 `helmfile --environment production sync` 時 production: values: - environment/production/values.yaml - myChartVer: 1.0.0 # disable vault release processing - vault: enabled: false ## `secrets.yaml` is decrypted by `helm-secrets` and available via `{{ .Environment.Values.KEY }}` secrets: - environment/production/secrets.yaml # 當佔不到 `environments.NAME.values` 時,可以設定為 "Error", "Warn", "Info", "Debug",預設是 "Error" missingFileHandler: Error # 分層管理,可以將所有檔案合併,順序為:environments.yaml < - defaults.yaml < - templates.yaml < - helmfile.yaml bases: - environments.yaml - defaults.yaml - templates.yaml # API 功能 apiVersions: - example/v1
這裡,編排好相關的 helmfile 後,我們可以使用下面的命令進行偵錯
# 檢視目錄結構 $ ls README.org environments helm helmfile helmfile.yaml releases # 檢視helmfile.yaml $ cat helmfile.yaml environments: # 不指定環境時,預設使用預設測試環境 default: values: - environments/test/config.yaml - environments/test/versions.yaml - environments/test//namespaces.yaml secrets: - environments/test/secrets.yaml test: values: - environments/test/config.yaml - environments/test/versions.yaml - environments/test/namespaces.yaml secrets: - environments/test/secrets.yaml helmDefaults: createNamespace: true releases: - name: password-secrets kubeContext: {{ .Values.kubeContext.service }} namespace: {{ .Values.namespaces.service }} chart: helm/charts/secrets values: - releases/secrets.yaml.gotmpl labels: app: secrets - name: web kubeContext: {{ .Values.kubeContext.business }} namespace: {{ .Values.namespaces.business }} chart: helm/charts/web values: - releases/web.yaml.gotmpl labels: app: web # helmfile偵錯 $ helmfile -e test template
helmfile -e test sync
這裡可以通過--selector
指定 label 來進行更新或者刪除:
# 更新web服務 helmfile -e test --selector app=web sync # 刪除web服務 helmfile -e test --selector app=web delete
# 檢視檔案的變更資訊 helmfile -e test --selector app=web diff # 只檢視檔案的變更部分資訊 helmfile -e test --selector app=web diff --context 4
[1]helmfile: https://github.com/roboll/helmfile
[2]helmfile release: https://github.com/roboll/helmfile/releases
[3]helmfile-configuration: https://github.com/roboll/helmfile#configuration
宣告:本文分享的軟體服務以及語言均源於網路,只做針對這些軟體服務或者語言的使用實踐進行分享和整理。本公眾號不對任何人進行推薦,在使用這些軟體或程式設計程式碼時有可能會引發一些問題,甚至導致資料丟失,請您自行承擔相應的後果!本公眾號概不負責! 若您覺得公眾號釋出的內容若侵犯到您的權益,請聯絡及時管理員溝通!
以上就是helmfile宣告式部署Helm Chart使用詳解的詳細內容,更多關於helmfile部署Helm Chart的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45