使用kustomize进行Kubernetes对象的声明式管理
kustomize是一个独立的工具,用于通过kustomization文件来自定义Kubernetes对象。
从1.14开始,Kubectl还支持使用kustomization文件管理Kubernetes对象。要查看在包含kustomization文件的目录中找到的资源,请运行以下命令:
kubectl kustomize <kustomization_directory>
要应用这些资源,请使用--kustomize或-k标志运行kubectl apply:
kubectl apply -k <kustomization_directory>
Kustomize是用于自定义Kubernetes配置的工具。它具有以下功能来管理应用程序配置文件:
- 从其他来源产生资源,比如从其他文件中设置ConfigMap和Secret
- 设置资源的跨领域,在项目中为所有Kubernetes资源设置跨领域字段是很常见的,比如为所有资源设置相同的名称空间,添加相同的标签集,添加相同的注释集
- 组成和定制资源集合,Kustomize支持不同资源的组合,kustomization.yaml文件中的resources字段定义要包含在配置中的资源列表
kustomize功能列表:
字段 | 字段类型 | 字段功能说明 |
---|---|---|
namespace | string | 为所有资源添加名称空间 |
namePrefix | string | 此字段的值位于所有资源的名称之前 |
nameSuffix | sting | 该字段的值附加到所有资源的名称之后 |
commonLabels | map[string]string | 添加到所有资源和选择器的标签 |
commonAnnotations | map[string]string | 添加到所有资源的注释 |
resources | []string | 此列表中的每个条目都必须解析为现有资源配置文件 |
configmapGenerator | []ConfigMapArgs | 此列表中的每个条目都会生成一个ConfigMap |
secretGenerator | []SecretArgs | 此列表中的每个条目都会生成一个secret |
generatorOptions | GeneratorOptions | 修改所有ConfigMap和Secret生成器 |
bases | []string | 此列表中的每个条目都应解析到包含kustomization.yaml文件的目录 |
patchesStrategicMerge | []string | 此列表中的每个条目都应解析Kubernetes对象的战略合并补丁 |
patchesJson6902 | []Json6902 | 该列表中的每个条目都应解析为一个Kubernetes对象和一个Json Patch |
vars | []Var | 每个条目都是从一种资源的字段中捕获信息 |
images | []Image | 每个条目都将修改一个图像的名称,标签和/或摘要,而不创建补丁 |
configurations | []string | 此列表中的每个条目都应解析为一个包含Kustomize transfromer configuration |
crds | []string | 该列表中的每个条目都应解析为针对Kubernetes类型的OpenAPI定义文件 |
以下使用k8s官网的示例来演示一下,通过configmap配置redis:
- 首先创建redis的配置文件信息redis-config,文件内容如下:
maxmemory 2mb
maxmemory-policy allkeys-lr
- 从redis-config文件创建一个包含ConfigMap的kustomization.yaml
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-redis-config
files:
- redis-config
EOF
- 定义redis的pod配置信息,redis-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
- 将pod资源配置添加到kustomization.yaml
cat <<EOF >>./kustomization.yaml
resources:
- redis-pod.yaml
EOF
- 查看已经创建的文件
[[email protected] k8sredis]# ll
total 12
-rw-r--r-- 1 root root 103 Jan 20 01:59 kustomization.yaml
-rw-r--r-- 1 root root 43 Jan 20 01:57 redis-config
-rw-r--r-- 1 root root 619 Jan 20 01:59 redis-pod.yaml
[[email protected] k8sredis]# pwd
/opt/k8sredis
- 通过kubectl apply -k .命令创建所有的资源
查看已经创建的资源:
[[email protected] k8sredis]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis 1/1 Running 0 3h33m 10.244.0.13 kub01 <none> <none>
[[email protected] k8sredis]#
- 查看对应的配置文件信息是否生效
[[email protected] k8sredis]# kubectl exec -it redis redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
原文地址:https://www.cnblogs.com/zmichael/p/12228838.html
时间: 2024-10-08 02:38:59