使用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:

  1. 首先创建redis的配置文件信息redis-config,文件内容如下:
maxmemory 2mb
maxmemory-policy allkeys-lr
  1. 从redis-config文件创建一个包含ConfigMap的kustomization.yaml
cat <<EOF >./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 <<EOF >>./kustomization.yaml
resources:
- redis-pod.yaml
EOF
  1. 查看已经创建的文件
[[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
  1. 通过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]#
  1. 查看对应的配置文件信息是否生效
[[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

使用kustomize进行Kubernetes对象的声明式管理的相关文章

Spring源码阅读:Spring声明式事务处理和编程式事务处理的设计与实现

之前的学习,了解了Spring事务管理的基础框架(查看).Spring在此基础上又提到了声明式事务管理和编程式事务管理.这里就来看看Spring是如何实现的. Spring声明式事务与EJB事务管理对比 Spring的声明式管理,类似于EJB的CMT,但又有不同.他们的不同之处有: 1)EJB的CMT是与JTA结合使用,而Spring框架的声明式事务管理可以在任何环境下工作.既可以使用全局事务管理,如JTA,也可以使用局部事务管理如JDBCJPA.Hibernate.JDO等. 2)可以在任何类

spring 声明式事务管理在真实的Service和单元测试时的回滚情况,需要注意的问题,jpa为例子

如何测试事务,测试事务回滚情况: 我做了大量的不同的测试: 场景1: Service层中使用注解@Transactional,注解@PersistenceContext     private EntityManager  emt; 写了两个方法 public void insertfail() //插入失败要回滚 { for(int i=0;i<20;i++) { User users=new User(); users.setEmail("[email protected]"

Kubernetes对象

Kubernetes对象 在之前的文章已经讲到了很多Kubernets对象,包括pod,service,deployment等等.Kubernets对象是一种持久化,表示集群状态的实体.它是一种声明式的意图的记录,一般使用yaml文件描述对象,它使用Kubernetes对象来表示集群的状态,通过API/kubectl管理Kubernetes对象. name和uid 在Kubernetes对象模型中,使用了name和uid作为对象的唯一标识,其中name在同一种对象中是唯一的,在不同类型对象可以是

k8s声明式API介绍

声明式API 所谓“声明式”,指的就是我只需要提交一个定义好的 API 对象来“声明”,我所期望的状态是什么样子 “声明式 API”允许有多个 API 写端,以 PATCH 的方式对 API 对象进行修改,而无需关心本地原始 YAML 文件的内容 Kubernetes 项目才可以基于对 API 对象的增.删.改.查,在完全无需外界干预的情况下,完成对“实际状态”和“期望状态”的调谐(Reconcile)过程 声明式 API,才是 Kubernetes 项目编排能力“赖以生存”的核心所在 Admi

spring事物管理--声明式(AspectJ)(推荐使用)

1.表结构及数据 2.需引入的jar包: 3.业务层(Service).持久层(Dao)接口与实现类 Service接口: //转账案例业务层接口 public interface AccountService { /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out,String in,Double money); } Service实现类: //转账案例

注解方式实现声明式事务管理

使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制的地方,写上: @Transactional @Transactional注解: 1)应用事务的注解 2)定义到方法上: 当前方法应用spring的声明式事务 3)定义到类上:   当前类的所有的方法都应用Spring声明式事务管理; 4)定义到父类上: 当执行父类的方法时候应用事务. 修改bean

spring声明式事务配置详解

spring声明式事务配置详解 君子不器 2013年06月16日 编程世界 5273次阅读 查看评论 理解Spring的声明式事务管理实现 本节的目的是消除与使用声明式事务管理有关的神秘性.简单点儿总是好的,这份参考文档只是告诉你给你的类加上@Transactional注解,在配置文件中添加('<tx:annotation-driven/>')行,然后期望你理解整个过程是怎么工作的.此节讲述Spring的声明式事务管理内部的工作机制,以帮助你在面对事务相关的问题时不至于误入迷途,回朔到上游平静

Spring学习——声明式事物管理

1.什么是事物? 事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比如有一条SQL语句没有执行成功,那么这一组操作都将全部回滚! 2.事物的四大特性: Atomic(原子性):要么都成功,要么都失败; Consistent(一致性):数据应该不被破坏; Isolate(隔离性):用户间操作不相混淆 ; Durable(持久性):永久保存 3.实际开发中,需要事物控制

Struts2声明式异常处理

Struts2支持声明式异常处理,不需要每个exception都捕获 方法只需throws Exception 即可 xml中配置如下 1.全局异常 <!-- 全局的配置,该pacakage中所有action异常都会跳转到/error.jsp --> <global-results> <result name="error">/error.jsp</result> </global-results> <global-ex