使用 Kustomize 配置 Kubernetes 应用

使用 Kustomize 配置 Kubernetes 应用

如果你经常使用 Kubernetes,那么你肯定就有定制资源清单文件的需求,但是貌似现在大家都比较喜欢使用 Helm,Helm 很好用,但也有很多缺点,比如需要一个 tiller 服务端,需要超高的权限,最重要的是如果你要想自己做一个 Helm Chart 包的话,则不是那么容易的,需要你了解一些 go template 的相关知识,它抛弃了我们在 Docker 和 Kubernetes 上面学到的一些逻辑,今天我们将为大家介绍另外一种名为Kustomize❤️的替代工具。

实际上 Kustomize 并不是一个新的工具,而且现在已经被集成在了 kubectl 1.14 版本的子命令中了,是不是非常方便了,免去了安装第三方工具的麻烦,因为 kubectl 工具基本上是我们天天都在使用的,所以……你可以把 Helm 命令扔掉了😉。

Kustomize 和 Kubernetes 一样,它完全就是声明式的,你说你想要什么,系统就提供给你什么,不需要遵循命令方式来描述你希望构建的对象。

其次,它和 Docker 比较类似,有很多层组成,每个层都是修改以前的层,正因为有这个理念存在,所以我们可以不断在其他人至上写东西,而不会增加配置的复杂性,构建的最终结果由基础部分和你在上面配置的其他层组成。

在这里插入图片描述
最后,和 Git 一样,你可以使用一个远程的基础配置作为最原始的配置,然后在该基础上添加一些自定义的配置。

安装
对于 🍎Mac 用户来说,你可以使用 brew 工具来直接安装

$ brew install kustomize

当然如果你使用的是其他操作系统,那么就可以直接从 Release 页面上面下载二进制文件然后添到 PATH 路径下面即可。当然如果你愿意也可以从源码中直接构建,代码仓库:https://github.com/Kubernetes-sigs/kustomize

基础模板

要使用 Kustomize,你需要有一个原始的 yaml 文件来描述你想要部署到集群中的任何资源,我们这里将这些 base 文件存储在./k8s/base/文件夹下面。

这些文件我们永远不会直接访问,我们将在它们上面添加一些自定义的配置来创建新的资源定义。

你可以在任何时间点使用kubectl apply -f ./k8s/base/命令来构建基础模板。

下面例子中,我们将使用 Service 和 Deployment 资源对象为例进行说明。下面定义两个资源清单文件: service.yaml 定义如下:

apiVersion: v1
kind: Service
metadata:
  name: sl-demo-app
spec:
  ports:
    - name: http
      port: 8080
  selector:
    app: sl-demo-app

deployment.yaml 定义如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sl-demo-app
spec:
  selector:
    matchLabels:
      app: sl-demo-app
  template:
    metadata:
      labels:
        app: sl-demo-app
    spec:
      containers:
      - name: app
        image: foo/bar:latest
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP

然后在当前文件夹下面添加一个名为kustomization.yaml的文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - service.yaml
  - deployment.yaml

这个文件将是你的基础配置文件,它描述了你使用的资源文件。

当你运行kubectl apply -f ./k8s/base/命令时,该kustomization.yaml文件可能会出现一些错误,你可以添加参数--validate=false进行校验,当然也可以不针对整个文件夹运行该命令。

要将基础模板中的资源安装到你的集群中,只需要执行以下命令即可:

$ kubectl apply -k k8s/base
service/sl-demo-app created
deployment.apps/sl-demo-app created

为了了解将安装什么资源到集群中,我们在本文中主要使用kustomize build命令来代替kubectl apply -k命令。当然使用kubectl kustomize命令也是可以的,因为我们说了 kubectl 1.14 版本以后就已经集成了kustomize
使用kustomize build命令运行后的结果如下所示,我们会看到两个文件连接在一起:

$ kustomize build k8s/base
apiVersion: v1
kind: Service
metadata:
  name: sl-demo-app
spec:
  ports:
  - name: http
    port: 8080
  selector:
    app: sl-demo-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sl-demo-app
spec:
  selector:
    matchLabels:
      app: sl-demo-app
  template:
    metadata:
      labels:
        app: sl-demo-app
    spec:
      containers:
      - image: foo/bar:latest
        name: app
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP

定制

现在我们想要针对一些特定场景进行定制,比如,针对生产环境和测试环境需要由不同的配置。我们这里并不会涵盖 Kustomize 的整个功能集,而是作为一个标准示例,向你展示这个工具背后的哲学。

首先我们创建一个新的文件夹,其中包含一个名为kustomzization.yaml的文件,文件内容如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- ../../base

当前文件夹下面的目录结构如下所示:

$ tree
.
└── k8s
    ├── base
    │   ├── deployment.yaml
    │   ├── kustomization.yaml
    │   └── service.yaml
    └── overlays
        └── prod
            └── kustomization.yaml

如果现在我们构建这个文件,将会看到和之前构建 base 目录一样的结果:

$ kustomzie build k8s/overlays/prod
apiVersion
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值