创建并连接 ApeCloud MySQL 集群
本文档展示如何创建并连接到 ApeCloud MySQL 集群。
创建并连接到 ApeCloud MySQL 集群
开始之前
-
如果您想通过
kbcli
创建并连接 ApeCloud MySQL 集群,请先安装 kbcli。 -
确保 ApeCloud MySQL 引擎已启用。KubeBlocks 默认已安装 ApeCloud MySQL,如果您在安装 KubeBlocks 关闭/卸载了该引擎,可参考相关文档,再次启用/安装该引擎。
- kubectl
- kbcli
kubectl get addons.extensions.kubeblocks.io apecloud-mysql
>
NAME TYPE VERSION PROVIDER STATUS AGE
apecloud-mysql Helm Enabled 61mkbcli addon list
>
NAME VERSION PROVIDER STATUS AUTO-INSTALL
...
apecloud-mysql 0.9.0 apecloud Enabled true
... -
查看可用于创建集群的数据库类型和版本。
- kubectl
- kbcli
确认
apecloud-mysql
cluster definition 是否已安装。kubectl get clusterdefinition apecloud-mysql
>
NAME TOPOLOGIES SERVICEREFS STATUS AGE
apecloud-mysql Available 85m查看可用于创建集群的版本。
kubectl get clusterversions -l clusterdefinition.kubeblocks.io/name=apecloud-mysql
>
NAME CLUSTER-DEFINITION STATUS AGE
ac-mysql-8.0.30 apecloud-mysql Available 85mkbcli clusterdefinition list
kbcli clusterversion list -
为保持隔离,本教程中创建一个名为
demo
的独立命名空间。kubectl create namespace demo
创建集群
KubeBlocks 支持创建两种类型的 ApeCloud MySQL 集群:单机版(Standalone)和集群版(RaftGroup)。单机版仅支持一个副本,适用于对可用性要求较低的场景。 集群版包含三个副本,适用于对高可用性要求较高的场景。为了确保高可用性,所有的副本都默认分布在不同的节点上。
- kubectl
- kbcli
-
创建 ApeCloud MySQL 集群。
KubeBlocks 通过
Cluster
定义集群。以下是创建 ApeCloud MySQL 集群版的示例。如果您只有一个节点可用于部署集群版,可设置
spec.schedulingPolicy
或spec.componentSpecs.schedulingPolicy
,具体可参考 API 文档。但生产环境中,不建议将所有副本部署在同一个节点上,因为这可能会降低集群的可用性。cat <<EOF | kubectl apply -f -
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: mycluster
namespace: demo
spec:
terminationPolicy: Delete
clusterDef: apecloud-mysql
topology: apecloud-mysql
componentSpecs:
- name: mysql
serviceVersion: "8.0.30"
disableExporter: false
replicas: 3
resources:
limits:
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
EOF字段 定义 spec.terminationPolicy
集群终止策略,有效值为 DoNotTerminate
、Delete
和WipeOut
。具体定义可参考 终止策略。spec.clusterDef
指定了创建集群时要使用的 ClusterDefinition 的名称。注意:请勿更新此字段。创建 ApeCloud MySQL 集群时,该值必须为 apecloud-mysql
。spec.topology
指定了在创建集群时要使用的 ClusterTopology 的名称。 spec.componentSpecs
集群 component 列表,定义了集群 components。该字段支持自定义配置集群中每个 component。 spec.componentSpecs.serviceVersion
定义了 component 部署的服务版本。ApeCloud MySQL 版本为 8.0.30。 spec.componentSpecs.disableExporter
定义了是否在 component 无头服务(headless service)上标注指标 exporter 信息,是否开启监控 exporter。有效值为 [true, false]。 spec.componentSpecs.replicas
定义了 component 中 replicas 的数量。ApeCloud MySQL 建议配置奇数,如 [1,3,5,7]。 spec.componentSpecs.resources
定义了 component 的资源要求。 spec.componentSpecs.volumeClaimTemplates
PersistentVolumeClaim 模板列表,定义 component 的存储需求。 spec.componentSpecs.volumeClaimTemplates.name
引用了在 componentDefinition.spec.runtime.containers[*].volumeMounts
中定义的 volumeMount 名称。spec.componentSpecs.volumeClaimTemplates.spec.storageClassName
定义了 StorageClass 的名称。如果未指定,系统将默认使用带有 storageclass.kubernetes.io/is-default-class=true
注释的 StorageClass。spec.componentSpecs.volumeClaimTemplates.spec.resources.storage
可按需配置存储容量。 您可参考 API 文档,查看更多 API 字段及说明。
KubeBlocks operator 监控
Cluster
CRD 并创建集群和全部依赖资源。您可执行以下命令获取集群创建的所有资源信息。kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo
执行以下命令,查看已创建的 ApeCloud MySQL 集群的 YAML 文件:
kubectl get cluster mycluster -n demo -o yaml
-
查看集群是否创建成功。
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster apecloud-mysql ac-mysql-8.0.30 Delete Running 12m
-
创建 ApeCloud MySQL 集群。
创建单机版。
kbcli cluster create apecloud-mysql mycluster --namespace demo
如果您需要自定义集群规格,kbcli 也提供了诸多参数,如支持设置引擎版本、终止策略、CPU、内存规格。您可通过在命令结尾添加
--help
或-h
来查看具体说明。比如,kbcli cluster create apecloud-mysql --help
kbcli cluster create apecloud-mysql -h例如,您可以使用
--mode
指定集群形态为raftGroup
,创建集群版集群。kbcli cluster create apecloud-mysql mycluster --mode='raftGroup' --namespace demo
如果您只有一个节点用于部署集群版集群,可在创建集群时配置集群亲和性,配置
--pod-anti-affinity
,--tolerations
和--topology-keys
。但需要注意的是,生产环境中,不建议将所有副本部署在同一个节点上,因为这可能会降低集群的可用性。例如,kbcli cluster create apecloud-mysql mycluster \
--mode='raftGroup' \
--pod-anti-affinity='Preferred' \
--tolerations='node-role.kubeblocks.io/data-plane:NoSchedule' \
--topology-keys='null' \
--namespace demo -
验证集群是否创建成功。
kbcli cluster list -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo apecloud-mysql ac-mysql-8.0.30 Delete Running Sep 19,2024 16:01 UTC+0800
连接集群
- kubectl
- port-forward
- kbcli
使用 kubectl exec
命令进入 Pod 并连接到数据库。
KubeBlocks operator 会创建一个名为 mycluster-conn-credential
的新的 Secret 来存储集群的连接凭证。该 Secret 包含以下 key:
username
:集群的根用户名。password
:根用户的密码。port
:集群的端口。host
:集群的主机。endpoint
:集群的终端节点,与host:port
相同。
-
获取用于
kubectl exec
命令的username
和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
>
2gvztbvz -
使用用户名和密码,进入 Pod
mycluster-mysql-0
并连接到数据库。kubectl exec -ti -n demo mycluster-mysql-0 -- bash
mysql -uroot -p2gvztbvz
还可以使用端口转发在本地计算机上连接数据库。
-
通过端口转发服务。
kubectl port-forward svc/mycluster-mysql 3306:3306 -n demo
-
在新的终端窗口中执行以下命令,连接到数据库。
mysql -uroot -p2gvztbvz
kbcli cluster connect mycluster -n demo
有关详细的数据库连接指南,请参考连接数据库。