1. 什么是 helm?

kubernetes的包管理器

  • 定义/安装/升级 kubernetes应用程序(helm chart)
  • 容易创建/发布/分享

2. 使用Helm

2.1 安装

  • from the homebrew
1
brew install helm
  • for apt
1
2
3
4
5
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

2.2 使用

  • 添加本地本地仓库
1
helm repo add bitnami https://charts.bitnami.com/bitnami
  • 查看仓库中的chart
1
helm search repo bitnami
  • 查看chart信息
1
2
3
helm show chart bitnami/mysql
helm show readme bitnami/mysql
helm show all bitnami/mysql
  • 安装一个chart
1
2
helm repo update              # Make sure we get the latest list of charts
helm install bitnami/mysql --generate-name
  • 列表已安装的chart
1
helm list
  • 查看已安装chart状态
1
helm status mysql-1612624192
  • 删除chart
1
helm uninstall mysql-1612624192

2.3 结合Terraform使用

helm provider仅有一个resource: helm_release, 可以实现如下的效果:

  • 安装chart
  • 安装本地chart
  • 安装仓库
    helm provider使用前需要配置kubernetes权限, 这个配置和kubenetes provider的配置类似, 例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 使用kubeconfig文件
provider "helm" {
kubernetes {
config_path = "~/.kube/config"
}
}

# 使用可执行插件
data "aws_eks_cluster" "main" {
name = "test-eks-cluster"
}
provider "helm" {
kubernetes {
host = data.aws_eks_cluster.main.endpoint
cluster_ca_certificate = base64decode(data.aws_eks_cluster.main.certificate_authority[0].data)
exec {
api_version = "client.authentication.k8s.io/v1alpha1"
args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.main.name]
command = "aws"
}
}
}

# 使用临时token
data "aws_eks_cluster_auth" "main" {
name = "test-eks-cluster"
}
provider "helm" {
host = data.aws_eks_cluster.main.endpoint
token = data.aws_eks_cluster_auth.main.token
cluster_ca_certificate = base64decode(data.aws_eks_cluster.main.certificate_authority[0].data)
}

3. 总结

helm本质上解决了重复代码的问题, 将 mysql/minio/cert manage/dashboard 等诸多常用的kubernetes应用和配置当成包一样的进行管理, 避免了我们去查资料, 拷贝yaml, 修改yaml最后应用yaml的诸多麻烦, 而云厂商例如aws也有自己的chart仓库, 实践中能增加效率, 让开发者主要聚焦到自有应用程序的发布, 而不是疲惫与基础kubernetes环境的搭建.