zoukankan      html  css  js  c++  java
  • 使用kustomize进行Kubernetes对象的声明式管理

    使用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
    
    • 查看已经创建的文件
    [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
    
    • 通过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   <none>           <none>
    [root@kub01 k8sredis]#
    
    • 查看对应的配置文件信息是否生效
    [root@kub01 k8sredis]# kubectl exec -it redis redis-cli
    127.0.0.1:6379> CONFIG GET maxmemory
    1) "maxmemory"
    2) "2097152"
    
  • 相关阅读:
    不规范的json文档 转化成 java 对象的处理
    财经接口
    Back-off pulling image "registry.access.redhat.com/rhel7/pod-infrastructure:latest
    VMware Workstation 14 Pro永久激活密钥
    Angular2入门:TypeScript的装饰器
    Angular2入门:TypeScript的模块
    Angular2入门:TypeScript的类
    51nod“省选”模测第二场 B 异或约数和(数论分块)
    51nod1238 最小公倍数之和 V3(莫比乌斯反演)
    cf1139D. Steps to One(dp)
  • 原文地址:https://www.cnblogs.com/zmichael/p/12228838.html
Copyright © 2011-2022 走看看