使用Helm简化Kubernetes部署、管理
Helm 是 Kubernetes 的包管理工具,能够简化应用的部署、管理和升级流程。以下是使用 Helm 的基本步骤和常见操作。
先决条件
想成功和正确地使用Helm,需要以下前置条件。
- 一个 Kubernetes 集群(参考macOS上优雅运行Docker容器)
- 确定你安装版本的安全配置
- 安装和配置Helm。
安装Helm
macOS
sh
brew install helm
Windows
sh
choco install kubernetes-helm
Debian/Ubuntu
sh
sudo apt-get install curl gpg apt-transport-https --yes
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
基本概念
| 概念 | 描述 | 简单类比 |
|---|---|---|
| Chart | Helm 的应用包,包含模板和默认配置。 | nginx.deb 安装包文件 |
| Repository | Chart 的存储仓库,用于分发和共享。 | Ubuntu 的软件源(如 archive.ubuntu.com) |
| Release | 在集群中运行的 Chart 的一个实例。 | 系统上正在运行的 nginx 进程 |
| Values | 用于覆盖 Chart 中模板默认参数的配置。 | 安装软件时传入的配置参数(如安装路径) |
Helm的一般操作:
helm search: 搜索charthelm pull: 下载chart到本地目录查看helm install: 上传chart到Kuberneteshelm list: 列出已发布的charthelm uninstall: 卸载一个版本
Bitnami
Bitnami 是一家被 VMware 收购的公司,长期专注于为流行开源软件提供打包好的、跨平台的安装程序。在容器化时代之前,他们就为数百个应用提供了虚拟机镜像、云镜像和原生安装包。
Bitnami是Helm中最常用的仓库之一,提供了许多常用的Kubernetes应用程序的Helm Charts。Helm作为Kubernetes的包管理器,允许用户从Chart repository快速查找和安装软件包。此外,用户可以通过Helm命令获取Bitnami Charts的详细信息。
Bitnami 提供了数百个经过验证的 Chart,涵盖:
数据库
sh
helm install my-postgresql bitnami/postgresql
helm install my-redis bitnami/redis
helm install my-mongodb bitnami/mongodb
消息队列与中间件
sh
helm install my-kafka bitnami/kafka
helm install my-rabbitmq bitnami/rabbitmq
helm install my-nginx bitnami/nginx
应用框架
sh
helm install my-wordpress bitnami/wordpress
helm install my-joomla bitnami/joomla
helm install my-redmine bitnami/redmine
使用Helm部署一个MySQL
这里是没有使用Helm部署数据库MySQL的例子,需要手动管理
- 创建命名空间
- 创建本地存储PV和StorageClass
- 创建MySQL配置ConfigMap
- 创建MySQL密码Secret
- 创建MySQL StatefulSet
- 创建MySQL Service
- 部署脚本
下面就看看如何用Helm简化部署MySQL
1. 添加Bitnami仓库(若添加过,忽略)
sh
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
2. 创建自定义values文件
创建 mysql-values.yaml 文件:
sh
image:
registry: docker.io
repository: mysql
tag: 8.0.34
pullPolicy: Always
auth:
rootPassword: "root123!"
database: "myapp"
username: "appuser"
password: "app1234!"
replicationUser: "replicator" # 复制专用用户
replicationPassword: "replica-pass" # 复制用户密码
primary:
persistence:
enabled: true
size: 8Gi
storageClass: "local-path"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
secondary:
replicaCount: 1
persistence:
enabled: true
size: 8Gi
storageClass: "local-path"
extraEnvVars:
- name: MYSQL_ROOT_PASSWORD
value: "root123!"
# 禁用所有辅助功能
volumePermissions:
enabled: false
architecture: "replication"
3. 部署MySQL
sh
helm install my-mysql bitnami/mysql -f mysql-values.yaml -n mysql --create-namespace --version=9.14.0
验证
- 进入Pod
sh
kubectl exec -ti my-mysql-primary-0 -n mysql -- /bin/sh
- 链接主节点/从节点
sh
mysql -h my-mysql-primary.mysql.svc.cluster.local -uroot -p

可以看到只需要3步,就可以部署一个主从复制架构的MySQL,比手动管理是方便太多,这是因为helm封装很多细节,具体查看某个Chart可以把它拉去到本地,查看
sh
helm pull bitnami/mysql --version=9.14.0 --untar