跳到主要内容

创建并连接 ApeCloud MySQL 集群

本文档展示如何创建并连接到 ApeCloud MySQL 集群。

创建并连接到 ApeCloud MySQL 集群

开始之前

  • 如果您想通过 kbcli 创建并连接 ApeCloud MySQL 集群,请先安装 kbcli

  • 安装 KubeBlocks

  • 确保 ApeCloud MySQL 引擎已启用。KubeBlocks 默认已安装 ApeCloud MySQL,如果您在安装 KubeBlocks 关闭/卸载了该引擎,可参考相关文档,再次启用/安装该引擎

    kubectl get addons.extensions.kubeblocks.io apecloud-mysql
    >
    NAME TYPE VERSION PROVIDER STATUS AGE
    apecloud-mysql Helm Enabled 61m
  • 查看可用于创建集群的数据库类型和版本。

    确认 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 85m
  • 为保持隔离,本教程中创建一个名为 demo 的独立命名空间。

    kubectl create namespace demo

创建集群

KubeBlocks 支持创建两种类型的 ApeCloud MySQL 集群:单机版(Standalone)和集群版(RaftGroup)。单机版仅支持一个副本,适用于对可用性要求较低的场景。 集群版包含三个副本,适用于对高可用性要求较高的场景。为了确保高可用性,所有的副本都默认分布在不同的节点上。

  1. 创建 ApeCloud MySQL 集群。

    KubeBlocks 通过 Cluster 定义集群。以下是创建 ApeCloud MySQL 集群版的示例。

    如果您只有一个节点可用于部署集群版,可设置 spec.schedulingPolicyspec.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集群终止策略,有效值为 DoNotTerminateDeleteWipeOut。具体定义可参考 终止策略
    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.volumeClaimTemplatesPersistentVolumeClaim 模板列表,定义 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
  2. 查看集群是否创建成功。

    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

连接集群

使用 kubectl exec 命令进入 Pod 并连接到数据库。

KubeBlocks operator 会创建一个名为 mycluster-conn-credential 的新的 Secret 来存储集群的连接凭证。该 Secret 包含以下 key:

  • username:集群的根用户名。
  • password:根用户的密码。
  • port:集群的端口。
  • host:集群的主机。
  • endpoint:集群的终端节点,与 host:port 相同。
  1. 获取用于 kubectl exec 命令的 usernamepassword

    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
  2. 使用用户名和密码,进入 Pod mycluster-mysql-0 并连接到数据库。

    kubectl exec -ti -n demo mycluster-mysql-0 -- bash

    mysql -uroot -p2gvztbvz

有关详细的数据库连接指南,请参考连接数据库