K3s Helm

2022-08-23 10:49 更新

Helm

Helm 是 Kubernetes 的首選包管理工具。Helm Chart 為 Kubernetes YAML 清單文件提供了模板化語法。通過 Helm,我們可以創(chuàng)建可配置的部署,而不僅僅是使用靜態(tài)文件。有關(guān)創(chuàng)建自己的部署目錄的更多信息,請(qǐng)查看Helm 快速入門

K3s 不需要任何特殊的配置就可以使用 Helm 命令行工具。只要確保你已經(jīng)按照集群訪問一節(jié)正確設(shè)置了你的 kubeconfig。 K3s 包含了一些額外的功能,通過?rancher/helm-release CRD?,使傳統(tǒng)的 Kubernetes 資源清單和 Helm Charts 部署更加容易。

自動(dòng)部署 manifests 和 Helm charts

在?/var/lib/rancher/k3s/server/manifests?中找到的任何 Kubernetes 清單將以類似?kubectl apply?的方式自動(dòng)部署到 K3s。以這種方式部署的 manifests 是作為 AddOn 自定義資源來管理的,可以通過運(yùn)行?kubectl get addon -A?來查看。你會(huì)發(fā)現(xiàn)打包組件的 AddOns,如 CoreDNS、Local-Storage、Traefik 等。AddOns 是由部署控制器自動(dòng)創(chuàng)建的,并根據(jù)它們?cè)?nbsp;manifests 目錄下的文件名命名。

也可以將 Helm Chart 作為 AddOns 部署。K3s 包括一個(gè)Helm Controller,它使用 HelmChart Custom Resource Definition(CRD)管理 Helm Chart。

使用 Helm CRD

注意: K3s 版本至 v0.5.0 使用?k3s.cattle.io/v1?作為 HelmCharts 的 apiVersion。后來的版本已改為?helm.cattle.io/v1?。

HelmChart 資源定義捕獲了大多數(shù)你通常會(huì)傳遞給?helm?命令行工具的選項(xiàng)。下面是一個(gè)例子,說明如何從默認(rèn)的 Chart 資源庫中部署 Grafana,覆蓋一些默認(rèn)的 Chart 值。請(qǐng)注意,HelmChart 資源本身在 ?kube-system? 命名空間,但 Chart 資源將被部署到 ?monitoring ?命名空間。

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: grafana
  namespace: kube-system
spec:
  chart: stable/grafana
  targetNamespace: monitoring
  set:
    adminPassword: "NotVerySafePassword"
  valuesContent: |-
    image:
      tag: master
    env:
      GF_EXPLORE_ENABLED: true
    adminUser: admin
    sidecar:
      datasources:
        enabled: true

HelmChart 字段定義

字段 默認(rèn)值 描述 Helm Argument / Flag Equivalent
name N/A Helm Chart 名稱 NAME
spec.chart N/A 倉庫中的 Helm Chart 名稱,或完整的 HTTPS URL(.tgz)。 CHART
spec.targetNamespace default Helm Chart 目標(biāo)命名空間 --namespace
spec.version N/A Helm Chart 版本(從版本庫安裝時(shí)使用的版本號(hào)) --version
spec.repo N/A Helm Chart 版本庫 URL 地址 --repo
spec.helmVersion v3 Helm 的版本號(hào),可選值為 v2 和v3,默認(rèn)值為 v3 N/A
spec.bootstrap False 如果需要該 Chart 來引導(dǎo)集群(Cloud Controller Manager 等),則設(shè)置為 True。 N/A
spec.set N/A 覆蓋簡單的默認(rèn) Chart 值。這些值優(yōu)先于通過 valuesContent 設(shè)置的選項(xiàng)。 --set / --set-string
spec.jobImage 指定安裝 helm chart 時(shí)要使用的鏡像。如:rancher/klipper-helm:v0.3.0。
spec.valuesContent N/A 通過 YAML 文件內(nèi)容覆蓋復(fù)雜的默認(rèn) Chart 值。 --values
spec.chartContent N/A Base64 編碼的 Chart 存檔.tgz - 覆蓋 spec.chart。 CHART

放在/var/lib/rancher/k3s/server/static/中的內(nèi)容可以通過 Kubernetes APIServer 從集群內(nèi)匿名訪問。這個(gè) URL 可以使用spec.chart字段中的特殊變量%{KUBERNETES_API}%進(jìn)行模板化。例如,打包后的 Traefik 組件從https://%{KUBERNETES_API}%/static/charts/traefik-1.81.0.tgz加載其 Chart。

注意: ?name ?字段應(yīng)遵循 Helm chart 命名規(guī)范。參考這里了解更多。

關(guān)于文件命名要求: ?HelmChart ?和 ?HelmChartConfig ?清單文件名應(yīng)遵守 Kubernetes 對(duì)象的命名要求。Helm Controller 使用文件名來創(chuàng)建對(duì)象;因此,文件名也必須與要求一致。任何相關(guān)的錯(cuò)誤都可以在 rke2-server 的日志中觀察到。下面的例子是使用下劃線產(chǎn)生的錯(cuò)誤:
level=error msg="Failed to process config: failed to process 
/var/lib/rancher/rke2/server/manifests/rke2_ingress_daemonset.yaml: 
Addon.k3s.cattle.io \"rke2_ingress_daemonset\" is invalid: metadata.name: 
Invalid value: \"rke2_ingress_daemonset\": a lowercase RFC 1123 subdomain 
must consist of lower case alphanumeric characters, '-' or '.', and must 
start and end with an alphanumeric character (e.g. 'example.com', regex 
used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]
([-a-z0-9]*[a-z0-9])?)*')"

使用 HelmChartConfig 自定義打包的組件

為了允許覆蓋作為 HelmCharts(如 Traefik)部署的打包組件的值,從 v1.19.0+k3s1 開始的 K3s 版本支持通過 HelmChartConfig 資源自定義部署。HelmChartConfig 資源必須與其對(duì)應(yīng)的 HelmChart 的名稱和命名空間相匹配,并支持提供額外的 "valuesContent",它作為一個(gè)額外的值文件傳遞給?helm?命令。

注意: HelmChart 的?spec.set?值覆蓋了 HelmChart 和 HelmChartConfig 的?spec.valuesContent?設(shè)置。 例如,要自定義打包后的 Traefik 入口配置,你可以創(chuàng)建一個(gè)名為?/var/lib/rancher/k3s/server/manifests/traefik-config.yaml?的文件,并將其填充為以下內(nèi)容。
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    image:
      name: traefik
      tag: v2.6.1
    proxyProtocol:
      enabled: true
      trustedIPs:
        - 10.0.0.0/8
    forwardedHeaders:
      enabled: true
      trustedIPs:
        - 10.0.0.0/8
    ssl:
      enabled: true
      permanentRedirect: false

從 Helm v2 升級(jí)

如果你在以前的 K3s 版本中使用的是 Helm v2,你可以升級(jí)到 v1.17.0+k3s.1 或更新版本,Helm 2 仍然可以使用。如果你想遷移到 Helm 3,這個(gè)Helm 的博文介紹了如何使用插件成功遷移。更多信息請(qǐng)參考 Helm 3 的官方文檔這里。從 v1.17.0+k3s.1 開始,K3s 可以處理 Helm v2 或 Helm v3。只要確保你已經(jīng)按照集群訪問一節(jié)中的例子正確設(shè)置了你的 kubeconfig。

注意,Helm 3 不再需要 Tiller 和?helm init?命令。詳情請(qǐng)參考官方文檔。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)