什么是Helm
kubenetes包管理器,是查找,分享和使用軟件構件 kubernetes的最佳方式;
可以做什么
- 從頭開始創建新的chart
- 將chart打包成歸檔(tgz)文件
- 與存儲chart的倉庫進行交互
- 與現有的kubernates集群中安裝和卸載chart
- 管理與Helm一起安裝的 chart的發布周期
三個重要概念
- chart創建 kubernates應用程序所必須的一組信息
- config包含了可以合并的chart中的配置信息,用于創建和發布鏡像
- release是一個與待定配置相結合的chart的運行是咧
安裝Helm
其他常用命令
# 列出,增加,更新,刪除chart倉庫
helm repo
# 使用關鍵字搜索chart
helm search
# 拉去遠程倉庫中的chart到本地
helm pull
# 在本地創建新的chart
helm create
# 管理chart依賴
helm dependency
# 安裝chart
helm install
# 列出所有的release
helm list
# 查看chart配置信息是否有錯
helm lint
# 打包本地chart
helm package
# 回滾release 到歷史版本
helm rollback
# 卸載
helm uninstall/delete
# 升級release
helm upgrade
chart詳解
目錄結構
修改默認源
# 查看默認倉庫
helm repo list# 添加倉庫
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add aliyun https://apphub.aliyuncs.com/
helm repo add bitnami https://charts.bitnami.com/bitnami/
helm repo add azure https://mirror.azure.cn/kubernetes/charts/
Redis Chart實戰
# 搜索
helm search repo redis# 結果
azure/prometheus-redis-exporter 3.5.1 1.3.4 DEPRECATED Prometheus exporter for Redis metrics
azure/redis 10.5.7 5.0.7 DEPRECATED Open source, advanced key-value stor...
azure/redis-ha 4.4.6 5.0.6 DEPRECATED - Highly available Kubernetes implem...
bitnami/redis 19.3.3 7.2.4 Redis(R) is an open source, advanced key-value ...
bitnami/redis-cluster 10.0.4 7.2.4 Redis(R) is an open source, scalable, distribut...
stable/redis 1.1.15 4.0.8 Open source, advanced key-value store. It is of...
stable/redis-ha 2.0.1 Highly available Redis cluster with multiple se...
azure/sensu 0.2.5 0.28 DEPRECATED Sensu monitoring framework backed by...
stable/sensu 0.2.0 Sensu monitoring framework backed by the Redis ...# 查看安裝說明
helm show readme bitnami/redis# 結果,內容過多,不做展示
...# 拉去鏡像
helm pull bitnami/redis
# 解壓
tar -xvf redis-19.3.3.tgz# 進入 redis目錄,修改一下內容# 修改storageClass 為 managed-nfs-storage
# 修改redis密碼 ggbhack
# 修改 architecture 改為集群或者單列
# 修改實例存儲大小 persistence.size 1Gi 根據情況而定# 新增命名空間
kubectl create namespace redis# 回到上一級目錄進行安裝 redis是別名 后面的redis是命名空間
helm install redis ./redis/ -n redis# 安裝完成會打印相關信息
...# 查看所有redis相關的
kubectl get all -n redis# 刪除
helm delete redis -n redis# 出現錯誤后續的解決方案 看下文# 如果redis報錯,鏡像拉去失敗,還是因為arm64的原因 更values.yaml改鏡像為image:registry: docker.iorepository: arm64v8/redis# tag: 7.2.4-debian-12-r16tag: latestdigest: ""# 繼續往下操作
# 查看pvc 情況
kubectl get pvc -n redid#結果
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
redis-data-redis-master-0 Bound pvc-7561bad7-27f0-4de7-9496-e490bc496204 1Gi RWO managed-nfs-storage 36m
redis-data-redis-replicas-0 Bound pvc-2ade690e-67bd-44b7-80f8-9569c466251e 1Gi RWO managed-nfs-storage 36m
redis-data-redis-replicas-1 Bound pvc-a8cf13d5-5147-4a36-be26-cfeb714689f5 1Gi RWO managed-nfs-storage 6m34s
redis-data-redis-replicas-2 Bound pvc-237f9e5b-5b9b-48ac-8580-071e16e3c47f 1Gi RWO managed-nfs-storage 6m5s# 都運行了的結果
kubectl get all -n redisNAME READY STATUS RESTARTS AGE
pod/redis-master-0 1/1 Running 0 8m55s
pod/redis-replicas-0 1/1 Running 0 100s
pod/redis-replicas-1 1/1 Running 0 7m37s
pod/redis-replicas-2 1/1 Running 0 75sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-headless ClusterIP None <none> 6379/TCP 8m59s
service/redis-master ClusterIP 10.108.214.27 <none> 6379/TCP 8m58s
service/redis-replicas ClusterIP 10.101.47.243 <none> 6379/TCP 8m57sNAME READY AGE
statefulset.apps/redis-master 1/1 8m57s
statefulset.apps/redis-replicas 3/3 8m57s# 進入master容器
kubectl exec -it redis-master-0 -n redis -- bash
# 操作
I have no name!@redis-master-0:/data$ redis-cli
127.0.0.1:6379> auth ggbhack
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name ggb
OK
127.0.0.1:6379> get name
"ggb"
127.0.0.1:6379> # 進入replicas
kubectl exec -it redis-replicas-0 -n redis -- bash# 操作
I have no name!@redis-replicas-0:/data$ redis-cli
127.0.0.1:6379> auth ggbhack
OK
127.0.0.1:6379> get name
"ggb"
127.0.0.1:6379> set name 123
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> 說明我們的安裝是成功了的# 更新
# 修改密碼為ggbhack123
redis:password: "ggbhack123"helm upgrade [RELEASE][CHART][FLAG]
helm upgrade redis ./redis/ -n redis# 進入容器,測試如上
[root@k8s-master ~]# kubectl exec -it redis-replicas-0 -n redis -- bash
I have no name!@redis-replicas-0:/data$ redis-cli
127.0.0.1:6379> auth ggbhack
(error) WRONGPASS invalid username-password pair or user is disabled.
127.0.0.1:6379> auth ggbhack123
OK
127.0.0.1:6379> get name
"ggb"
127.0.0.1:6379> 到此完結
注意事項:
由于需要提前創建storageClass ? ?manage-nfc-storage,在前面的章節中總共有三個文件
nfc-storage-class.yaml
nfs-provisioner-deployment.yaml
nfs-provisioner-rbac.yaml
需要的文件在 這里
nfs-subdir-external-provisioner?下的nfc文件夾里
如果是在 arm64下的話,使用 registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0?這個鏡像會報錯 ?exec /?nfs-subdir-external-provisioner format error 簡單來說就是平臺不匹配,解決方案就是自己構建一個匹配的鏡像包
# 下載git項目
git clone https://github.com/ishow520/nfs-subdir-external-provisioner.git# 構建所屬平臺的鏡像
docker buildx build --platform linux/arm64 -t 你的hub用戶名/nfs-provisioner-arm:v1.0.0 -f Dockerfile.multiarch --push .也可以使用我構建的 ggbhack/nfs-provisioner-arm:v1.0.0