使用kustomize进行Kubernetes对象的声明式管理

2021-04-25 16:27

阅读:408

标签:sig   ted   修改   icm   container   tar   名称   ase   sources   

使用kustomize进行Kubernetes对象的声明式管理

kustomize是一个独立的工具,用于通过kustomization文件来自定义Kubernetes对象。

从1.14开始,Kubectl还支持使用kustomization文件管理Kubernetes对象。要查看在包含kustomization文件的目录中找到的资源,请运行以下命令:

kubectl kustomize 

要应用这些资源,请使用--kustomize或-k标志运行kubectl apply:

kubectl apply -k 

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:

  1. 首先创建redis的配置文件信息redis-config,文件内容如下:
maxmemory 2mb
maxmemory-policy allkeys-lr
  1. 从redis-config文件创建一个包含ConfigMap的kustomization.yaml
cat ./kustomization.yaml
configMapGenerator:
- name: example-redis-config
  files:
  - redis-config
EOF
  1. 定义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
  1. 将pod资源配置添加到kustomization.yaml
cat >./kustomization.yaml
resources:
- redis-pod.yaml
EOF
  1. 查看已经创建的文件
[root@kub01 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
[root@kub01 k8sredis]# pwd
/opt/k8sredis
  1. 通过kubectl apply -k .命令创建所有的资源
    查看已经创建的资源:
[root@kub01 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   
[root@kub01 k8sredis]#
  1. 查看对应的配置文件信息是否生效
[root@kub01 k8sredis]# kubectl exec -it redis redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"

使用kustomize进行Kubernetes对象的声明式管理

标签:sig   ted   修改   icm   container   tar   名称   ase   sources   

原文地址:https://www.cnblogs.com/zmichael/p/12228838.html


评论


亲,登录后才可以留言!