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

2024-04-08 1168阅读

温馨提示:这篇文章已超过422天没有更新,请注意相关的内容是否还可用!

补丁实战

策略合并补丁

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

使用 kustomize 对 kubernetes 对象进行声明式管理
(图片来源网络,侵删)
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
      
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]