内容简介:在前面的文章中已经介绍了 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: ConfigMap
metadata:
labels:
app: hello
name: the-map
---
apiVersion: v1
kind: Service
metadata:
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: Deployment
metadata:
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: - ../../base patchesStrategicMerge: - healthcheck_patch.yaml - memorylimit_patch.yaml namespace: devops-dev
overlays
中的 kustomization.yaml
则是基于 base
新增了一些个性化的配置,来达到生成不同环境的目的。
执行命令
kustomize build flask-env/overlays/dev
结果
apiVersion: v1
kind: Service
metadata:
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: Deployment
metadata:
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
会持续更行,敬请关注。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Design Handbook
Baeck, Philippe de 编 / 2009-12 / $ 22.54
This non-technical book brings together contemporary web design's latest and most original creative examples in the areas of services, media, blogs, contacts, links and jobs. It also traces the latest......一起来看看 《Web Design Handbook》 这本书的介绍吧!
MD5 加密
MD5 加密工具
HEX HSV 转换工具
HEX HSV 互换工具