一,简介

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. python中使用rsa加密

    前提不多说, 为什么使用RSA加密请自行搜索,直接正为: 一. 生成公钥及私钥, 并保存 二. 使用公钥加密, 私钥解密 后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rs ...

  2. cf 1182 E - Product Oriented Recurrence

    当时脑残了, 不会写矩阵快速幂中更改的系数, 其实把他扔到矩阵里同时递推就好了 #include<cstdio> #include<algorithm> #include< ...

  3. 使用 Java 执行 groovy 脚本或方法

    1. 引入依赖 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groo ...

  4. 强迫症福利--收起.NET程序的dll来

    作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是dll问题. 曾几何时,在没有nuget的年代,当有依赖项需要引用的时候,只能通过文件引用来管理引用问题,版本问题,更 ...

  5. Angular6 学习笔记——路由详解

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  6. Python - 批量下载 IIS 共享的文件

    1.说明 用 IIS 以WEB形式发布了本地文件夹,提供文件下载,并设置了访问权限:默认下载需要点击一个一个的下载,web界面如下: 3.脚本 执行脚本批量下载文件,会在当前目录创建文件夹,并压缩该文 ...

  7. Scratch 3.6环境搭建(万江波实战记录)

    1.Scratch官网在线环境 官方网址:scratch.mit.edu 进入后,点击“Create”建立 2. Scratch官网在线环境_简体中文(点击这个地球) 3-选择:创意 4-进入”创意“ ...

  8. [转帖]k8s 如何让你的应用活的更久

    k8s 如何让你的应用活的更久 https://www.jianshu.com/p/132319e795ae 众所周知,k8s 可以托管你的服务 / 应用,当出现各种原因导致你的应用挂掉之后,k8s ...

  9. springboot打war包汇总

    概述 第一次用maven工具打war包,出现各种各样的问题,做个问题记录方便下次查看 maven 一开始用的maven是springboot默认的,在.m2下,要打包时才发现没有mvn指令.索性自己就 ...

  10. 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w

    镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...