内容简介:在前面的文章中已经介绍了 kustomize 是什么,如何开始使用已经如何简单的在 CI/CD 中使用,本篇文章将会介绍 kustomize 的核心文件另外,博主已经向 kustomize 贡献了中文文档,已被官方采纳,现在在 kustomize 中的Kustomize 允许用户以一个应用描述文件 (YAML 文件)为基础(Base YAML),然后通过 Overlay 的方式生成最终部署应用所需的描述文件。
前言
在前面的文章中已经介绍了 kustomize 是什么,如何开始使用已经如何简单的在 CI/CD 中使用,本篇文章将会介绍 kustomize 的核心文件 kustomization.yaml 。
另外,博主已经向 kustomize 贡献了中文文档,已被官方采纳,现在在 kustomize 中的 docs/zh 目录中就可看到,翻译的不好的地方欢迎指正。同时也在 GitHub 上新建了一个 名为 kustomize-demo 的 repo 用于演示 kustomize 的各种用法及技巧,本文中介绍的内容也会同步更新到该 repo 中,欢迎 fork、star、PR。
kustomization.yaml 的作用
Kustomize 允许用户以一个应用描述文件 (YAML 文件)为基础(Base YAML),然后通过 Overlay 的方式生成最终部署应用所需的描述文件。
有前面的文章 《使用 Kustomize 帮你管理 kubernetes 应用(二): Kustomize 的使用方法》 中已经介绍了,每个 base 或 overlays 中都必须要有一个 kustomization.yaml ,这里我们看一下官方示例 helloWorld 中的kustomization.yaml :
commonLabels: app: hello
resources:- deployment.yaml- service.yaml- configMap.yaml
可以看到该项目中包含3个 resources , deployment.yaml 、 service.yaml 、 configMap.yaml 。
.└── helloWorld
├── configMap.yaml
├── deployment.yaml
├── kustomization.yaml
└── service.yaml
直接执行命令:
kustomize build helloWorld
就可以看到结果了:
apiVersion: v1
data: altGreeting: Good Morning! enableRisky: "false"kind: ConfigMapmetadata: labels: app: hello
name: the-map---apiVersion: v1
kind: Servicemetadata: labels: app: hello
name: the-service
spec: ports: - port: 8666 protocol: TCP
targetPort: 8080 selector: app: hello
deployment: hello
type: LoadBalancer---apiVersion: apps/v1
kind: Deploymentmetadata: labels: app: hello
name: the-deployment
spec: replicas: 3 selector: matchLabels: app: hello
template: metadata: labels: app: hello
deployment: hello
spec: containers: - command: - /hello
- --port=8080 - --enableRiskyFeature=$(ENABLE_RISKY) env: - name: ALT_GREETING
valueFrom: configMapKeyRef: key: altGreeting
name: the-map
- name: ENABLE_RISKY
valueFrom: configMapKeyRef: key: enableRisky
name: the-map
image: monopole/hello:1 name: the-container
ports: - containerPort: 8080
从上面的结果可以看大 kustomize 通过 kustomization.yaml 将3个 resources 进行了处理,给三个 resources 添加了共同的 labels app: hello 。这个示例展示了 kustomization.yaml 的作用: 将不同的 resources 进行整合,同时为他们加上相同的配置 。
进阶使用
上面只不过是一个简单的示例,下面将结合实际情况分享一些比较实用的用法
根据环境生成不同配置
在实际的使用中,使用最多的就是为不同的环境配置不同的 deploy.yaml ,而使用 kustomize 可以把配置拆分为多个小的 patch ,然后通过 kustomize 来进行组合。而根据环境的不同,每个 patch 都可能不同,包括分配的资源、访问的方式、部署的节点都可以自由的定制。
.├── flask-env│ ├── README.md│ ├── base│ │ ├── deployment.yaml│ │ ├── kustomization.yaml│ │ └── service.yaml│ └── overlays│ ├── dev│ │ ├── healthcheck_patch.yaml│ │ ├── kustomization.yaml│ │ └── memorylimit_patch.yaml│ └── prod│ ├── healthcheck_patch.yaml│ ├── kustomization.yaml│ └── memorylimit_patch.yaml
这里可以看到配置分为了 base 和 overlays , overlays 则是继承了 base 的配置,同时添加了诸如 healthcheck 和 memorylimit 等不同的配置,那么我们分别看一下 base 和 overlays 中 kustomization.yaml 的内容
base
commonLabels: app: test-cicd
resources:- service.yaml- deployment.yaml
base 中的 kustomization.yaml 中定义了一些基础配置
overlays
bases:- ../../basepatchesStrategicMerge:- healthcheck_patch.yaml- memorylimit_patch.yamlnamespace: devops-dev
overlays 中的 kustomization.yaml 则是基于 base 新增了一些个性化的配置,来达到生成不同环境的目的。
执行命令
kustomize build flask-env/overlays/dev
结果
apiVersion: v1
kind: Servicemetadata: labels: app: test-cicd
name: test-cicd
namespace: devops-dev
spec: ports: - name: http
port: 80 targetPort: 80 selector: app: test-cicd
type: ClusterIP---apiVersion: apps/v1
kind: Deploymentmetadata: labels: app: test-cicd
name: test-cicd
namespace: devops-dev
spec: replicas: 1 selector: matchLabels: app: test-cicd
template: metadata: labels: app: test-cicd
version: 0.0.3 spec: containers: - env: - name: ENV
value: dev
image: guoxudongdocker/flask-python:latest
imagePullPolicy: Always livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 20 name: test-cicd
readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 20 resources: limits: cpu: 300m memory: 500Mi requests: cpu: 300m memory: 500Mi volumeMounts: - mountPath: /etc/localtime
name: host-time
imagePullSecrets: - name: registry-pull-secret
volumes: - hostPath: path: /etc/localtime
name: host-time
可以看到包括 replicas 、 limits 、 requests 、 env 等 dev 中个性的配置都已经出现在了生成的 yaml 中。由于篇幅有限,这里没有把所有的配置有罗列出来,需要的可以去 GitHub 上自取。
结语
上面所有的 kustomize build dir/ 都可以使用 kubectl apply -k dir/ 实现,但是需要 v14.0 版以上的 kubectl ,也就是说,其实我们在集成到 CI/CD 中的时候,甚至都不需要用来 kustomize 命令集,有 kubectl 就够了。
由于篇幅有限,这里没法吧所有 kustomization.yaml 的用途都罗列出来,不过可以在官方文档中找到我提交的中文翻译版 kustomization.yaml ,可以直接去官方 GitHub 查看。同时 kustomize-demo 会持续更行,敬请关注。
本文来源:码农网
本文链接:https://www.codercto.com/a/80856.html