前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >召集各种 Kustomize 补丁

召集各种 Kustomize 补丁

作者头像
崔秀龙
发布2019-09-09 16:53:00
7680
发布2019-09-09 16:53:00
举报
文章被收录于专栏:伪架构师

这个项目有两个目的。

第一点就是,既然有了 Kustomize,使用碎片来拼接复杂的 YAML 就很方便了,设想以下情况:

一个只会写简单 Deployment 的小白,随时要去翻书,查查如何加入资源限制,如何加载存储卷,如何设置环境变量….,翻完用完,俩月之后同样的痛苦再来一次,周而复始。。好吧我就是那个小白。

Kustomize 能不能让这个过程舒服一点?

开始摸索 Kustomize 之后,我觉得有救了,只要我把需要的配置碎片积累下来,用的时候稍作修改,然后用 Kustomize 渲染出来,是不是就省了不少麻烦了?另外对一些巨型的 YAML,比如多个 Deployment 和 Service 和 VirtualService 什么的混成一个文件的情况,直接上手修改是很辛苦的,用这种方式也可以方便快捷的进行一些变更。

更近一步的,这些补丁都很小,如果稍稍做点模板处理,用个小脚本加工成正式的 Patch,复用能力会进一步增强。

第二点就是,就算不考虑这些问题,把常见的配置碎片搜集起来也是对 Kubernetes 运维工作很有帮助的。

用法

例如我们有一个简单的 Deployment, /tmp/deploy.yaml

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp
spec:
replicas: 1
template:
metadata:
labels:
app: flaskapp
version: v1
spec:
containers:
- name: flaskapp
image: dustise/flaskapp
imagePullPolicy: IfNotPresent
env:
- name: version
value: v1
ports:
- containerPort: 80

克隆本项目之后,我们希望借助其中的补丁,为这个对象加入资源限制和 ServiceAccount:

代码语言:javascript
复制
$ ./gen_kustomize.py -i /tmp/deploy.yaml -o kust
$ tree kust
kust
├── base
│   ├── deploy.yaml
│   └── kustomization.yaml
└── overlay

这个命令会为该文件创建一个 Kustomization。其中的 -i 参数可以加入多个文件,都会被复制到目标目录(kust)的 base 之中。

接下来向其中加入补丁:

代码语言:javascript
复制
$ ./add_patch.py kubernetes/deployment/resource-patch.yaml \
--set container_name=flaskapp deployment_name=flaskapp \
limit_cpu=100m limit_memory=100Mi request_cpu=100m \
request_memory=100Mi \
-t kust
$ ./add_patch.py kubernetes/deployment/serviceaccount-patch.yaml \
--set container_name=flaskapp \
deployment_name=flaskapp service_account=default \
-t kust

这里的第一个参数是补丁文件的位置,--set 后面以 key=value 的形式为模板进行赋值。模板的写法也很简单,例如:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: $deployment_name
spec:
replicas: 1
template:
spec:
serviceAccount: $service_account

使用的是 Python 模板,只要简单的在变量前加入 $ 即可,因为对 Helm 深感疲惫,暂时不准备接入太复杂的模板方式,毕竟补丁本身越小越精确就越好。

加入补丁之后,使用 kustomize build kust/overlay 进行渲染:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp
spec:
replicas: 1
template:
metadata:
labels:
app: flaskapp
version: v1
spec:
containers:
- env:
- name: version
value: v1
image: dustise/flaskapp
imagePullPolicy: IfNotPresent
name: flaskapp
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
serviceAccount: default

可以看到,这里生成了完整的目标文件。 有朋友问了,你这个模板填写也挺费劲阿,所以新增了个用法:

代码语言:javascript
复制
./add_patch.py kubernetes/deployment/serviceaccount-patch.yaml
Values in the patch:
['$deployment_name', '$service_account']

需要贡献

这个项目还非常低级,不堪一用,觉得这个小东西有意思的朋友可以提供:

  • 新的补丁模板。
  • 测试框架。
  • 新的玩法。
  • 各种建议。

加星星,加 Fork,点在看,各种转发。。。还有英文翻译——都是需要的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用法
  • 需要贡献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档