修改 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
不知道怎么解决。