使用 kustomize 对 kubernetes 对象进行声明式管理
温馨提示:这篇文章已超过422天没有更新,请注意相关的内容是否还可用!
补丁实战
策略合并补丁
基准文件:/test/bases/deploy.yml
(图片来源网络,侵删)
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: spms-standard
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
覆盖中的补丁文件:/test/dev/deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: spms-standard
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 3
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx2
image: nginx
ports:
- containerPort: 80
覆盖中的 /test/dev/kustomization.yaml
resources: - ../bases patches: - path: spms.yml
执行构建
kubectl kustomize /test/dev
得到如下 YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
namespace: spms-standard
spec:
replicas: 3
selector:
matchLabels:
run: my-nginx
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- image: nginx # 补丁新增
name: my-nginx2
ports:
- containerPort: 80
- image: nginx
name: my-nginx
ports:
- containerPort: 80
JSON 补丁
非所有资源或者字段都支持策略性合并补丁。为了支持对任何资源的任何字段进行修改, Kustomize 提供通过 patchesJson6902 来应用 JSON 补丁的能力。 为了给 JSON 补丁找到正确的资源,需要在 kustomization.yaml 文件中指定资源的组(group)、 版本(version)、类别(kind)和名称(name)。
示例如下:
基准中的 Ingress 对象的文件: /test/bases/shark-ing.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: spms-standard
name: spms-standard-ingress-gateway
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: "/spms-standard"
pathType: Prefix
backend:
service:
name: spms-standard-support-gateway
port:
number: 8080
覆盖中的 Ingress 对象的 JSON 补丁文件: /test/bases/shark-ing.yml
注意: 这里是增加了两个
- op: add
path: /spec/rules/0/http/paths/-
value:
path: "/spms-digital"
pathType: Prefix
backend:
service:
name: spms-standard-support-gateway
port:
number: 8080
- op: add
path: /spec/rules/0/http/paths/-
value:
path: "/spms-shark"
pathType: Prefix
backend:
service:
name: spms-standard-support-gateway
port:
number: 8080
- op 是预算符,值可以是: add remove replace
- path 是被操作的对象的YAML文件的路径
/spec/rules/0/http/paths/ 对象如下内容:
spec: rules: - http: paths:列表中的第一个元素的索引是 0, - 表示列表的最后位置
覆盖中的 /test/dev/kustomization.yaml
resources: - ../bases patches: - target: group: networking.k8s.io version: v1 kind: Ingress namespace: spms-standard name: spms-standard-ingress-gateway path: spms-ing.yml以上文件中的
- group 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.yml 中 apiVersion 的值中 networking.k8s.io 部分。
- version 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.yml 中 apiVersion 的值中 v1 部分。
- kind 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.yml 中 kind 的值。
- namespace对应基准中的 Ingress 对象文件: /test/bases/shark-ing.yml 中 namespace 的值。
- name对应基准中的 Ingress 对象文件: /test/bases/shark-ing.yml 中 name 的值。
执行构建
kubectl kustomize /test/dev
将会得到如下完整的 YAML 文件
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: spms-standard-ingress-gateway namespace: spms-standard spec: ingressClassName: nginx rules: - http: paths: - backend: service: name: spms-standard-support-gateway port: number: 8080 path: /spms-standard pathType: Prefix - backend: service: name: spms-standard-support-gateway port: number: 8080 path: /spms-digital pathType: Prefix - backend: service: name: spms-standard-support-gateway port: number: 8080 path: /spms-shark pathType: Prefix
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
