一,简介

kustomize是sig-cli的一个子项目,它的设计目的是给kubernetes的用户提供一种可以重复使用同一套配置的声明式应用管理,从而在配置工作中用户只需要管理和维护kubernetes的API对象,而不需要学习或安装其它的配置管理工具,也不需要通过复制粘贴来得到新的环境的配置。

当我们运行一个kubernetes环境的时候,我们需要一些含有API对象的YAML文件,这些文件中规定了要部署什么样的应用,需要多少份副本,开辟多大的存储空间,分配多少内存和CPU等信息。通过修改这些YAML文件的内容我们可以对这些信息进行相应的改动,比如我们需要增加一个副本,就需要修改对应YAML文件的replica数值;如果我们需要部署最新版本的docker镜像,就需要修改对应YAML文件中的docker镜像的版本或标签。我们可以把所有这些为了满足需求而进行的修改成为自定义kubernetes的配置。

在我们开发一个微服务架构的应用的过程中,我们会创建一些YAML文件来部署一个开发的环境,在这个环境下,我们需要进行各种测试。一旦所有的测试达到了我们的预期,我们就会把这个应用部署到生产环境。因为我们已经有了一套开发环境的配置,我们可以通过复制这些配置,再进行生产环境下的自定义,就可以得倒一套用于生产环境的配置。

然而这种方法的可扩展性并不好,当我们的微服务数量很多或者环境数量很多时,我们就有许多套的配置,这些配置只有细微的差别,而在很大程度上都一样。当我们对配置进行改动或者升级的时候,就非常容易漏掉一些改动或者实施了额外的甚至是错误的改动。我们来看两个简单的例子。

假如我们有一个应用,我们已经把它部署在十个不同的环境中,每一个环境的配置都是通过复制,粘贴和修改得到的。每个环境中所运行的应用版本号都是1.0,现在我们想把所有环境中的版本号升级到2.0。我们就需要修改对应每一个环境下该应用的版本号。这不是一个复杂的改动,我们可以对每一个环境依次进行修改,所有的改动很快就可以完成。但是在这个过程中我们很有可能只修改了其中的九个环境而漏掉了一个;我们也很有可能把其中一个版本号改成2,0。

我们再来看另外一个例子。在小王通过复制,粘贴和修改所得到的一个配置中,小李是没有办法区分哪些值是保持不变,而哪些值是被修改过的。当小李想要修改这个新的配置时,他不知道哪些可以安全地改动而那些可能会影响的当前环境的正确运行。

kustomize允许用户将不同环境所共享的配置放在一个文件目录下,而将其他不同的配置放在另外的目录下。这样用户就可以很容易的区分那些值是当前环境所特有的,从而在修改的时候会额外关注。kustomize可以非常好地解决这些问题。

二,安装

就是下载二进制文件,然后,加上可执行权限。方便点的话,就放入/usr/local/bin

opsys=linux  # or darwin, or windows

curl -s https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest |\

grep browser_download |\

grep $opsys |\

cut -d '"' -f 4 |\

xargs curl -O -L

mv kustomize_*_${opsys}_amd64 kustomize

chmod u+x kustomize

我就放在了普通目录下

三,Demo

参考URL:https://github.com/kubernetes-sigs/kustomize

Kustom-nginx下面三个文件,kustomization.yaml,deployment.yaml,service.yaml

kustomization.yaml

commonLabels:

app: mynginx

resources:

- deployment.yaml

- service.yaml

#configMapGenerator:

#- name: nginx-map

#  files:

#  -  env.startup.txt

deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: nginx

spec:

replicas: 1

selector:

matchLabels:

name: nginx

template:

metadata:

labels:

name: nginx

spec:

containers:

- name: nginx

image: nginx:stable

imagePullPolicy: IfNotPresent

ports:

- containerPort: 80

service.yaml

apiVersion: v1

kind: Service

metadata:

name: nginx-service-nodeport

spec:

ports:

- port: 80

targetPort: 80

protocol: TCP

type: NodePort

selector:

name: nginx

运行命令

./kustomize build ./kustom-nginx/

输出合成后的yaml内容

apiVersion: v1

kind: Service

metadata:

labels:

app: mynginx

name: nginx-service-nodeport

spec:

ports:

- port: 80

protocol: TCP

targetPort: 80

selector:

app: mynginx

name: nginx

type: NodePort

---

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: mynginx

name: nginx

spec:

replicas: 1

selector:

matchLabels:

app: mynginx

name: nginx

template:

metadata:

labels:

app: mynginx

name: nginx

spec:

containers:

- image: nginx:stable

imagePullPolicy: IfNotPresent

name: nginx

ports:

- containerPort: 80

如果要将输出直接发送到k8s集群运行,则可使用Linux管道命令实现:

./kustomize build ./kustom-nginx | kubectl apply -f -

Kustomize安装配置入门文档的更多相关文章

  1. vuex最简单、最直白、最全的入门文档

    前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...

  2. Apache BeanUtils 1.9.2 官方入门文档

    为什么需要Apache BeanUtils? Apache BeanUtils 是 Apache开源软件组织下面的一个项目,被广泛使用于Spring.Struts.Hibernate等框架,有数千个j ...

  3. 【简明翻译】Hibernate 5.4 Getting Started Guide 官方入门文档

    前言 最近的精力主要集中在Hibernate上,在意识到Hibernate 5 的中文资料并不多的时候,我不得不把目光转向Hibernate的官方doc,学习之余简要翻一下入门文档. 原文地址:htt ...

  4. Duilib入门文档提供下载

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...

  5. 作业配置规范文档[MS SQL]

    作业配置规范文档(MS SQL) 文档类型 MS SQL数据库作业配置规范文档 创建日期 2015-07-30 版本变化 V3.0 修改记录 修改人 修改日期 版本 修改描述 潇湘隐者 2015-08 ...

  6. 英文VS2010安装中文版MSDN文档方法

    英文VS2010安装中文版MSDN文档方法 2010-06-01 11:52 by 李永京, 51409 阅读, 50 评论, 收藏, 编辑 在2010年4月12号发布Visual Studio 20 ...

  7. Mongo-Connector 安装及使用文档

    # Mongo-Connector 安装及使用文档 ------ > * 工具介绍> * 安装前准备> * 安装步骤> * 命令详解> * 有可能的坑> * 其他文 ...

  8. Entity Framework Core 中文入门文档

    点击链接查看文档: Entity Framework Core 中文入门文档

  9. django 中文入门文档

    django中文入门文档:阅读地址

随机推荐

  1. vue图片放大、缩小、旋转等

    用于图片浏览的Vue组件,支持旋转.缩放.翻转等操作,基于viewer.js. 效果: 安装 使用npm命令安装 npm install v-viewer 使用 引入v-viewer及必需的css样式 ...

  2. Spring容器与SpringMVC容器的区别与联系

    在spring整体框架的核心概念中,容器的核心思想是管理Bean的整个生命周期.但在一个项目中,Spring容器往往不止一个,最常见的场景就是在一个项目中引入Spring和SpringMVC这两个框架 ...

  3. 【转】python中numpy模块下的np.clip()的用法

    转自:https://blog.csdn.net/HHTNAN/article/details/79799612 Numpy 中clip函数的使用 一维数组 其中a是一个数组,后面两个参数分别表示最小 ...

  4. shell 中 贪婪匹配 和 非贪婪匹配

    举个栗子: v=jfedu.shiyiwen.com echo ${v%.*} 一个%为非贪婪匹配,即匹配最短结果.%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符. 那么当然是匹配到了.c ...

  5. CF 715 E. Complete the Permutations

    CF 715 E. Complete the Permutations 题目大意:给定两个排列\(p,q\)的一部分.定义两个排列\(p,q\)的距离为使用最少的交换次数使得\(p_i=q_i\).对 ...

  6. commitizen规范代码提交

    转载链接:https://www.jianshu.com/p/bd712e42f2e9 参考链接:https://segmentfault.com/a/1190000009048911 平时提交的变动 ...

  7. Java学习:JDK8的新特性

    Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...

  8. asp.net SQLite关于各版本的调试

    最近想做一个简版的管理系统,将SQL SERVER数据库切换到SQLite数据库中,采用的是SQLite3的版本数据库. 开发工具:SV2015 UP3 数据库:SQLite3 项目整体结构图 相同的 ...

  9. 使用Alipay代码源,构建自己的Docker镜像

    1. alipay 镜像仓库 地址 (自行换成自己的阿里镜像云DockerHub地址) https://cr.console.aliyun.com/repository/ 2.alipay 代码云 地 ...

  10. Android 常用炫酷控件(开源项目)git地址汇总

    第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...