属性匹配工具_k8s包管理工具Kustomize实战手册
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 文件:
![](/assets/blank.gif)
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 啊~)
![](/assets/blank.gif)
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实战手册相关推荐
- python pip工具命令_python 工具链 包管理工具 pip
Installation mac下可以采用 brew,easy_install(python自带)等方式安装. centos下可以采用yum,easy_install等方式安装. 但是上面两种方式在系 ...
- 【Linux基础】常用开发工具——yum包管理工具
文章目录 一.检查网络 二.查看软件包 三.安装软件包 四.卸载软件包 一.检查网络 使用yum必须保证主机网络通畅 ping [网址] 二.查看软件包 yum list:查看所有的软件包 yum l ...
- python模块管理工具,Python的包管理工具
Python的包管理工具 python包管理工具 python包管理工具简介 distribute是setuptools的取代,pip是easy_install的取代. Distribute是对标准库 ...
- 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择
文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...
- Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)
目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...
- Windows下的包管理工具scoop
Windows下的包管理工具scoop 包管理工具? 顾名思义就是程序软件包的安装工具,可以管理操作系统上的软件,我们熟知的Ubuntu上的apt-get(在Ubuntu16以上可以直接用apt了), ...
- 现代化程序开发笔记(4)——包管理工具
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记.在这篇文章中,我会就项目构建工具和包管理工具做一些讨论,先 ...
- 外来Slackware包管理工具[转]
http://blog.csdn.net/eroswang/archive/2007/08/11/1738766.aspx一.SWARET ---网络安装模式的实现! 1.简介: swaret可以进行 ...
- 使用 EthPM 包管理工具
使用 EthPM 包管理工具 EthPM 是 Ethereum 提供的软件包注册表.它遵循ERC190规范来发布和使用智能合约包, 并获得了许多不同的Ethereum开发工具的广泛支持.为了表示我们的 ...
最新文章
- c语言大顶堆数组维护,图解大顶堆的构建、排序过程
- 【转】结合ashx来在DataGrid中显示从数据库中读出的图片
- HP-UX匿名ftp的upload权限问题
- 如何基于 String 实现同步锁?
- [JBoss] - 环境搭建
- 遇见C++ AMP:在GPU上做并行计算
- 如何使用网络库实现应用级消息收发
- 跟开涛学 SpringMVC
- Asp.net Core Jenkins Docker 实现一键化部署
- ios pusher使用_如何使用JavaScript和Pusher构建实时图
- java输出目录节点_节点如果不存在,如何创建目录?
- c店店铺名怎么用旗舰店_大发现!三利和洁丽雅2大国民毛巾品牌也有1688店铺!...
- Windows Phone 7 Tips (8)
- 卫星遥感影像查询网址
- 多人在线编辑文档 开发_十个在线小工具,科研amp;工作必备神器!
- Image Thresholding图像阙值化和Adaptive Thresholding
- 计算机架构宗师Patterson与Hennessy 演讲实录,ISA指令集架构回顾——未来指令集架构方向,RISC-V与DSA
- 王爽《汇编语言》实验1笔记与实验任务
- OID,唯一性的标志
- 求数学系或计算机系姓张的学生的信息,实验二数据库的简单查询和连接查询.docx...
热门文章
- spring配置数据源错误记录
- html文档的三大元素,html文件构成-HTML文档的三大组成元素不包括?HTML文档的三大组成元素不包 爱问知识人...
- 计算机跳转列表常用组合框,2015计算机二级VB考点复习指导:列表框和组合框
- Linux基础——怎么样用 TeamViewer 和 VNC 从远程控制电脑
- MPAA正在对BT下毒手,BT大站被警方关闭
- TensorFlow模型保存和提取方法(含滑动平均模型)
- OpenCV使用FileStorage保存Mat数据
- 泛微oa系统什么框架_泛微移动办公OA系统走进江苏国曜信息科技有限公司
- 应急响应之ARP欺骗
- python学习笔记(二十七)多线程与多进程