背景:为什么要使用Helm,Helm解决了什么问题?
在之前的例子中,可以看到部署一个应用,需要写很多yaml配置(deployment,
service, pv, pvc, secret,
configmap),将这些配置保存到各自的文件中,或集中写进一个配置中,然后通过kubectl apply -f .
部署。当应用多了起来,这种组织形式会带来以下问题:
- 管理维护复杂
- 无法将这些服务作为一个整体统一发布
- 不能高效的共享和重用服务
- 不支持应用级别的版本管理
- 不支持对部署的应用状态进行验证
(待补充)
Helm的引入,就是为了解决这些问题
- 使用Helm可以把这些YAML文件作为整体管理
- 实现YAML文件高效复用
- 使用helm应用级别的版本管理
Helm架构
chart
chart是一个应用的信息集合,包括各种k8s对象的配置模板、参数定义、依赖关系、文档说明等;chart是应用部署的逻辑单元
helm可以创建新的chart,或与存储chart的仓库交互、拉取、保存、更新chart
release
release是chart的运行实例(应用),helm可以在k8s集群中安装、卸载、测试、更新、回滚release
架构
Helm采用客户端/服务端架构,组件如下
- Helm Client:客户端,在本地执行,用来:
- 本地开发chart
- 管理chart仓库
- 与Tiller服务器交互
- 查看release信息
- Tiller:服务器端,在Kubernetes集群上运行,管理应用,用来:
- 与Helm客户端交互
- 通过chart构建release
- 通过 k8s API Server管理release
- Repository:Chart仓库,Helm客户端通过HTTP协议访问仓库中Chart索引文件和压缩包
Think: Why remove tiller in V3?
部署Helm
部署Helm Client
helm官网 下载安装包,解压,拷贝到/usr/bin目录下
helm repo add bitnami https://charts.bitnami.com/bitnami
部署Tiller Server
使用Helm
chart目录结构
chat模板
开发chart
实践:安装wordpress
搜索wordpress helm包
helm search repo wordpress
执行安装命令
helm install happy-dog bitnami/wordpress
遇到问题:无法创建pvc
猜测原因:chart中使用了动态pvc,但k8s集群没有安装动态pvc
尝试安装动态pvc:
helm install nfs-client-provisioner stable/nfs-client-provisioner --set nfs.server=node1 --set nfs.path=/home/work/nfs --set storageClass.defaultClass=true
验证动态pv
1 | cat > test-pvc.yaml << EOF |
pvc 状态为 pending
查看pvc描述 kubectl describe pvc {pvc-name}
查看 cluster.local/nfs-client-provisioner 日志
问题原因:k8s V1.20中移除了SelfLink https://github.com/kubernetes/enhancements/issues/1164
解决方案 from https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/26#issuecomment-743745469 覆盖 nfs-client-provisioner 的image,使用支持k8s 1.20版本的镜像:
1 | image: |
helm show values stable/nfs-client-provisioner
替换方式使用--set
(先uninstall)
helm install nfs-client-provisioner stable/nfs-client-provisioner --set nfs.server=node1 --set nfs.path=/home/work/nfs --set storageClass.defaultClass=true --set image.repository=rkevin/nfs-subdir-external-provisioner --set image.tag=fix-k8s-1.20
或者使用--values
或helm install -f values.yaml bitnami/wordpress --generate-name
见 using
helm
问题解决 :+1:
总结:helm安装release时动态pvc,如果pv使用nfs,需要安装nfs-client-provisioner
访问wordpress服务
查看service
在浏览器输入master:32386
访问
实践:自己创建chart包安装应用
遇到问题
- 在V3中为什么去掉了tiller模块?
- self-link 是什么,为什么要在v1.20中去掉