一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何開發(fā)一個(gè)helm chart

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-05-16 09:28 ? 次閱讀

說(shuō)明

使用helmfile時(shí),我們首先得了解helm的使用,以及如何開發(fā)一個(gè)helm chart。

helm是kubernetes的包管理工具。在實(shí)際的使用場(chǎng)景中我們涉及同時(shí)部署多個(gè)chart、區(qū)分不同的部署環(huán)境、版本控制等需求?;诖诵枨?,可以使用helmfile工具。

helmfile通過(guò)helmfile文件幫助用戶管理和維護(hù)多個(gè)helm chart,可以來(lái)區(qū)分環(huán)境、實(shí)現(xiàn)版本控制。

github鏈接:https://github.com/roboll/helmfile

場(chǎng)景說(shuō)明

我們?cè)诠性茍?chǎng)景或者私有化場(chǎng)景中,同一個(gè)產(chǎn)品可能涉及多套環(huán)境的配置,例如:每套環(huán)境部署依賴的環(huán)境差異、使用的數(shù)據(jù)庫(kù)、消息隊(duì)列中間件等實(shí)例的地址、賬號(hào)密碼等都不同。因此針對(duì)不同環(huán)境我們需要維護(hù)開發(fā)環(huán)境、測(cè)試環(huán)境、預(yù)生產(chǎn)環(huán)境、生產(chǎn)環(huán)境甚至多套環(huán)境的部署文件以及秘鑰文件,每個(gè)小小的改動(dòng)將涉及多套環(huán)境配置的修改,這給運(yùn)維人員增加了極大的負(fù)擔(dān),以及多套環(huán)境的配置如何保持統(tǒng)一,也極大的考驗(yàn)運(yùn)維人員的細(xì)致程度,極大的增加了運(yùn)維的復(fù)雜度。同時(shí)涉及的數(shù)據(jù)庫(kù)中間件實(shí)例的賬戶密碼的存放,也給運(yùn)維流程增加了巨大的安全隱患。

基于上面的述求,這里可以將業(yè)務(wù)部署的各服務(wù)文件改造成helm chart,同時(shí)區(qū)分多套環(huán)境以及版本控制,我們使用helmfile來(lái)統(tǒng)一部署管理。涉及實(shí)例涉及的賬戶密碼,我們可以使用helm secrets來(lái)實(shí)現(xiàn)加密解密,以及來(lái)保證運(yùn)維的安全性,從而極大的減少運(yùn)維的復(fù)雜度。關(guān)于helm secrets的使用,我們?cè)谄渌恼逻M(jìn)行的詳細(xì)的介紹。

安裝

helmfile提供了多種安裝方式,具體可以參考:https://github.com/roboll/helmfile/releases

helmfile還支持運(yùn)行在容器中,可以很方便的集成到CICD的流程中:

#helm2
$dockerrun--rm--net=host-v"${HOME}/.kube:/root/.kube"-v"${HOME}/.helm:/root/.helm"-v"${PWD}:/wd"--workdir/wdquay.io/roboll/helmfile:v0.135.0helmfilesync
#helm3
$dockerrun--rm--net=host-v"${HOME}/.kube:/root/.kube"-v"${HOME}/.config/helm:/root/.config/helm"-v"${PWD}:/wd"--workdir/wdquay.io/roboll/helmfile:helm3-v0.135.0helmfilesync

helmfile.yaml介紹

helmfile.yaml 是 helmfile 的核心文件,其用來(lái)聲明所有的配置。下面會(huì)簡(jiǎn)要介紹一下,具體說(shuō)明可以參考官方文檔:https://github.com/roboll/helmfile#configuration

#聲明repo配置
repositories:
-name:
#url:repourl
#可以設(shè)置基礎(chǔ)配置或tls認(rèn)證
#certFile:certificate文件
#keyFile:key文件
#username:用戶名
#password:密碼

#helm二進(jìn)制文件的路徑
helmBinary:path/to/helm3

#helm的一些默認(rèn)設(shè)置,這些配置與`helmSUBCOMMAND`相同,可以通過(guò)這個(gè)配置聲明一些,默認(rèn)的配置
helmDefaults:
tillerNamespace:tiller-namespace#dedicateddefaultkeyfortiller-namespace
tillerless:false#dedicateddefaultkeyfortillerless
kubeContext:kube-context#dedicateddefaultkeyforkube-context(--kube-context)
cleanupOnFail:false#dedicateddefaultkeyforhelmflag--cleanup-on-fail
#additionalandglobalargspassedtohelm(default"")
args:
-"--setk=v"
#verifythechartbeforeupgrading(onlyworkswithpackagedchartsnotdirectories)(defaultfalse)
verify:true
#waitfork8sresourcesvia--wait.(defaultfalse)
wait:true
#timeinsecondstowaitforanyindividualKubernetesoperation(likeJobsforhooks,andwaitsonpod/pvc/svc/deploymentreadiness)(default300)
timeout:600
#performspodsrestartfortheresourceifapplicable(defaultfalse)
recreatePods:true
#forcesresourceupdatethroughdelete/recreateifneeded(defaultfalse)
force:false
#whenusinghelm3.2+,automaticallycreatereleasenamespacesiftheydonotexist(defaulttrue)
createNamespace:true
...

#為helmfile中所有的release設(shè)置相同的label,可用于為所有release標(biāo)記相同的版本
commonLabels:
hello:world

#設(shè)置release配置(支持多release)
releases:
#遠(yuǎn)程chart示例(chart已經(jīng)上傳到remote倉(cāng)庫(kù))
-name:vault#nameofthisrelease
namespace:vault#targetnamespace
createNamespace:true#helm3.2+automaticallycreatereleasenamespace(defaulttrue)
labels:#Arbitrarykeyvaluepairsforfilteringreleases
foo:bar
chart:roboll/vault-secret-manager#thechartbeinginstalledtocreatethisrelease,referencedby`repository/chart`syntax
version:~1.24.1#thesemverofthechart.rangeconstraintissupported
condition:vault.enabled#Thevalueslookupkeyforfilteringreleases.Correspondstothebooleanvalueof`vault.enabled`,where`vault`isanarbitraryvalue
missingFileHandler:Warn#settoeither"Error"or"Warn"."Error"instructshelmfiletofailwhenunabletofindavaluesorsecretsfile.When"Warn",itprintsthefileandcontinues.
#Valuesfilesusedforrenderingthechart
values:
#Valuefilespassedvia--values
-vault.yaml
#Inlinevalues,passedviaatemporaryvaluesfileand--values,sothatitdoesn'tsufferfromtypeissueslike--set
-address:https://vault.example.com
#Gotemplateavailableininlinevaluesandvaluesfiles.
-image:
#TheendresultismoreorlessYAML.Sodo`quote`topreventnumber-likestringsfromaccidentallyparsedintonumbers!
#Seehttps://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"}}
#valuetakenfromenvironmentvariable.Quotesarenecessary.Willthrowanerroriftheenvironmentvariableisnotset.$DB_PASSWORDneedstobesetinthecallingenvironmentex:exportDB_PASSWORD='password1'
password:{{requiredEnv"DB_PASSWORD"}}
proxy:
#Interpolateenvironmentvariablewithafixedstring
domain:{{requiredEnv"PLATFORM_ID"}}.my-domain.com
scheme:{{env"SCHEME"|default"https"}}
#Use`values`wheneverpossible!
#`set`translatestohelm's`--setkey=val`,thatisknowntosufferfromtypeissueslikehttps://github.com/roboll/helmfile/issues/608
set:
#singlevalueloadedfromalocalfile,translatesto--set-filefoo.config=path/to/file
-name:foo.config
file:path/to/file
#setasinglearrayvalueinanarray,translatesto--setbar[0]={1,2}
-name:bar[0]
values:
-1
-2
#setatemplatedvalue
-name:namespace
value:{{.Namespace}}
#willattempttodecryptitusinghelm-secretsplugin

#本地chart示例(chart保存在本地)
-name:grafana#nameofthisrelease
namespace:another#targetnamespace
chart:../my-charts/grafana#thechartbeinginstalledtocreatethisrelease,referencedbyrelativepathtolocalhelmfile
values:
-"../../my-values/grafana/values.yaml"#Valuesfile(relativepathtomanifest)
-./values/{{requiredEnv"PLATFORM_ENV"}}/config.yaml#Valuesfiletakenfrompathwithenvironmentvariable.$PLATFORM_ENVmustbesetinthecallingenvironment.
wait:true

#可以嵌套其他的helmfiles,支持從本地和遠(yuǎn)程拉取helmfile
helmfiles:
-path:path/to/subhelmfile.yaml
#label選擇器可以過(guò)濾需要覆蓋的release
selectors:
-name=prometheus
#覆蓋value
values:
#使用文件覆蓋
-additional.values.yaml
#覆蓋單獨(dú)的key
-key1:val1
-#遠(yuǎn)程拉取配置
path:git://github.com/cloudposse/helmfiles.git@releases/kiam.yaml?ref=0.40.0
#如果指向不存在路徑,則打印告警錯(cuò)誤
missingFileHandler:Error

#多環(huán)境管理
environments:
#當(dāng)沒(méi)有設(shè)置`--environmentNAME`時(shí),使用default
default:
values:
#內(nèi)容可以是文件路徑或者key:value
-environments/default/values.yaml
-myChartVer:1.0.0-dev
#"production"環(huán)境,當(dāng)設(shè)置了`helmfile--environmentproductionsync`時(shí)
production:
values:
-environment/production/values.yaml
-myChartVer:1.0.0
#disablevaultreleaseprocessing
-vault:
enabled:false
##`secrets.yaml`isdecryptedby`helm-secrets`andavailablevia`{{.Environment.Values.KEY}}`
secrets:
-environment/production/secrets.yaml
#當(dāng)占不到`environments.NAME.values`時(shí),可以設(shè)置為"Error","Warn","Info","Debug",默認(rèn)是"Error"
missingFileHandler:Error

#分層管理,可以將所有文件合并,順序?yàn)椋篹nvironments.yaml 

helmfile調(diào)試

這里,編排好相關(guān)的helmfile后,我們可以使用下面的命令進(jìn)行調(diào)試

#查看目錄結(jié)構(gòu)
$ls
README.orgenvironmentshelmhelmfilehelmfile.yamlreleases
#查看helmfile.yaml
$cathelmfile.yaml
environments:
#不指定環(huán)境時(shí),默認(rèn)使用默認(rèn)測(cè)試環(huán)境
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調(diào)試
$helmfile-etesttemplate

安裝chart

helmfile-etestsync

helmfile更新或者刪除某個(gè)chart

這里可以通過(guò)--selector指定label來(lái)進(jìn)行更新或者刪除:

#更新web服務(wù)
helmfile-etest--selectorapp=websync
#刪除web服務(wù)
helmfile-etest--selectorapp=webdelete

查看變更

#查看文件的變更信息
helmfile-etest--selectorapp=webdiff
#只查看文件的變更部分信息
helmfile-etest--selectorapp=webdiff--context4
審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3884

    瀏覽量

    65573
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    504

    瀏覽量

    22319

原文標(biāo)題:helmfile使用

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過(guò)定義、打包和部署應(yīng)用程序來(lái)簡(jiǎn)化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決在 Kubernetes
    的頭像 發(fā)表于 04-30 13:42 ?507次閱讀
    Kubernetes <b class='flag-5'>Helm</b>入門指南

    波形繪制——Waveform Chart

    軸則為個(gè)數(shù)或時(shí)間。這兩個(gè)元件最大的差別在于使用的方式,Chart 元件會(huì)有資料保留的特性,所以就算是每次都只輸入點(diǎn),它還是可以幫你畫出個(gè)
    發(fā)表于 12-29 12:03

    使用Helm 在容器服務(wù)k8s集群鍵部署wordpress

    :包含了創(chuàng)建Kubernetes的個(gè)應(yīng)用實(shí)例的必要信息config:包含了應(yīng)用發(fā)布配置信息release:是個(gè)chart及其配置的
    發(fā)表于 03-29 13:38

    c#桌面應(yīng)用開發(fā)chart控件使用,添加數(shù)據(jù)到chart中發(fā)現(xiàn)它直添加是為什么?

    c#桌面應(yīng)用開發(fā)chart控件使用,在添加數(shù)據(jù)到chart中,發(fā)現(xiàn)它直添加,我想讓它只保存最新的n個(gè)數(shù)據(jù),那么前面的數(shù)據(jù)該怎么刪除
    發(fā)表于 10-30 08:18

    Helm Kubernetes包管理器

    helm.zip
    發(fā)表于 04-27 14:25 ?2次下載
    <b class='flag-5'>Helm</b> Kubernetes包管理器

    Helm常用命令(chart安裝、升級(jí)、回滾、卸載等操作)

    Helm 針對(duì) Kubernetes 的 Helm 包管理器。
    的頭像 發(fā)表于 09-13 14:54 ?7224次閱讀

    Helm些概念及用法

    應(yīng)用,使用?Helm?(https://helm.sh)是個(gè)很不錯(cuò)的選擇,它具備如下的能力: 簡(jiǎn)化部署?:Helm允許使用單個(gè)命令輕松部署
    的頭像 發(fā)表于 05-30 09:51 ?1389次閱讀
    <b class='flag-5'>Helm</b>的<b class='flag-5'>一</b>些概念及用法

    Helm部署MinIO集群

    Helm部署MinIO集群
    的頭像 發(fā)表于 12-03 09:44 ?987次閱讀
    <b class='flag-5'>Helm</b>部署MinIO集群

    請(qǐng)問(wèn)如何使用Helm在K8s上集成Prometheus呢?

    ArtifactHub 為 Helm Chart 提供了公共和私有資源庫(kù)。我們將使用這些 Helm Chart 來(lái)設(shè)置 Kubernetes 集群中的 pod 和服務(wù)。
    的頭像 發(fā)表于 01-10 17:24 ?860次閱讀
    請(qǐng)問(wèn)如何使用<b class='flag-5'>Helm</b>在K8s上集成Prometheus呢?

    HarmonyOS開發(fā)案例:【 switch、chart組件的使用】

    基于switch組件和chart組件,實(shí)現(xiàn)線形圖、占比圖、柱狀圖,并通過(guò)switch切換chart組件數(shù)據(jù)的動(dòng)靜態(tài)顯示。
    的頭像 發(fā)表于 04-25 20:58 ?900次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>案例:【 switch、<b class='flag-5'>chart</b>組件的使用】

    Chart FX 7入門

    FX 7不僅僅是個(gè)修訂版產(chǎn)品,而是個(gè)完全重新設(shè)計(jì)的產(chǎn)品,它將使您的.NET應(yīng)用程序達(dá)到個(gè)
    的頭像 發(fā)表于 01-03 11:14 ?351次閱讀

    Chart FX-選擇圖表輸出

    的格式即可。 您也可以指示 Chart FX 以多種格式渲染圖表。配置圖表的方法也有多種。 作為個(gè)服務(wù)器控件,Chart FX 支持種名
    的頭像 發(fā)表于 01-05 11:06 ?345次閱讀
    <b class='flag-5'>Chart</b> FX-選擇圖表輸出

    Chart FX-調(diào)整設(shè)置和功能

    體驗(yàn)。即雖然它是個(gè)分布式應(yīng)用程序,可以同時(shí)為數(shù)百甚至數(shù)千個(gè)用戶提供服務(wù),但要讓其像傳統(tǒng)的桌面應(yīng)用程序樣運(yùn)行。Chart FX 對(duì)服務(wù)器性
    的頭像 發(fā)表于 01-08 16:49 ?318次閱讀
    <b class='flag-5'>Chart</b> FX-調(diào)整設(shè)置和功能

    Chart FX——打印圖表

    一個(gè)重要的問(wèn)題是圖表打印的頁(yè)數(shù)。當(dāng)您需要打印包含大量點(diǎn)的圖表(可滾動(dòng))時(shí),Chart FX 將根據(jù)需要打印盡可能多的頁(yè)面。若使用壓縮屬性, Chart FX 會(huì)通過(guò)重新計(jì)算適當(dāng)?shù)闹凳顾悬c(diǎn)都能
    的頭像 發(fā)表于 01-13 09:12 ?286次閱讀
    <b class='flag-5'>Chart</b> FX——打印圖表

    Chart FX——圖表導(dǎo)出

    Web格式的圖片(如 PNG 或 JPEG)。 Chart FX 中還有其他文件類型,稱為 “圖表模板”,允許您將圖表的外觀(顏色、圖表類型和樣式、可視工具等)保存在個(gè)文件中,以便以后將其應(yīng)用到另
    的頭像 發(fā)表于 01-15 14:38 ?288次閱讀
    <b class='flag-5'>Chart</b> FX——圖表導(dǎo)出