当前位置: 首页 > news >正文

使用 kustomize 对 kubernetes 对象进行声明式管理

补丁实战

策略合并补丁

基准文件:/test/bases/deploy.yml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: sharkname: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80

覆盖中的补丁文件:/test/dev/add_my-nginx2.yml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: sharkname: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 3template:metadata:labels:run: my-nginxspec:containers:- name: my-nginx2image: nginxports:- containerPort: 80

覆盖中的 /test/dev/kustomization.yaml

resources:- ../bases
patches:- path: add_my-nginx2.yml

执行构建

kubectl kustomize  /test/dev

得到如下 YAML

apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginxnamespace: shark
spec:replicas: 3selector:matchLabels:run: my-nginxtemplate:metadata:labels:run: my-nginxspec:containers:- image: nginx    # 补丁新增name: my-nginx2ports:- containerPort: 80- image: nginxname: my-nginxports:- 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: sharkname: shark-ingress-gateway
spec:ingressClassName: nginxrules:- http:paths:- path: "/spms-standard"pathType: Prefixbackend:service:name: shark-gatewayport:number: 8080

覆盖中的 Ingress 对象的 JSON 补丁文件: /test/dev/shark-ing.yml

注意: 这里是增加了两个

- op: addpath: /spec/rules/0/http/paths/-value:path: "/spms-digital"pathType: Prefixbackend:service:name: shark-gatewayport:number: 8080
- op: addpath: /spec/rules/0/http/paths/-value:path: "/spms-shark"pathType: Prefixbackend:service:name: shark-gatewayport: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.ioversion: v1kind: Ingressnamespace: sharkname: shark-ingress-gatewaypath: shark-ing.yml

以上文件中的

  • group 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.ymlapiVersion 的值中 networking.k8s.io 部分。
  • version 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.ymlapiVersion 的值中 v1 部分。
  • kind 对应基准中的 Ingress 对象文件: /test/bases/shark-ing.ymlkind 的值。
  • namespace对应基准中的 Ingress 对象文件: /test/bases/shark-ing.ymlnamespace 的值。
  • name对应基准中的 Ingress 对象文件: /test/bases/shark-ing.ymlname 的值。

执行构建

kubectl kustomize  /test/dev

将会得到如下完整的 YAML 文件

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: shark-ingress-gatewaynamespace: shark
spec:ingressClassName: nginxrules:- http:paths:- backend:service:name: shark-gatewayport:number: 8080path: /spms-standardpathType: Prefix- backend:service:name: shark-gatewayport:number: 8080path: /spms-digitalpathType: Prefix- backend:service:name: shark-gatewayport:number: 8080path: /spms-sharkpathType: Prefix
http://www.lryc.cn/news/337314.html

相关文章:

  • Android Studio开发学习(六)———TableLayout(表格布局)、FrameLayout(帧布局)
  • c++ override关键字
  • 卫星影像联合无人机实现农业保险全生命周期监管监测
  • ChatGLM2-6B_ An Open Bilingual Chat LLM _ 开源双语对话语言模型
  • JAVA的学习日记DAY6
  • Grafana告警(邮件)自定义模板配置
  • 大话设计模式——六大基本设计原则(SOLID原则)
  • Qt | Q_PROPERTY属性和QVariant 类
  • 力扣207.课程表
  • 十五届web模拟题整理
  • ubuntu20.04 安裝PX4 1.13
  • 大型网站系统架构演化
  • 探索Java中的栈:Stack与Deque(ArrayDeque和LinkedList)
  • 实践笔记-03 docker buildx 使用
  • 【数据结构与算法】之8道顺序表与链表典型编程题心决!
  • Go 源码之旅-开篇
  • spring的事件推送
  • 计算机网络—HTTPS协议详解:工作原理、安全性及应用实践
  • 卫星遥感影像在农业方面的应用及评价
  • docker pull镜像的时候指定arm平台
  • 如何通过OceanBase V4.2 动态采样优化查询性能
  • Vue3---基础1(认识,创建)
  • JAVA集合ArrayList
  • Bitmap OOM
  • 基于深度学习的人脸表情识别系统(PyQT+代码+训练数据集)
  • Qt 中的项目文件解析和命名规范
  • 【chatGPT】我:在Cadence Genus软件中,出现如下问题:......【4】
  • 单例模式(Singleton Pattern)在JAVA中的应用
  • 手把手教你创建新的OpenHarmony 三方库
  • 从零开始,如何成功进入IT行业?