Helm
介绍
Helm 是 Kubernetes 的包管理器,用于管理charts(即预先配置的Kubernetes资源包)。Helm主要具有以下功能:
- 软件打包格式:将相关Kubernetes资源打包生成标准的chart软件包格式。
- 仓库管理:支持将chart上传到仓库进行存储、版本管理、下载等。
- 发布管理:管理chart的不同版本,控制chart发布更新。
- 部署安装:在Kubernetes集群中安装、升级和回滚软件。
- 模板语法:使用模板语法进行参数化安装和配置。
- 值管理:管理chart中参数值的区分设置。
- 安全签名:使用数字签名确保chart来源的安全可信。
- Hooks:支持配置chart的钩子函数。
- 依赖管理:管理chart之间的依赖关系。
主要优点:
- 将K8s应用进行标准化打包。
- 简化应用部署和管理。
- 支持应用配置和版本管理。
- 应用间可重用的charts组件。
Helm改进了在Kubernetes上的软件管理,被广泛使用。
-[helm下载地址]:https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
这个链接是一个 Helm v3.12.3 在 Linux amd64 架构上可执行文件打包的下载地址。
- https: //get.helm.sh/ 这是 Helm 项目的官方下载站点
- helm-v3.12.3 表示 Helm 的版本号,此处是 v3.12.3
- linux-amd64 表示打包适用于 Linux 64位系统
- tar.gz 表明打包格式为 gzip 压缩过的 tar 包
下载这个 tar.gz 包,可以解压使用,其中包含:
- helm 二进制文件:Helm 的命令行客户端
- completions 目录:命令自动补全的脚本
- helm 最新版本的合法性验证程序
- 文档和 Licence 信息
所以这是一个 Helm v3.12.3 在 Linux 上最新正式版本的可直接下载的包文件。
下载后解压,即可使用 Helm 的 helm 命令行客户端进行 Kubernetes 包管理。
安装部署
#下载
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
#解压
tar zxf helm-v3.12.3-linux-amd64.tar.gz
#移动到对应的目录下并给执行权限
mv linux-amd64/helm /usr/local/sbin/
chmod +x /usr/local/sbin/helm
#配置命令自动补全功能
source <(helm completion bash)
echo "source <(helm completion bash)" >> ~/.bashrc
这两条命令的作用是在 Bash shell 中配置 Helm 的自动命令补全功能。
第一条命令:
source <(helm completion bash)
这条命令的作用是:
source:在当前 Bash shell 中加载并执行后续命令的输出
<():表示命令替换,运行里面的命令并将输出传递给 source
helm completion bash:生成 helm 的 bash 自动补全脚本
所以它会在当前的 bash shell 会话中生效。
第二条命令:
echo "source <(helm completion bash)" >> ~/.bashrc
作用是将自动补全命令添加到 ~/.bashrc 文件中。
~/.bashrc 文件在每次打开新的 bash shell 时被读取,用来设置用户环境。
所以这行代码的作用是将 helm 自动补全添加到 bashrc 中,这样以后打开新的 shell 也可以自动加载补全功能。
总结:
第一条为当前 shell 设置补全,第二条为永久添加到 bashrc 中。 两者结合可以在当前和未来的 shell 会话中都生效 helm 命令的自动补全。
#指定对应的 Kubernetes 集群
export KUBECONFIG=/root/.kube/config
echo "KUBECONFIG=/root/.kube/config" >> /etc/profile
source /etc/profile
#在使用 Helm 管理 Kubernetes 集群的时候,需要指定对应的 Kubernetes 集群。
#Helm 不像 kubectl 会默认从本地 kubeconfig 配置文件读取当前的 Kubernetes 集群信息。
#Helm在执行各种命令时,需要知道这些命令要操作的是哪一个Kubernetes集群。Helm没有默认的集群配置。
#没有目标集群,Helm命令将无效。
公共的 chart 仓库
#在 Helm 中可以通过添加仓库源来使用公共的 chart 仓库,常用的命令有:
#添加官方稳定仓库
helm repo add stable https://charts.helm.sh/stable
#这会添加 id 为 stable 的仓库源。
#添加官方测试仓库
helm repo add incubator https://charts.helm.sh/incubator
#这会添加 id 为 incubator 的测试仓库。
#查看已添加的仓库列表
helm repo list
#更新仓库本地缓存
helm repo update
#搜索 charts
helm search repo nginx
#安装 charts
helm install mynginx stable/nginx
#以上命令可以添加常用的公共 chart 仓库,并从中安装所需的 charts。
#也可以添加自定义的 chart 仓库源。
仓库介绍
Kubernetes Helm 项目自身的官方仓库。
具体来说:
- [https: //charts.helm.sh] 是 Helm 项目的官方chart仓库地址
- 其中
/stable
表示稳定版本仓库 - 还有一个
/incubator
表示实验版本仓库
这两个仓库均由 Helm 社区维护,提供高质量的预配置应用 charts。
Helm 的一些常见公共 Chart 仓库汇总如下:
helm 官方仓库:
- stable - https://charts.helm.sh/stable (稳定版本仓库)
- incubator - https://charts.helm.sh/incubator (实验版本仓库)
厂商维护的仓库:
- Azure charts - https://github.com/Azure/helm-charts
- AWS charts - https://github.com/aws/eks-charts
- Bitnami charts - https: //charts.bitnami.com/bitnami
- Google charts - https://github.com/google/charts
第三方维护的仓库:
- Kubeapps Hub - https://hub.kubeapps.com/
- K8s@Home charts - https://charts.k8sathome.com/
- Codecentric charts - https://codecentric.github.io/helm-charts
- PingCAP charts - https://charts.pingcap.org/
- GitLab charts - https://charts.gitlab.io/
国内维护的仓库:
- 阿里云charts - https: //kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
- 七牛云charts - https: //helm.qiniu.com
这些都是流行的公共 Helm Chart 仓库,可以根据需求添加使用。
chart私有仓库创建
构建一个本地的Helm chart仓库
任何的HTTP Server都可以作为chart仓库
docker run -d -p 8081:80 -v /var/www:/usr/local/apache2/htdocs httpd
#这个docker命令会创建并运行一个httpd容器,参数说明如下:
#- `-d`: 后台运行容器
#- `-p 8081:80`: 映射容器内80端口到宿主机8081端口
#- `-v /var/www:/usr/local/apache2/htdocs`: 把宿主机/var/www目录挂载到容器的/usr/local/apache2/htdocs,作为网页文档根目录
#- `httpd`: 使用httpd镜像启动容器
#这样就在宿主机8081端口启动了一个httpd服务器,网页文档来自宿主机的/var/www目录。
#访问方式:
#在宿主机浏览器访问 http://宿主机IP:8081
#就可以访问容器中的httpd服务。
#并且我们可以通过挂载目录,来修改宿主机/var/www下的文件,即可实时更新httpd服务器中的网页文件。
#需要注意:
#1. 宿主机的/var/www目录需要存在,且有一定的访问权限。
#2. 容器内部的httpd配置不要和宿主机8081端口冲突。
#3. 可以添加-v宿主机日志目录:容器日志目录来收集日志。
#4. 可以设置时区等参数对容器进行定制。
mkdir /var/www/charts
#宿主机创建挂载目录
Helm chart上传到私有仓库
#Helm chart上传到私有仓库
helm package mychart/
#将mychart目录打包成tgz文件,用于发布。
mkdir myrepo
#创建文件夹作为chart仓库目录。
mv mychart-0.1.0.tgz myrepo/
#将打包好的chart移动到仓库目录下。
helm repo index myrepo --url http://192.168.9.40:8081/charts
#在myrepo目录生成index.yaml索引文件,用于仓库查询。
scp index.yaml mychart-0.1.0.tgz /var/www/charts
#将index和chart复制到Web服务器目录下,提供下载。
helm repo add newrepo http://192.168.9.40:8081/charts
#在本地Helm中添加这个chart仓库源,名为newrepo。
helm repo list
#列出已知的仓库列表,确保newrepo添加成功。
helm repo update
#更新本地缓存的仓库index文件。
helm search repo mychart
#在newrepo仓库中搜索mychart是否可用。
至此,我们就利用Web服务器创建了一个本地的Helm chart仓库,可以通过add repo和update的方式使用了。
自行创建nginx Helm chart方法
#自行创建nginx Helm chart方法
helm create nginx-chart
#使用helm create命令生成一个名为nginx-chart的chart模板。
vim nginx-chart/values.yaml
#编辑values.yaml文件,用于模板中的值替换。
vim nginx-chart/templates/service.yaml
#编辑模板文件service.yaml,定义Kubernetes服务。
helm lint nginx-chart/
#使用helm lint对chart进行语法检查,确保没有错误。
helm install mynginx ./nginx-chart/
#使用helm install命令,以mynginx为release名称安装nginx-chart。
kubectl get pods,svc
#获取pod和服务,检查helm安装是否成功。
#这样通过自定义chart模板和values,我们就可以打包自己的应用 charts。helm lint和install命令可以确保chart语法正确并能被正常安装。
#然后就可以将chart发布到仓库,或者与CI/CD系统集成,实现Kubernetes的声明式部署。