修改 helm 模板支持阿里云
文章目录
【注意】最后更新于 June 15, 2020,文中内容可能已过时,请谨慎使用。
一、前言
- 最近公司内部需要在
k8s上部署一些东西,然后发现现在有了一个helm的工具能够快速的部署。 - 对于普通的
k8s阿里云上则需要有一些特殊的操作,这边记录一下如何修改helm的模板以支持阿里云的部署。
二、环境搭建
2.1 k8s 环境
使用 minikube 搭建:
官方推荐的本地 k8s 环境搭建,通过创建虚拟机来代替 k8s 需要的节点。
国内特点(1.0.0 版本新增的 registry-repository 选项):
–registry-mirror=设置镜像源 –registry-repository=设置 k8s.gcr.io 的替代镜像地址
| |
完成后直接使用 kubcli 就可以管理。
使用云上 k8s:
这个就不用我说了,现在各个云厂商都有现成的 k8s 集群可以购买,购买后把配置放到 ~/.kube/config 或者直接保存为单个文件(~/.kube/ali-config)然后通过环境变量加载。
| |
然后使用 kubcli 就可以管理。
k3s k3s
最近一段时间 rancher 出的一款极简版 k8s,名为 k3s 在我本地的 mac 尝试部署却发现有着 k8s.gcr.io 镜像地址无法下载没有成功部署,尝试时的 k3s 的版本为 0.3.0。
other
2.2 kubectl && helm 安装和初始化
以上的 k8s 环境都需要 kubectl 来进行管理,使用 web 面板也行但是效率过低。
安装后配置好 ~/.kube/config,使用 kubectl cluster-info 可以查看集群信息。
对于 k8s 的服务部署的 yaml 由于过于复杂,有了一个 helm 可以通过模板生成我们需要的 yaml 自动的部署和更新到 k8s 上。
三、使用 helm
初始化 helm
k8s 第一次使用 helm 需要执行 helm init 创建本地配置和远端 k8s api 服务。
| |
国内特有情况(tiller 镜像版本与 helm 版本相同):
| |
如果 k8s 有 rbac 的权限控制请自行查找方案处理权限问题。
helm 的 charts 源
在上面的命令中我设置 --stable-repo-url 就是阿里云的 stable 的 charts 源,源路径在 helm/charts。
这里面有很多直接支持 helm 的模板可以进行参考。
四、helm 的模板
我们创建一个干净的模板看看
| |
| |
在 templetes 文件下的文件都会被 {{}} 这个指令支持内部可使用一下模板语法进行替换。
具体的不描述了可以见 chart 模板手册
对于 helm install 的执行顺序发现是按照 configmap.yaml, pv.yaml, pvc.yaml, deployment.yaml, service.yaml, ingress.yaml 的有依赖关系进行执行的,没有找到有控制和文件名的限制应该是用 kind 来做依赖分析的。
五、修改 helm 以支持阿里云部署
主要的不同点在于 pv, pvc 需要根据云厂商使用的云盘来定制。
这里我用 stable/verdaccio 来做示例。
把这个目录下载到本地就可以通过 helm [install|template] ./verdaccio 输出到本地或到 k8s 来调试。
5.1 阿里云云盘支持
verdaccio 的模板只有 pvc 没有 pv 需要自行添加一个
values.yaml
| |
pv.yaml
| |
- size: pv 分配大小单位
Gi - volume: 云盘 id
- fsType: 文件系统
xfs,ext4 - zone: 云盘域
- region: 云盘地区
以上的配置可以通 --set 命令传入 helm 重新设置。
| |
由于使用的特有的云盘我们需要修改 pvc 支持
pvc.yaml
在 spec 下添加 selector, volumeName 设置为云盘 id 即可。
| |
5.2 阿里云 nas 支持
可以参考上面的方式根据 阿里云 k8s nas 指南 修改 pv 和 pvc 来支持。
pv.yaml:
| |
pvc.yaml:
| |
主要是 storageClassName 的关联。
六、一些问题
- 我发现
helm install后经常会发生部署找不到pvc但是重新伸缩后又正常了,考虑可能是helm的执行间隔太短了,但是没有找到处理办法,可以手动的通过helm直接输出yaml用kubecli一个个手动创建。 - 阿里云 k8s 在部署
verdaccio部署会报错0/5 nodes are available: 2 node(s) had no available volume zone, 3 node(s) had taints that the pod didn't tolerate不知道怎么解决。