? ? ? ?在上一章節中,我們已經介紹了Helm的部署和基本使用方法。本章將通過實際案例,詳細演示如何使用Helm在Kubernetes集群中部署應用。
一、Helm 核心價值解析
優勢 | 解決的問題 | 類比傳統方式 |
---|---|---|
應用模板化 | 重復編寫 YAML 文件 | 手動編寫 20+ 資源清單文件 |
版本控制 | 缺乏部署歷史追蹤 | kubectl apply 無版本記錄 |
依賴管理 | 多服務依賴關系復雜 | 手動管理數據庫/緩存等依賴 |
配置繼承 | 環境差異配置混亂 | 復制修改多套 YAML 文件 |
一鍵部署 | 部署流程碎片化 | 手動執行 kubectl 命令序列 |
二、案例-使用helm部署elasticsearch-exporter
1.搜索chart包
helm search repo elasticsearch-exporter
2.下載chart
helm pull aliyun/elasticsearch-exporter
3.解壓
tar xf elasticsearch-exporter-0.1.2.tgz
4.修改模板內容
[root@master-1 ~]# cd elasticsearch-exporter/
[root@master-1 elasticsearch-exporter]# vim templates/deployment.yaml
apiVersion: apps/v1
...
5.部署chart
[root@master-1 ~]# helm install liux-es-exporter elasticsearch-exporter
NAME: liux
LAST DEPLOYED: Tue Jul 29 15:48:08 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:export POD_NAME=$(kubectl get pods --namespace default -l "app=elasticsearch-exporter" -o jsonpath="{.items[0].metadata.name}")echo "Visit http://127.0.0.1:9108/metrics to use your application"kubectl port-forward $POD_NAME 9108:9108 --namespace default[root@master-1 ~]# helm list
[root@master-1 ~]# kubectl get pods,svc
6.測試? ? ??
? ? ? ? 如下圖所示,已經開啟了一個集群內部訪問的ip+端口
? ? ? ?通過集群內部的ip+端口訪問,如下圖所示,已經采集到es的信息了。
三、案例-使用helm部署traefik
1.概述
? ? ? ?Traefik (發音為"traffic") 是一款現代化的反向代理和負載均衡器,專為云原生環境(特別是容器和微服務架構)設計。
核心功能:
- 反向代理:接收外部請求并轉發到內部服務
- 負載均衡:在多實例間分配請求流量
- API網關:提供統一的API入口點
使用場景:
- 作為Kubernetes Ingress Controller
- 微服務架構的API網關
- 混合云環境中的統一入口
- 需要自動SSL證書管理的場景
? ? ? ?traefik特別適合云原生環境,它的自動發現能力和動態配置特性可以大大簡化現代基礎設施的流量管理。
2.部署
2.1?添加helm倉庫
helm repo add my-traefik https://traefik.github.io/charts
2.2?更新倉庫
helm repo update
2.3 拉取chart
[root@master-1 traefik]# helm search repo traefik
NAME CHART VERSION APP VERSION DESCRIPTION
my-traefik/traefik 36.3.0 v3.4.3 A Traefik based Kubernetes ingress controller
my-traefik/traefik-crds 1.9.0 A Traefik based Kubernetes ingress controller
my-traefik/traefik-hub 4.2.0 v2.11.0 Traefik Hub Ingress Controller
my-traefik/traefik-mesh 4.1.1 v1.4.8 Traefik Mesh - Simpler Service Mesh
my-traefik/traefikee 4.2.4 v2.12.4 Traefik Enterprise is a unified cloud-native ne...#在線拉取
[root@master-1 ~]# helm pull my-traefik/traefik
#離線下載,找外網下載
https://traefik.github.io/charts/traefik/traefik-36.3.0.tgz#解壓
[root@master-1 traefik]# tar xf traefik-36.3.0.tgz
2.4 按需修改values.yaml?
? ? ? ?我已將鏡像地址修改為阿里云鏡像倉庫,鏡像已成功推送至阿里倉庫
[root@master-1 ~]# cd traefik
[root@master-1 traefik]# vim values.yaml
image: # @schema additionalProperties: false# -- Traefik image host registryregistry: registry.cn-hangzhou.aliyuncs.com/liuxing666# -- Traefik image repositoryrepository: traefik# -- defaults to appVersion. It's used for version checking, even prefixed with experimental- or latest-.# When a digest is required, `versionOverride` can be used to set the version.tag: 3.4.3 # @schema type:[string, null]# -- Traefik image pull policypullPolicy: IfNotPresent
...service:...# type: LoadBalancertype: NodePortportstraefik:expose:default: true #改為true# -- The exposed port for this serviceexposedPort: 8080ingressRoute:dashboard:# -- Create an IngressRoute for the dashboardenabled: true #改為true
2.5 安裝traefik
[root@master-1 traefik]# cd ../
[root@master-1 ~]# helm install liux-traefik traefik
NAME: liux-traefik
LAST DEPLOYED: Tue Jul 29 16:48:56 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
liux-traefik with registry.cn-hangzhou.aliyuncs.com/liuxing666/traefik:3.4.3 has been deployed successfully on default namespace !
[root@master-1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
liux-traefik default 1 2025-07-29 16:48:56.333821506 +0800 CST deployed traefik-36.3.0 v3.4.3
3 測試
[root@master-1 ~]# kubectl get svc,pods
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 12d
service/liux-es-exporter-elasticsearch-exporter ClusterIP 10.0.0.73 <none> 9108/TCP 112m
service/liux-traefik NodePort 10.0.0.2 <none> 8080:43183/TCP,80:31060/TCP,443:34135/TCP 3m34s
service/my-release-my-chart ClusterIP 10.0.0.152 <none> 80/TCP 4d
service/svc-yiyao NodePort 10.0.0.178 <none> 80:30080/TCP 5d1hNAME READY STATUS RESTARTS AGE
pod/liux-es-exporter-elasticsearch-exporter-5d898c656f-cf5j6 1/1 Running 0 112m
pod/liux-traefik-6fb557b449-gr6gk 1/1 Running 0 3m34s
pod/my-release-my-chart-57d68dc98d-rts84 1/1 Running 1 (4h19m ago) 4d
pod/nfs-client-provisioner-56cc478696-x8r6c 1/1 Running 6 (4h19m ago) 7d2h
[root@master-1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
liux-es-exporter default 1 2025-07-29 15:49:22.030119271 +0800 CST deployed elasticsearch-exporter-0.1.2 1.0.2
liux-traefik default 1 2025-07-29 17:37:51.504054285 +0800 CST deployed traefik-36.3.0 v3.4.3
? ? ? ?如圖所示,Dashboard 服務已通過 NodePort 方式暴露,端口號為 43183。用戶可通過任意節點 IP 地址加端口 43183 進行訪問,訪問格式為:`http://<節點IP>:43183。?如下圖,一個完整的traefik已經部署好了。
?4.優化
[root@master-1 ~]# vim traefik/values.yaml
...
# 資源限制
resources:requests:memory: "256Mi"cpu: "100m"limits:memory: "512Mi"cpu: "500m"
?四、故障排查命令
# 查看 Traefik 日志
kubectl logs deploy/liux-traefik -f# 檢查配置狀態
kubectl exec deploy/liux-traefik-- traefik debug# 查看路由表
kubectl exec deploy/liux-traefik-- traefik dashboard --help# 診斷證書問題
kubectl describe certificaterequest
? ? ? ?本文通過兩個實際案例演示了如何使用Helm在Kubernetes集群中部署應用。首先解析了Helm的核心價值,包括模板化、版本控制、依賴管理等優勢。然后詳細展示了部署elasticsearch-exporter和Traefik的完整流程:從搜索/拉取Chart包、修改配置參數,到安裝部署和測試驗證。特別針對Traefik部署進行了重點說明,包括修改鏡像源、暴露Dashboard服務、資源限制優化等關鍵步驟,并提供了故障排查命令。案例證明Helm能有效簡化Kubernetes應用部署,提升運維效率。