Configure cluster parameters
This guide shows how to configure cluster parameters.
KubeBlocks supports dynamic configuration. When the specification of a database instance changes (e.g. a user vertically scales a cluster), KubeBlocks automatically matches the appropriate configuration template based on the new specification. This is because different specifications of a database instance may require different optimal configurations to optimize performance and resource utilization. When you choose a different database instance specification, KubeBlocks automatically detects it and determines the best database configuration for the new specification, ensuring optimal performance and configuration of the database under the new specifications.
This feature simplifies the process of configuring parameters, which saves you from manually configuring database parameters as KubeBlocks handles the updates and configurations automatically to adapt to the new specifications. This saves time and effort and reduces performance issues caused by incorrect configuration.
But it's also important to note that the dynamic parameter configuration doesn't apply to all parameters. Some parameters may require manual configuration. Additionally, if you have manually modified database parameters before, KubeBlocks may overwrite your customized configurations when updating the database configuration template. Therefore, when using the dynamic configuration feature, it is recommended to back up and record your custom configuration so that you can restore them if needed.
Before you start
Configure cluster parameters by editing configuration file
Get the configuration file of this cluster.
kubectl edit configurations.apps.kubeblocks.io mycluster-mysql -n demo
Configure parameters according to your needs. The example below adds the
spec.configFileParams
part to configuremax_connections
.spec:
clusterRef: mycluster
componentName: mysql
configItemDetails:
- configFileParams:
my.cnf:
parameters:
max_connections: "600"
configSpec:
constraintRef: mysql8.0-config-constraints
name: mysql-consensusset-config
namespace: kb-system
templateRef: mysql8.0-config-template
volumeName: mysql-config
name: mysql-consensusset-config
- configSpec:
defaultMode: 292Connect to this cluster to verify whether the configuration takes effect.
Get the username and password.
kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.\username}' | base64 -d
>
root
kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.\password}' | base64 -d
>
2gvztbvzConnect to this cluster and verify whether the parameters are configured as expected.
kubectl exec -ti -n demo mycluster-mysql-0 -- bash
mysql -uroot -p2gvztbvz
>
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 600 |
+-----------------+-------+
1 row in set (0.00 sec)
Configure cluster parameters with an OpsRequest
Define an OpsRequest file and configure the parameters in the OpsRequest in a YAML file named
mycluster-configuring-demo.yaml
. In this example,max_connections
is configured as600
.apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-configuring-demo
namespace: demo
spec:
clusterName: mycluster
reconfigure:
componentName: mysql
configurations:
- keys:
- key: my.cnf
parameters:
- key: max_connections
value: "600"
name: mysql-consensusset-configuration
preConditionDeadlineSeconds: 0
type: ReconfiguringField Definition metadata.name
It specifies the name of this OpsRequest. metadata.namespace
It specifies the namespace where this cluster is created. spec.clusterName
It specifies the cluster name that this operation is targeted at. spec.reconfigure
It specifies a component and its configuration updates. spec.reconfigure.componentName
It specifies the component name of this cluster. spec.configurations
It contains a list of ConfigurationItem objects, specifying the component's configuration template name, upgrade policy, and parameter key-value pairs to be updated. spec.reconfigure.configurations.keys.key
It specifies the configuration map. spec.reconfigure.configurations.keys.parameters
It defines a list of key-value pairs for a single configuration file. spec.reconfigure.configurations.keys.parameter.key
It represents the name of the parameter you want to edit. spec.reconfigure.configurations.keys.parameter.value
It represents the parameter values that are to be updated. If set to nil, the parameter defined by the Key field will be removed from the configuration file. spec.reconfigure.configurations.name
It specifies the configuration template name. preConditionDeadlineSeconds
It specifies the maximum number of seconds this OpsRequest will wait for its start conditions to be met before aborting. If set to 0 (default), the start conditions must be met immediately for the OpsRequest to proceed. Apply the configuration opsRequest.
kubectl apply -f mycluster-configuring-demo.yaml
Connect to this cluster to verify whether the configuration takes effect.
Get the username and password.
kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.\username}' | base64 -d
>
root
kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.\password}' | base64 -d
>
2gvztbvzConnect to this cluster and verify whether the parameters are configured as expected.
kubectl exec -ti -n demo mycluster-mysql-0 -- bash
mysql -uroot -p2gvztbvz
>
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 600 |
+-----------------+-------+
1 row in set (0.00 sec)
Just in case you cannot find the configuration file of your cluster, you can use kbcli
to view the current configuration file of a cluster.
kbcli cluster describe-config mycluster -n demo
From the meta information, the cluster mycluster
has a configuration file named my.cnf
.
You can also view the details of this configuration file and parameters.
View the details of the current configuration file.
kbcli cluster describe-config mycluster --show-detail -n demo
View the parameter description.
kbcli cluster explain-config mycluster -n demo | head -n 20
View the user guide of a specified parameter.
kbcli cluster explain-config mycluster --param=innodb_buffer_pool_size --config-specs=mysql-consensusset-config -n demo
--config-specs
is required to specify a configuration template since ApeCloud MySQL currently supports multiple templates. You can runkbcli cluster describe-config mycluster
to view the all template names.Output
template meta:
ConfigSpec: mysql-consensusset-config ComponentName: mysql ClusterName: mycluster
Configure Constraint:
Parameter Name: innodb_buffer_pool_size
Allowed Values: [5242880-18446744073709552000]
Scope: Global
Dynamic: false
Type: integer
Description: The size in bytes of the memory buffer innodb uses to cache data and indexes of its tables- Allowed Values: It defines the valid value range of this parameter.
- Dynamic: The value of
Dynamic
inConfigure Constraint
defines how the parameter configuration takes effect. There are two different configuration strategies based on the effectiveness type of modified parameters, i.e. dynamic and static.- When
Dynamic
istrue
, it means the effectiveness type of parameters is dynamic and can be configured online. - When
Dynamic
isfalse
, it means the effectiveness type of parameters is static and a pod restarting is required to make the configuration effective.
- When
- Description: It describes the parameter definition.