本文以 Oracle MySQL 为例,介绍如何在KubeBlocks中配置参数模板(点击参考完整 PR)。
前提条件
- 了解 K8s 基本概念,例如 Pod,ConfigMap 等。
- 完成 Tutorial 1。
- 了解 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 来渲染参数模版,除了常见函数,还内置了一些数据库中常用到的计算函数(例如 callBufferSizeByResource,getContainerCPU)
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

最低0.47元/天 解锁文章





