kustomize是一个k8s配置管理工具,可以用于管理不同环境下K8S YAML文件,在 k8s 1.14 被整合进了官方命令工具 kubectl 中。

kustomize是一个官方的k8s配置管理工具,直接通过kubectl就可以使用:

$ kubectl help kustomizePrint a set of API resources generated from instructions in a kustomization.yaml file. The argument must be the path to the directory containing the file, or a git repository URL with a path suffixspecifying same with respect to the repository root. kubectl kustomize somedirExamples:  # Use the current working directory  kubectl kustomize .  # Use some shared configuration directory  kubectl kustomize /home/configuration/production  # Use a URL  kubectl kustomize github.com/kubernetes-sigs/kustomize.git/examples/helloWorld?ref=v1.0.6Usage:  kubectl kustomize 

[flags] [options]

命令使用还是很简单的,kubectl kustomize 来生成 YAML 文件,如果要直接运行可以:

kubectl kustomize 

| kubectl apply -f -

也可以直接下载 kustomize 的二进制包命令直接运行。

这里需要注意 kubectl 里面的 kustomize 是 2.0.3 的版本的,其语法和最新版本有很大不同,详细可以参考一下 issue:
https://github.com/kubernetes-sigs/kustomize/issues/1373#issuecomment-618439078

kustomize配置结构

kustomize 配置一般分为两个文件夹base和overlay,base 文件夹下面一般存放”原始的”/“公共的” YAML,overlay 文件夹下放入”特定环境下”的YAML。

base

base 一般由两部分内容组成, kustomize 描述文件和 resources 文件:

resource 文件就是 k8s 的 YAML 资源文件,可以理解为各类型资源创建的模板,一般是基础设置。

kustomization 文件是配置组合文件,在 base 文件夹下,会通过 resources 描述将资源组合起来,最小 kustomization:

resources:- deployment.yaml

overlay

overlay 可以理解为在 base 模板基础上做定制化,也就是起到补丁的所用。overlay 下的 kustomization文件形式:

bases:- ../base # 模板base文件夹的路径patches:- deployment_patches.yaml # 补丁文件路径

overlay 主要是对 base 做覆写(所以才叫 overlay 啊~)

kustomization 打补丁是通过 kind和name进行匹配的,也就是 base 和 patch 里面的名字和类型一致就可以匹配。

这里要注意,对于 deployment 中的 template/containers 的下面也是一种类型(本质是容器),所以这的名字也是要一致的,不然会报错。

kustomize 语法

除了上面提到的两种基本语法 resources、base 和 patches,常用到的语法还有:

  • configMapGenerator
  • secretGenerator
  • generatorOptions
  • commonLabels
  • commonAnnonation
  • namespace
  • images
  • namePrefix
  • nameSuffix
  • images

configMapGenerator

用于生成configMap配置文件的,用法:

configMapGenerator:- name: my-application-properties # configMap名字  files:  - application.properties # 本地文件路径

或者:

configMapGenerator:- name: my-java-server-env-vars  literals:  - JAVA_HOME=/opt/java/jdk  - JAVA_TOOL_OPTIONS=-agentlib:hprof

这里的语法和 configMap 一致。

secretGenerator

secretGenerator 用法和 configMapGenerator 类似,用于生成 secret。

generatorOptions

generatorOptions 为Generator(secretGenerator/configMapGenerator)添加属性, 比如 labels、annotations,用法:

generatorOptions:  labels: # 为所有 generator 设置 labels 属性    fruit: apple  annotations: # 为所有 generator 设置 annotations 属性    kustomize.generated.resource: somevalue  disableNameSuffixHash: true # 关闭名字前缀的hash,默认是开启hash,因此generator在内容相同不同的时候名字会不一样

commonLabels

commonLabels 会为所有资源添加 Labels 标签,比如:

commonLabels:  app: foo  environment: testresources:- deployment.yaml

覆写后的 deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  labels:    app: foo # 新加或覆盖的label    environment: test # 新加或覆盖的label    ... 模板自带没被覆盖的label  name: nginx-deploymentspec:  selector:    matchLabels:    app: foo # 新加或覆盖的label    environment: test # 新加或覆盖的label    ... 模板自带没被覆盖的label  template:    metadata:      labels:        app: foo # 新加或覆盖的label        environment: test # 新加或覆盖的label        ... 模板自带没被覆盖的label    spec:      containers:      - image: nginx        name: nginx

commonAnnotations

commonAnnotations 和 commonLabels 用法一致,也是对所有 resources 写入 Annotations

namespace

kustomization 中的 namespace 会应用所有 resources。

namePrefix

为所有的 resources 的 name 加上前缀,用法:

namePrefix: prod- # 添加前缀的字段

nameSuffix

为所有资源的名字加上后缀,用法同 namePrefix

images

images 主要用于修改镜像,结构如下:

images:  - name: mycontainerregistry/myimage # 需修改的原镜像名称(不用带版本)    newName: differentregistry/myimage # 新的镜像名称    newTag: v1 # 新的镜像版本

images 主要三个字段,name代表需要匹配的镜像名称,newName 代表替换的新的镜像名称,newTag 新的镜像版本

replicas

replicas 用于修改副本数:

replicas:- name: deployment-name  count: 5

注:由于这个声明无法设置kind和group,他会从Deployment、ReplicationController、ReplicaSet、StatefulSet这几种资源进行匹配,如果要限定应该使用patch来实现

patches

patches 是 kustomize 最核心的机制,用于在资源上添加和覆盖字段,patches 形式有三种:

  • 最简单的是直接通过文件的形式添加,比如设置 path:
  • 通过 json patch 的形式添加
  • 通过 strategic merge patch 的形式添加

最简单的 patches 案例:

patches:- path: patch.yaml # patch 文件路径

目标选择器 target

patch 可以通过目标选择器 target 来定义作用域,目标选择器可以通过 group、version、kind、name、namespace、labelSelector、annotationSelector,没有 target 默认状况是应用于所有资源,如果有多个选择器,需要匹配所有指定字段的资源才能来应用 patches:

patches:- path: patch.yaml  target:    group: apps    version: v1    kind: Deployment    name: deploy.*    labelSelector: "env=dev"    annotationSelector: "zone=west"

上面这个例子要同时匹配才能应用 patches 文件。需注意的是 patch 目标选择器的 name 和 namespace 字段是自动锚定的正则表达式。这意味着 myapp 的值相当于 ^myapp$

vars

vars 一般用于将 一个资源的数据 注入到 另一个资源的容器参数,vars 通过 kustomize 中通过反射改变值,比如:
原文件:

containers:  - image: myimage    command: ["start", "--host", "$(MY_SERVICE_NAME)"]    env:    - name: SECRET_TOKEN      value: $(SOME_SECRET_NAME)

通过设置kustomization:

vars:- name: SOME_SECRET_NAME  objref:    kind: Secret    name: my-secret    apiVersion: v1- name: MY_SERVICE_NAME  objref:    kind: Service    name: my-service    apiVersion: v1  fieldref:    fieldpath: metadata.name

vars 是包含该对象的变量名、对象引用和字段引用的元组。

属性匹配工具_k8s包管理工具Kustomize实战手册相关推荐

  1. python pip工具命令_python 工具链 包管理工具 pip

    Installation mac下可以采用 brew,easy_install(python自带)等方式安装. centos下可以采用yum,easy_install等方式安装. 但是上面两种方式在系 ...

  2. 【Linux基础】常用开发工具——yum包管理工具

    文章目录 一.检查网络 二.查看软件包 三.安装软件包 四.卸载软件包 一.检查网络 使用yum必须保证主机网络通畅 ping [网址] 二.查看软件包 yum list:查看所有的软件包 yum l ...

  3. python模块管理工具,Python的包管理工具

    Python的包管理工具 python包管理工具 python包管理工具简介 distribute是setuptools的取代,pip是easy_install的取代. Distribute是对标准库 ...

  4. 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择

    文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...

  5. Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)

    目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...

  6. Windows下的包管理工具scoop

    Windows下的包管理工具scoop 包管理工具? 顾名思义就是程序软件包的安装工具,可以管理操作系统上的软件,我们熟知的Ubuntu上的apt-get(在Ubuntu16以上可以直接用apt了), ...

  7. 现代化程序开发笔记(4)——包管理工具

    本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记.在这篇文章中,我会就项目构建工具和包管理工具做一些讨论,先 ...

  8. 外来Slackware包管理工具[转]

    http://blog.csdn.net/eroswang/archive/2007/08/11/1738766.aspx一.SWARET ---网络安装模式的实现! 1.简介: swaret可以进行 ...

  9. 使用 EthPM 包管理工具

    使用 EthPM 包管理工具 EthPM 是 Ethereum 提供的软件包注册表.它遵循ERC190规范来发布和使用智能合约包, 并获得了许多不同的Ethereum开发工具的广泛支持.为了表示我们的 ...

最新文章

  1. c语言大顶堆数组维护,图解大顶堆的构建、排序过程
  2. 【转】结合ashx来在DataGrid中显示从数据库中读出的图片
  3. HP-UX匿名ftp的upload权限问题
  4. 如何基于 String 实现同步锁?
  5. [JBoss] - 环境搭建
  6. 遇见C++ AMP:在GPU上做并行计算
  7. 如何使用网络库实现应用级消息收发
  8. 跟开涛学 SpringMVC
  9. Asp.net Core Jenkins Docker 实现一键化部署
  10. ios pusher使用_如何使用JavaScript和Pusher构建实时图
  11. java输出目录节点_节点如果不存在,如何创建目录?
  12. c店店铺名怎么用旗舰店_大发现!三利和洁丽雅2大国民毛巾品牌也有1688店铺!...
  13. Windows Phone 7 Tips (8)
  14. 卫星遥感影像查询网址
  15. 多人在线编辑文档 开发_十个在线小工具,科研amp;工作必备神器!
  16. Image Thresholding图像阙值化和Adaptive Thresholding
  17. 计算机架构宗师Patterson与Hennessy 演讲实录,ISA指令集架构回顾——未来指令集架构方向,RISC-V与DSA
  18. 王爽《汇编语言》实验1笔记与实验任务
  19. OID,唯一性的标志
  20. 求数学系或计算机系姓张的学生的信息,实验二数据库的简单查询和连接查询.docx...

热门文章

  1. spring配置数据源错误记录
  2. html文档的三大元素,html文件构成-HTML文档的三大组成元素不包括?HTML文档的三大组成元素不包 爱问知识人...
  3. 计算机跳转列表常用组合框,2015计算机二级VB考点复习指导:列表框和组合框
  4. Linux基础——怎么样用 TeamViewer 和 VNC 从远程控制电脑
  5. MPAA正在对BT下毒手,BT大站被警方关闭
  6. TensorFlow模型保存和提取方法(含滑动平均模型)
  7. OpenCV使用FileStorage保存Mat数据
  8. 泛微oa系统什么框架_泛微移动办公OA系统走进江苏国曜信息科技有限公司
  9. 应急响应之ARP欺骗
  10. python学习笔记(二十七)多线程与多进程