OpenShift系列(四) Helm包管理实战
1 | 作者:李晓辉 |
Helm基本概念
Helm 是 Kubernetes 的包管理工具,它能够简化 Kubernetes 应用程序的部署和管理。在 Kubernetes 中,一个应用程序可能由多个资源组成,比如 Deployment、Service、ConfigMap、Ingress 等。Helm 可以将这些资源打包成一个 Helm Chart(包),方便用户进行安装、升级、回滚和删除等操作,就和系统里的YUM/DNF/APT非常的类似。
主要组件
Helm Client
- 这是用户与 Helm 交互的客户端工具。用户通过在本地机器上运行 Helm 命令来操作 Helm Chart,例如安装、升级、查询等操作。它会直接与 Kubernetes API 服务器交互,客户端可以直接从它的官方GitHub下载,地址是:https://github.com/helm/helm/releases
Helm Chart
Helm Chart 是一个打包的 Kubernetes 应用程序,包含所有必要的资源定义和配置文件。它类似于软件包管理工具中的“包”,用于简化 Kubernetes 应用的部署和管理。一个 Helm Chart 包含以下部分:
Chart.yaml:
定义:这是 Helm Chart 的元数据文件,包含 Chart 的基本信息。大概内容:
- name:Chart 的名称。
- version:Chart 的版本号(遵循语义化版本规范)。
- description:Chart 的简要描述。
- dependencies:依赖的其他 Chart(可选)。
values.yaml:它是 Chart 的默认配置文件。用户可以通过修改这个文件或者在安装时覆盖其中的值来定制 Chart 的行为。比如,它可能包含应用的副本数量、镜像版本、资源限制等配置项。
templates/:包含 Kubernetes 资源的模板文件,这些模板文件在安装或升级时会被渲染成实际的 Kubernetes 资源,渲染的时候,将用values.yaml里的值替换掉templates模板里的变量,例如,一个 Deployment 的模板文件可以根据 values.yaml 中定义的副本数量和镜像版本来生成对应的 Deployment 资源,具体渲染的命令是:
helm template
,可以用–help等方式获取语法,不过需要注意的是,这会渲染出实际的 Kubernetes 资源文件,但不会实际部署到集群中。charts/:如果当前 Chart 依赖其他 Chart,这些依赖的 Chart 会存放在这个目录下。这样可以实现 Chart 之间的组合和复用。
Helm Repository(仓库)
- 它是一个存储 Helm Chart 的仓库,可以是本地的,也可以是远程的。远程仓库通常是一个 HTTP 服务器,用户可以从仓库中搜索、下载和更新 Helm Chart。例如,Helm 官方维护了一个默认的公共仓库,里面包含了许多常用的 Helm Chart,用户可以通过 Helm 命令将这些 Chart 添加到本地的 Chart 仓库列表中,然后进行安装等操作。
官方网址 http://helm.sh
Helm安装
下载安装Helm
1 | wget https://get.helm.sh/helm-v3.17.3-linux-amd64.tar.gz |
默认情况下,helm内置了一个hub,用于软件搜索和安装,搜索软件是否可被安装,用以下格式命令:
1 | helm search hub Packages |
命令行显示有点奇怪,也不够丰富,可以考虑用浏览器打开搜索:https://hub.helm.sh
添加仓库
官方仓库网速慢,可以考虑一下以下仓库或自己部署仓库
1 | http://mirror.azure.cn/kubernetes/charts/ |
添加方式
1 | helm repo add azurerepo http://mirror.azure.cn/kubernetes/charts/ |
Helm 实验案例
wordpress安装
手工定制安装
本次安装一个wordpress
1 | helm search repo wordpress |
1 | NAME CHART VERSION APP VERSION DESCRIPTION |
ok,发现一个wordpress包,那这个包里有什么?把包下出来研究研究
1 | root@k8s-master:~# helm pull azurerepo/wordpress |
下完是一个压缩包,解压看看
1 | root@k8s-master:~# tar xf wordpress-9.0.3.tgz |
果然看到了Chart.yaml
templates
values.yaml
看看都有哪些模板
1 | root@k8s-master:~/wordpress# ls templates/ |
模板里面都是各种变量,稍后需要用values.yml来填充
1 | root@k8s-master:~/wordpress# head templates/deployment.yaml |
ok,模板看到了,我们试试用values.yml里的变量来渲染模板,生成最终的yaml文件
1 | root@k8s-master:~/wordpress# helm template --version 9.0.3 azurerepo/wordpress |
从仓库中读出values.yml,将templates目录里的模板渲染成功
1 |
|
如果有一个值不满意怎么办?可以手工指定某一个参数,或者干脆用本地的values.yaml
先试试手工指定,我们看了一下仓库里的value,要用这个镜像,那我来随便改一个看看
1 | root@k8s-master:~/wordpress# helm show values azurerepo/wordpress | grep ^image: -A 10 |
渲染时手工指定某个参数,比如替换一个镜像的registry
我通过–set参数指定了镜像的registry,并且生成了模板
1 | root@k8s-master:~/wordpress# helm template --version 9.0.3 azurerepo/wordpress --set image.registry=linuxcenter.cn > custom.yml |
当然,我上面的set是瞎写的,镜像仓库不存在,只是为了演示参数而已
我们重新用默认参数渲染出最终的yaml,然后向集群部署
这一步将安装mariadb和wordpress,我们这里用的是存储章节设置的默认存储类,所以会自动创建pv以及pvc,你要是还没有默认存储类,往上翻,重新做一下存储类并标记为默认即可
1 | root@k8s-master:~/wordpress# helm template --version 9.0.3 azurerepo/wordpress > lixiaohui.yml |
不需要看到pod工作正常,我们只研究helm自身,如果你需要它工作正常,需要搞定镜像、机器内存需要再加一下,不然数据库起不来
以上就是研究的过程,其实一般来说,不用这么麻烦,比如我们最后实际上就是用的默认value,如果默认value你就满意,可以用下面的方法直接让helm来管理,我们不用改东西,如果你并不是用的helm install
,后面就不受helm管理,因为当你使用 helm template
命令生成 Kubernetes 资源清单文件并手动将其部署到集群中时,这些资源不会被 Helm 的生命周期管理所跟踪。因此,当你运行 helm list
命令时,不会看到任何相关的 Helm Release,因为 Helm 的 Release 管理机制没有被触发。
helm仓库直接安装
这一步将安装mariadb和wordpress,我们这里用的是存储章节设置的默认存储类,所以会自动创建pv以及pvc,你要是还没有默认存储类,往上翻,重新做一下存储类并标记为默认即可
helm install
也是只是--set
参数的,不一定非要用默认的值
1 | root@k8s-master:~/wordpress# helm install wordpress azurerepo/wordpress |
1 | root@k8s-master:~/wordpress# helm list |
ok,安装完毕,现在来看看这个服务怎么样了
查询服务端口
1 | kubectl get service |
1 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
查询pod所在节点
1 | root@k8s-master:~# kubectl get pod -o wide |
不需要看到pod工作正常,我们只研究helm自身,如果你需要它工作正常,需要搞定镜像、机器内存需要再加一下,不然数据库起不来
以上案例都是基于自己安装的k8s,我们来看一下教材上的helm操作
添加Charts仓库
helm必须要将仓库添加到本地,才能从仓库中安装软件
1 | [student@workstation ~]$ helm repo add do280-repo http://helm.ocp4.example.com/charts |
搜索仓库中的helm包
如果不加–versions,同一个软件有不同版本时,只显示最新版
1 | [student@workstation ~]$ helm search repo --versions |
查询Charts基本信息与values
1 | [student@workstation ~]$ helm show chart do280-repo/etherpad |
1 | [student@workstation ~]$ helm show values do280-repo/etherpad |
安装Helm Chart
安装helm包,需要创建values.yaml文件为软件提供参数值
1 | cat > values.yaml <<-EOF |
安装0.0.6版本
1 | [student@workstation ~]$ helm install lixiaohui-app do280-repo/etherpad -f values.yaml --version 0.0.6 |
看看部署的效果
1 | [student@workstation ~]$ helm list |
升级Chart
helm upgrade 命令可以将更改应用到现有发行版,例如更新值或图表版本。这里我们升级到0.0.7
1 | [student@workstation ~]$ helm list |
服务照样在线
1 | [student@workstation ~]$ curl -s https://development-etherpad.apps.ocp4.example.com | grep -i Labs |
回滚Chart
天有不测风云,有时候需要回退,我们回到上一版
1 | [student@workstation ~]$ helm history lixiaohui-app |