# 什么是Helm

  • kubernetes的包管理器

# 安装及卸载

详见官网 (opens new window)

  • 目前具有16513个包,329602个发行版。 但是该网址只能预览chart,无法直接下载。 下载还得通过helm命令行pull
  • 以redis为例:,在该网址能看到 redis的chart仓库地址bitnami,helm版本号信息,app信息等. 地址在搜索结果即可看到,鼠标移上去显示repo地址;
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm pull bitnami/redis --version 16.11.2
tar -xvf redis-16.11.2.tgz

# bitnami获取tar.gz压缩包备注

  • 注意,配置了代理的情况下,有部分包依然无法下载,比如 helm pull bitnami/nginx, 但是这时候其他的命令是可以用的。比如 helm repo search nginx等;
    • 此时报错: 'failed to do request: Head "https://registry-1.docker.io/v2/bitnamicharts/nginx/manifests/19.0.1": dial tcp 128.242.240.117:443: i/o timeout'
    • 但是代理是生效了的
  • 此时可以用url的方式直接下载,Bitnami 的 Helm Chart 托管在公共仓库中,其 URL 结构是固定的,结构如下:https://charts.bitnami.com/bitnami/<CHART-NAME>-<VERSION>.tgz
    • 由于此时代理是可用的,直接使用 curl https://charts.bitnami.com/bitnami/<CHART-NAME>-<VERSION>.tgz 可进行下载

# Helm命令

# 仓库相关

# 从公共仓库查找
helm search hub [name] 

#从三方仓库查找
helm search repo [yourrepo] [name]

#查看可用的三方仓库
helm repo list

#添加三方仓库,如果是私有仓库,需要带上认证信息(harbor的项目 同时包含了 镜像仓库与 helm仓库, 地址为: http://harbor地址/chartrepo/项目名)
helm repo add [repo_name] [repo_url]  --username myusername --password mypassword

# 仓库交互

#拉取,将在本地创建chart的压缩包
helm pull <yourrepo>/<name> --version x.y.z

#本地创建chart配置
helm create [chart_name]
#推送chart到远程仓库
helm cm-push ./[chart_name] [repo_name]

# 也可以使用这个命令(harbor官网提示)
helm push CHART_PACKAGE oci://192.168.10.7:30002/automannn-test

# helm官方chart仓库

# helm最佳实践

# 一般惯例

  • chart名称必须是小写字母和数字,单词之间可以用横杠分隔;
  • chart名称中,不能有大写字母
  • yaml文件中,使用双空格键缩进,不能使用tab

# values规范

  • 变量名称以小写字母开头,使用驼峰区分
  • 所有的Helm内置变量以大写字母开头
  • k8s的资源名称,需要使用横杠分隔;

# helm安装资源的顺序

  1. Namespace
  2. NetworkPolicy
  3. ResourceQuota
  4. LimitRange
  5. PodSecurityPolicy
  6. PodDisruptionBudget
  7. ServiceAccount
  8. Secret
  9. SecretList
  10. ConfigMap
  11. StorageClass
  12. PersistentVolume
  13. PersistentVolumeClaim
  14. CustomResourceDefinition
  15. ClusterRole
  16. ClusterRoleList
  17. ClusterRoleBinding
  18. ClusterRoleBindingList
  19. Role
  20. RoleList
  21. RoleBinding
  22. RoleBindingList
  23. Service
  24. DaemonSet
  25. Pod
  26. ReplicationController
  27. ReplicaSet
  28. Deployment
  29. HorizontalPodAutoscaler
  30. StatefulSet
  31. Job
  32. CronJob
  33. Ingress
  34. APIService

# Helm个人理解

  • 除了流水线的便捷外,最重要的是应用模板;
  • 应用模板便捷的根本原因在于:docker+磁盘挂载+配置挂载+密钥挂载;