轻松集成系列三:如何在 KubeBlocks 中配置参数模板|以 Oracle MySQL 为例

本文以 Oracle MySQL 为例,介绍如何在KubeBlocks中配置参数模板(点击参考完整 PR)。

前提条件

  1. 了解 K8s 基本概念,例如 Pod,ConfigMap 等。
  2. 完成 Tutorial 1。
  3. 了解 Go Template(非必须)。

背景知识

在创建 Cluster 时,我们通常会根据资源情况、性能需求、环境等信息调整参数。云数据库厂商,如 AWS、Aliyun 也提供了不同的参数模版(例如 RDS 有高性能模版,异步模版等)供用户选择,快速启动。

在本文中,我们会介绍 Kubeblocks 中参数配置的相关内容,包括如何添加参数模版、如何修改参数、如何配置参数校验。

在 K8s 中,用户可将参数文件以 ConfigMap 的形式挂载到 Pod 的卷上。

但是 K8s 只管理 ConfigMap 的更新,并将其同步到 Pod 卷上。如果数据库引擎不支持动态加载配置文件(例如 MySQL,Postgres),那我们只能登录数据库并执行更新操作。通过直接登录数据库的方式操作,就很容易导致配置漂移。

为了防止配置漂移,KubeBlocks 是通过 ConfigMap 来管理参数,且秉持理念是:ConfigMap is the only source-of-truth,即所有配置的变更都是先应用到 ConfigMap 上,然后根据参数的不同生效方式,再应用到 Cluster 的每个 Pod 上。参数/配置更新的话题我们会在下一个教程中详细说明。

ConfigTemplate 配置模板/参数模板

KubeBlocks 通过 Go Template 来渲染参数模版,除了常见函数,还内置了一些数据库中常用到的计算函数(例如 callBufferSizeByResourcegetContainerCPU

KubeBlocks 增强的渲染能力,能让你快速定制一个自适应参数模板(Adaptive ConfigTemplate),可根据上下文(例如内存、CPU 大小)来渲染合适的配置文件。

添加参数模版

apiVersion: v1
kind: ConfigMap
metadata:
  name: oracle-mysql-config-template
  labels:
    {
   
   {
   
   - include "oracle-mysql.labels" . | nindent 4 }}
data:
  my.cnf: |-
    {
   
   {
   
   `
      [mysqld]
      port=3306
      {
   
   {
   
   - $phy_memory := getContainerMemory ( index $.podSpec.containers 0 ) }}
      {
   
   {
   
   - $pool_buffer_size := ( callBufferSizeByResource ( index $.podSpec.containers 0 ) ) }}
      {
   
   {
   
   - if $pool_buffer_size }}
      innodb_buffer_pool_size={
   
   {
   
    $pool_buffer_size 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值