Helm命令在精不在多
來源:think123
helm 官方文件
hi, bro, 最好的永遠是官方文件:
就是它上面的東西太多了,我知道你看得費力,所以我給你總結了下面的常用命令
helm 新增倉庫
helm repo add elastic
helm repo add gitlab
helm repo add harbor
helm repo add traefik
//新增國內倉庫
helm repo add stable
helm repo add aliyun
helm repo update
helm repo list
搜尋 chart
1. helm search repo traefik/traefik
2. helm search repo nginx
安裝或者檢視出錯時
出現報錯 Error: Kubernetes cluster unreachable: Get " dial tcp 127.0.0.1:8080
需要指定 kubernetes api server 地址,可以透過
helm --kube-apiserver address
安裝 chart
1. helm repo update
2. helm install bitnami/mysql --generate-name
★在 Helm 3 中,必須主動指定 release 名稱,或者增加 --generate-name 的引數使 Helm 自動生成
”
檢視安裝的 chart
1. helm list(helm ls)
解除安裝 chart
1. helm uninstall mysql-xxx
安裝 traefik
安裝 traefik,並指定對應引數
helm install --set deployment.kind=DaemonSet --set namespaceOverride=traefik --set service.enabled=false traefik traefik/traefik
埠轉發,像訪問本地服務一樣訪問 traefik
kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" -n traefik --output=name) 9000:9000 -n traefik
更新服務
helm upgrade --set deployment.kind=DaemonSet --set namespaceOverride=traefik --set service.enabled=false traefik traefik/traefik
配合 Azure 使用
helm install --set deployment.kind=DaemonSet --set namespaceOverride=traefik --set service.annotations."service.beta.kubernetes.io/azure-load-balancer-internal"=true traefik traefik/traefik
安裝時報錯記憶體不足
0/2 nodes are available: 2 Insufficient memory. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod
這是因為我們的 chart 在安裝的時候,k8s 叢集記憶體不足。
可以透過下面的命令檢視 node 的記憶體狀況
kubectl describe node
可以在安裝的時候調整服務所需的記憶體,CPU 等,也可以給叢集加機器新增記憶體。
檢視 chart 資訊
檢視基本資訊
helm show chart traefik/traefik
檢視所有資訊
helm show all traefik/traefik
檢視 chart 的可配置選項
1. helm show values traefik/traefik
然後,你可以使用 YAML 格式的檔案覆蓋上述任意配置項,並在安裝過程中使用該檔案
2. echo '{web.port: 8080}' > values.yml
3. helm install -f values.yml traefik/traefik --generate-name
還可以直接使用 --set web.port=8080 指定,優先順序比-f(--values)高
建立並安裝自己的 charts
1. helm create think-manifesto
2. heml package think-manifesto
3. helm install think-manifesto 上一步打包好的tgz包
debug chart 而不安裝
helm install --debug --dry-run goodly-guppy ./mychart
這樣不會安裝應用(chart)到你的 kubenetes 叢集中,只會渲染模板內容到控制檯
如果想看渲染出錯的內容,可以加上另外引數
helm install --dry-run --disable-openapi-validation moldy-jaguar ./mychart
除錯
+ helm lint 是驗證chart是否遵循最佳實踐的首選工具。
+ helm template --debug 在本地測試渲染chart模板。
+ helm install --dry-run --debug:我們已經看到過這個技巧了,這是讓伺服器渲染模板的好方法,然後返回生成的清單檔案。
+ helm get manifest: 這是檢視安裝在伺服器上的模板的好方法。
helm template --dry-run --debug --disable-openapi-validation thinkpro-test .\think-manifesto\
helm 內建物件
chart_template_guide/builtin_objects/
Release
Release 物件描述了版本釋出本身。包含了以下物件:
1. Release.Name: release名稱
2. Release.Namespace: 版本中包含的名稱空間(如果manifest沒有覆蓋的話)
Values
Values 物件是從 values.yaml 檔案和使用者提供的檔案傳進模板的。預設為空
Chart
Chart.yaml 檔案內容。 Chart.yaml 裡的所有資料在這裡都可以可訪問的。比如 {{ .Chart.Name }}-{{ .Chart.Version }} 會列印出 mychart-0.1.0
常用函式
模板中頻繁使用的一個函式是 default: default DEFAULT_VALUE GIVEN_VALUE。 這個函式允許你在模板中指定一個預設值,以防這個值被忽略. 當然還可以使用管道符配合使用,比如
drink: {{ .Values.favorite.drink | default "tea" | quote }}
刪除空白
{{-
(包括新增的橫槓和空格)表示向左刪除空白, 而 -}}
表示右邊的空格應該被去掉。 一定注意空格就是換行
要確保-和其他命令之間有一個空格。 {{- 3 }}
表示“刪除左邊空格並列印 3”,而{{-3 }}
表示“列印-3”。
模板的使用
我們一般會在_helpers.tpl 中寫我們的模板程式碼
宣告一個模板
{{- define "mychart.labels" }}
labels:
generator: helm
date: {{ now | htmlDate }}
{{- end }}
使用模板
我們可以使用 template templateName 來引用我們的模板
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
{{- template "mychart.labels" }}
如果我們在模板
{- define "mychart.labels" }}
labels:
generator: helm
date: {{ now | htmlDate }}
chart: {{ .Chart.Name }}
version: {{ .Chart.Version }}
{{- end }}
中使用 .Chart,會發現渲染出錯(--disable-openapi-validation
可以檢視渲染的內容),這是因為沒有內容傳入到模板中(可以認為預設範圍是在模板),所以無法使用 . 訪問任何內容. 需要傳遞一個範圍給模板
{{- template "mychart.labels" . }}
注意這個在 template 呼叫末尾傳入的.,我們可以簡單傳入.Values
或.Values.favorite
或其他需要的範圍。但一定要是頂層範圍。
由於 template 是一個行為,不是方法,無法將 template 呼叫的輸出傳給其他方法,資料只是簡單地按行插入。
為了處理這個問題,Helm 提供了一個 include 的可選項,可以將模板內容匯入當前管道,然後傳遞給管道中的其他方法。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
labels:
{{ include "mychart.app" . | indent 4 }}
相較於使用 template,在 helm 中使用 include 被認為是更好的方式 只是為了更好地處理 YAML 文件的輸出格式
使用技巧
配置更新後 Pod 自動重啟
利用 k8s 的 Deployment 更改後的自動更新,我們可以用來更新應用配置,簡單說就是更新 Secrets 或 ConfigMaps 後,計算它的最新 hash 值,然後將這個 hash 值 patch 到相應的 Deployment 中。
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
這樣,假如這個配置有問題,比如造成應用崩潰了,k8s 也會認為新的 ReplicaSet 失敗了,不會將流量導過去,從而不繼續滾動更新,避免了了由配置更新導致的應用崩潰問題。
Image pull credentials
有些時候,Docker 映象可能需要使用者名稱與密碼去 registry 拉取,那麼,你就需要專門為此建立一個模板了。 比如 value 是:
imageCredentials:
registry: quay.io
username: someone
password: sillyness
而模板就是:
{{- define "imagePullSecret" }}
{{- printf "{"auths": {"%s": {"auth": "%s"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}
當然,需要注意多個 Deployment 共享一個 Chart 的情況,這時候可能會出現 secrets 衝突的情況,可考慮單為此單獨建立一個 Config Chart,然後作為 App Chart 的依賴。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2993460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- helm常用命令
- helm常用命令解析
- helm包安裝部署相關命令
- 【閃點】富在術數不在勞身; 利在勢局不在力耕!
- 為什麼不在你的生活中加入更多“精益”?
- Linux 命令 ls命令系列(精華)Linux
- Helm, 在Kubernetes中部署應用的利器
- 適用於初學者的基本 kubectl 和 Helm 命令
- kubernetes實戰篇之helm填坑與基本命令
- Helm
- 利用 Helm 在各類 Kubernetes 中安裝 RainbondAI
- helm在k8s上部署Elasticsearch和KibanaK8SElasticsearch
- helm upgrade
- helm學習
- helm部署mysqlMySql
- helm 部署PrometheusPrometheus
- 為什麼篝火在電子遊戲裡無處不在?遊戲
- helm安裝mysqlMySql
- helm安裝教程
- [kubernetes]helm安裝
- 精讀《React 的多型性》React多型
- AUTOCAD——多段線命令
- DBA 那麼多命令
- 如何使用 Helm 在 K8s 上整合 Prometheus 和 Grafana|Part 1K8SPrometheusGrafana
- Linux常用精簡命令實訓練習Linux
- 從Helm2遷移到 Helm v3 的最佳實踐
- 使用scp命令在多個Linux系統間進行檔案複製Linux
- Helm部署xxl-job
- helm安裝及配置
- Kubernetes Helm入門指南
- gdb多執行緒多程序除錯命令執行緒除錯
- 如何應對在多個流程中實施精益六西格瑪的挑戰?
- CSS 火焰?不在話下CSS
- helm chart denpence 怎麼使用
- 透過 Helm Chart 部署 Easysearch
- 簡述Helm及其優勢
- 使用 Bitnami Helm 安裝 KafkaKafka
- Helm部署和體驗jenkinsJenkins