【Kubernetes 企业项目实战】11、掌握 Kubernetes Kustomize 技术从入门到企业实战(下)

news/2024/11/28 21:59:39/

目录

一、Kustomize 进阶

1.1 使用覆盖定制资源

1.1.1 kustomization.yaml

1.1.2 deploy-patch.yaml

1.1.3 ing-patch.yaml

1.1.4 op 操作类型介绍

二、生成测试环境定制资源

三、使用 Kustomize 来应用、查看和删除对象

3.1 创建应用

3.2 查看应用

3.3 删除应用

四、总结


一、Kustomize 进阶

本次以 test1 环境为例介绍!

root@jenkins:/data/kustomize# tree personal-web/
personal-web/
├── base
│   ├── deploy.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   ├── nginx.conf
│   └── service.yaml
└── overlays
    ├── pre
    │   ├── deploy-patch.yaml
    │   ├── ing-patch.yaml
    │   └── kustomization.yaml
    ├── prod
    │   ├── deploy-patch.yaml
    │   ├── ing-patch.yaml
    │   ├── kustomization.yaml
    │   └── set_volumeMounts.yaml
    ├── test1
    │   ├── deploy-patch.yaml
    │   ├── ing-patch.yaml
    │   └── kustomization.yaml
    └── test2
        ├── deploy-patch.yaml
        ├── ing-patch.yaml
        └── kustomization.yaml

1.1 使用覆盖定制资源

1.1.1 kustomization.yaml

        创建一个名为 overlays 的目录,用于存放覆盖;在 overlays 目录下创建一个名为 test1 的目录,表示测试环境 1 的覆盖;在 overlays/test1 目录下创建一个名为 kustomization.yaml 的文件,内容如下:

root@jenkins:/data/kustomize# cat personal-web/overlays/test1/kustomization.yaml 
bases:
- ../../base
namespace: test1
namePrefix: personal-web
commonLabels: app: personal-webpatchesJson6902:
- target:group: appsversion: v1kind: Deploymentname: -app path: deploy-patch.yaml
- target:group: networking.k8s.ioversion: v1kind: Ingressname: -ingresspath: ing-patch.yaml

   kustomization.yaml 文件位于 personal-web/overlays/test1/ 目录下,用于描述特定于 test1 环境的 Kustomize 配置。这个文件包含以下内容:

  • bases:指定基础资源所在的目录。在这个例子中,基础资源位于 ../../base 目录,即 personal-web/base。Kustomize 将在这个基础上应用 test1 环境的特定修改。

  • namespace:设置所有资源的 Kubernetes 命名空间。在这个例子中,所有资源将位于 test1 命名空间。

  • namePrefix:为所有资源添加名称前缀。在这个例子中,所有资源的名称将以 personal-web 作为前缀。

  • commonLabels:为所有资源添加通用标签。在这个例子中,给所有资源添加一个名为 app 的标签,其值为 personal-web

  • patchesJson6902:是 Kustomize 中用于对 Kubernetes 资源应用 JSON 6902 标准补丁的配置。在这个例子中,有两个补丁要应用到不同的资源上:

    1. 第一个补丁:

      • target: 定义要修改的 Kubernetes 资源的目标。
        • group: 资源的 API 组,这里是 apps
        • version: 资源的 API 版本,这里是 v1
        • kind: 资源的类型,这里是 Deployment
        • name: 资源的名称,这里是 -app(namePrefix 为所有资源添加名称前缀成为 personal-web-app)。
      • path: 定义补丁的文件路径,这里是 deploy-patch.yaml。此文件应包含针对 Deployment 资源的 JSON 6902 标准补丁。
    2. 第二个补丁:

      • target: 定义要修改的 Kubernetes 资源的目标。
        • group: 资源的 API 组,这里是 networking.k8s.io
        • version: 资源的 API 版本,这里是 v1
        • kind: 资源的类型,这里是 Ingress
        • name: 资源的名称,这里是 -ingress(namePrefix 为所有资源添加名称前缀成为 personal-web-ingress)。
      • path: 定义补丁的文件路径,这里是 ing-patch.yaml。此文件应包含针对 Ingress 资源的 JSON 6902 标准补丁。

1.1.2 deploy-patch.yaml

root@jenkins:/data/kustomize# cat personal-web/overlays/test1/deploy-patch.yaml 
#副本数
- op: replacepath: /spec/replicasvalue: 1
#最大不可用数
- op: replacepath: /spec/strategy/rollingUpdate/maxUnavailablevalue: 1
#image
- op: replacepath: /spec/template/spec/containers/0/imagevalue: sky/test1/personal-web:26

        这个 deploy-patch.yaml 文件是一个使用 JSON 6902 标准定义的补丁文件,用于针对 test1 环境的 Deployment 资源应用修改。它包含以下操作:

  1. 修改副本数:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/replicas(相当于 spec.replicas 字段),表示 Deployment 的副本数。
    • value: 新值,这里是 1,将用于替换原有值。
  2. 修改最大不可用数:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/strategy/rollingUpdate/maxUnavailable,表示滚动更新策略中的最大不可用数。
    • value: 新值,这里是 1,将用于替换原有值。
  3. 修改容器镜像:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/template/spec/containers/0/image(0 可以解释为代替 - 符号),表示第一个容器的镜像。
    • value: 新值,这里是 sky/test1/personal-web:26,将用于替换原有值。

        这个补丁文件中的修改针对 test1 环境的 Deployment 资源,可以通过 Kustomize 配置自动应用,从而根据不同环境自动生成相应的资源清单。

1.1.3 ing-patch.yaml

root@jenkins:/data/kustomize# cat personal-web/overlays/test1/ing-patch.yaml 
# tls
- op: replacepath: /spec/tls/0/hosts/0value: test1c.sky.net
- op: replacepath: /spec/tls/0/secretNamevalue: sky.net20231029
# 域名
- op: replacepath: /spec/rules/0/hostvalue: test1c.sky.net
# svc 名称
- op: addpath: /spec/rules/0/http/paths/0/backend/service/namevalue: personal-web-svc

        这个 ing-patch.yaml 文件是一个使用 JSON 6902 标准定义的补丁文件,用于针对 test1 环境的 Ingress 资源应用修改。它包含以下操作:

  1. 修改 TLS 配置的域名:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/tls/0/hosts/0,表示第一个 TLS 配置的第一个域名。
    • value: 新值,这里是 test1c.sky.net,将用于替换原有值。
  2. 修改 TLS 配置的 secretName:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/tls/0/secretName,表示第一个 TLS 配置的 secretName。
    • value: 新值,这里是 sky.net20231029,将用于替换原有值。
  3. 修改 Ingress 规则的域名:

    • op: 操作类型,这里是 replace,表示替换原有值。
    • path: 要修改的资源路径,这里是 /spec/rules/0/host,表示第一个 Ingress 规则的域名。
    • value: 新值,这里是 test1c.sky.net,将用于替换原有值。
  4. 修改 Ingress 规则中服务名称:

    • op: 操作类型,这里是 add,表示添加新值。如果该路径已存在值,则 add 操作将替换原有值。
    • path: 要修改的资源路径,这里是 /spec/rules/0/http/paths/0/backend/service/name,表示第一个 Ingress 规则中第一个 HTTP 路径的后端服务名称。
    • value: 新值,这里是 personal-web-svc,将用于替换或添加到原有值。

        这个补丁文件中的修改针对 test1 环境的 Ingress 资源,可以通过 Kustomize 配置自动应用,从而根据不同环境自动生成相应的资源清单。

1.1.4 op 操作类型介绍

在 JSON 6902 标准中,op 可以表示以下几种操作类型:

  1. add:添加一个新值。如果指定的路径已存在值,则替换该值;如果路径不存在,则创建路径并设置值。如果要在数组中添加新元素,可以使用 - 作为数组索引,表示将元素添加到数组末尾。

  2. remove:删除指定路径的值。如果路径不存在,该操作将失败。

  3. replace:替换指定路径的值。如果路径不存在,该操作将失败。

  4. move:将一个值从源路径移动到目标路径。源路径和目标路径都必须存在。该操作等效于先执行 remove 操作,然后执行 add 操作。

  5. copy:复制一个值从源路径到目标路径。源路径必须存在,目标路径可以不存在。该操作等效于先获取源路径的值,然后使用 add 操作将其添加到目标路径。

  6. test:测试指定路径的当前值是否与提供的值相等。如果值不相等,该操作将失败。

        这些操作类型可以在 JSON 6902 标准的补丁文件中使用,以便对 Kubernetes 资源或其他 JSON 数据进行修改。

二、生成测试环境定制资源

        现在,我们可以使用 kubectl kustomize 命令生成测试环境定制资源(可用于检查发现哪里有不对的地方便于后续修改):

root@jenkins:/data/kustomize# kubectl kustomize personal-web/overlays/test1/

三、使用 Kustomize 来应用、查看和删除对象

3.1 创建应用

        在 kubectl 命令中使用 --kustomize 或 -k 参数来创建被 kustomization.yaml 所管理的资源应用。 注意 -k 要指向一个 kustomization 目录。例如:

root@jenkins:/data/kustomize# kubectl apply -k personal-web/overlays/test1/

3.2 查看应用

运行下面的命令之一来查看生成的应用:

root@jenkins:/data/kustomize# kubectl get -k personal-web/overlays/test1/root@jenkins:/data/kustomize# kubectl describe -k personal-web/overlays/test1/# 当然也可以使用 kubectl get pods -n test1 查看具体的资源

3.3 删除应用

root@jenkins:/data/kustomize# kubectl delete -k personal-web/overlays/test1/

四、总结

        在本教程中,我们了解了 Kustomize 的基本概念、使用方法,并演示了如何应用于实际场景。通过使用 Kustomize,我们可以更方便地为不同环境和场景定制 Kubernetes 资源配置,提高了配置管理的灵活性和可维护性。希望这篇教程对你有所帮助,如果有任何问题,请随时在下方留言。

上一篇文章:【Kubernetes 企业项目实战】10、掌握 Kubernetes Kustomize 技术从入门到企业实战(上)_Stars.Sky的博客-CSDN博客


http://www.ppmy.cn/news/40189.html

相关文章

在PHP中输出JS语句以及乱码问题的解决方案

在PHP中输出JS语句以及乱码问题的解决方案 怎样在php中输出js语句? 示例 $classState""; if($state0){ $classState"已下课"; } else{ $classState"正在上课"; } echo ""; ?> 这样在页面的其他地方,就可以直接引用php中…

学习系统编程No.14【动静态库】

引言: 北京时间:2023/4/3/7:06,刚刚晨跑回来,为了摆脱困意,刷了一下视屏,哈哈哈!我发现我每次刷视屏都是被迫的,都是看到某个感兴趣的标题,然后点进去一看,就…

PHP观察者模式(Observer Pattern)

PHP观察者模式(Observer Pattern) 观察者模式是一种行为设计模式,它定义了一种订阅机制,让一个或多个对象(观察者)自动被通知并更新,当被观察对象(主题)的状态发生改变时…

Antd Table Pro框架Protable组件中rowSelection方法的一个坑

首先上截图看我遇到的问题跟你是否一样,全选了,还是提示就选了1个。。。。。 解决办法: 就一个点,非常坑,在你的protable组件里有个方法rowKey的值改为:{record > record.gnlkid} 注意gnlkid是你接口返…

JS(1)

本博客的js只讨论浏览器上的,可以开发网页的js,不考虑node.js 主要分为三个部分: ECMAScript 也就是JavaScript语法 DOM 页面文档对象模型 对页面中的元素进行操作 BOM 浏览器对象模型 对浏览器窗口进行操作 后两者都是浏览器给js提供的…

天气Weather

前言 加油 原文 天气常用会话 ❶ It looks as though it might clear up. 看起来天好像要转晴。 ❷ The forecast is not accurate. 预报不准确。 ❸ The weatherman says we’ll have a cold spell before the end of this week. 天气预报员说,在这个周末之前会有一股寒…

通读《技术管理实战36讲》1、自我倾听篇

你好,我是小Z,一个工作在交付前线的程序员,我们正在通读《技术管理实战36讲》,作者刘建国。今天我们要梳理的章节是“自我倾听篇”。 在第1篇《多年前的那些工程师都去哪了?》中, 作者借助上周的“老知道人…

【面试】spring中怎么解决循环依赖问题?

文章目录前言1、什么是循环依赖?2、Spring怎么解决循环依赖3、如何解决?4、怎么样的循环依赖无法处理?5、总结:前言 思考: 什么是循环依赖?Spring怎么解决循环依赖Spring对于循环依赖无法解决的场景 1、什么是循环依赖? 循环…