跳到主要内容

在云上使用 KubeBlocks

本文档将引导你快速上手 KubeBlocks,并演示如何通过命令创建演示环境(Playground)。

准备工作

在云上部署需要使用 Terraform 脚本来初始化云资源。kbcli 会自动下载并保存该脚本,然后使用 Terraform 命令来创建一个完全托管的 Kubernetes 集群,并在该集群上部署 KubeBlocks。

开始之前

请确保已经:

配置访问密钥

选项 1. 使用 aws configure

填写访问密钥,并执行以下命令进行身份验证。

aws configure
AWS Access Key ID [None]: YOUR_ACCESS_KEY_ID
AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY

你可以参考配置 AWS CLI 获取详细信息。

选项 2. 使用环境变量

export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY"

初始化 Playground

kbcli playground init --cloud-provider aws --region us-west-2
  • cloud-provider 用于指定云服务商。
  • region 用于指定部署 Kubernetes 集群的地区。 你可以在官方网站上找到地区列表。

在初始化过程中,kbcli 会将 GitHub 仓库克隆到 ~/.kbcli/playground 目录,安装 KubeBlocks,并创建一个 MySQL 集群。执行 kbcli playground init 命令后,kbcli 会自动将 kubeconfig 的 context 切换到新的 Kubernetes 集群。

执行以下命令以查看创建的集群。

# 查看 kbcli 版本
kbcli version

# 查看集群列表
kbcli cluster list
备注

整个初始化过程大约需要 20 分钟。如果长时间未安装成功,建议检查网络环境。

在 Playground 中使用 KubeBlocks

你可以根据以下说明,体验 KubeBlocks 的基本功能。

查看 MySQL 集群

步骤:

  1. 查看数据库集群列表。

    kbcli cluster list
  2. 查看数据库集群的详细信息,比如 STATUSEndpointsTopologyImagesEvents

    kbcli cluster describe mycluster

访问 MySQL 集群

选项 1. 通过容器网络连接数据库

等待该集群的状态变为 Running,然后执行 kbcli cluster connect 来访问指定的数据库集群。例如:

kbcli cluster connect mycluster

选项 2. 远程连接数据库

步骤:

  1. 获取连接凭证。

    kbcli cluster connect --show-example --show-password --client=cli mycluster
  2. 执行 port-forward

    kubectl port-forward service/mycluster-mysql 3306:3306
    >
    Forwarding from 127.0.0.1:3306 -> 3306
    Forwarding from [::1]:3306 -> 3306
  3. 打开一个新的终端,连接数据库集群。

    mysql -h 127.0.0.1 -P 3306 -u root -p"******"
    >
    ...
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    mysql> show databases;
    >
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mydb |
    | mysql |
    | performance_schema |
    | sys |
    +--------------------+
    5 rows in set (0.02 sec)

观测 MySQL 集群

KubeBlocks 具备完整的可观测性能力,下面主要演示其中的监控功能。

步骤:

  1. 打开 Grafana 仪表盘。

    kbcli dashboard open kubeblocks-grafana

    结果

    命令执行后,将自动加载出 Grafana 网站的监控页面。

  1. 点击左侧栏的仪表盘图标,页面上会显示两个监控面板。 Dashboards

  2. 点击 General -> MySQL,监控 Playground 创建的 MySQL 集群的状态。 MySQL_panel

MySQL 的高可用性

下面通过简单的故障模拟,展示 MySQL 的故障恢复能力。

删除 MySQL 单机版

首先删除 MySQL 单机版。

kbcli cluster delete mycluster

创建 MySQL 集群版

使用 kbcli 创建一个 MySQL 集群版,下面使用默认配置创建:

kbcli cluster create --cluster-definition='apecloud-mysql' --set replicas=3

模拟 Leader Pod 故障恢复

下面通过删除 Leader Pod 来模拟故障。

步骤:

  1. 确保新创建的集群状态为 Running

    kbcli cluster list
  2. Topology 中找到 Leader Pod 的名称。在这个示例中,Leader Pod 的名称是 maple05-mysql-1。

    kbcli cluster describe maple05
    >
    Name: maple05 Created Time: Jan 27,2023 17:33 UTC+0800
    NAMESPACE CLUSTER-DEFINITION VERSION STATUS TERMINATION-POLICY
    default apecloud-mysql ac-mysql-8.0.30 Running WipeOut

    Endpoints:
    COMPONENT MODE INTERNAL EXTERNAL
    mysql ReadWrite 10.43.29.51:3306 <none>

    Topology:
    COMPONENT INSTANCE ROLE STATUS AZ NODE CREATED-TIME
    mysql maple05-mysql-1 leader Running <none> k3d-kubeblocks-playground-server-0/172.20.0.3 Jan 30,2023 17:33 UTC+0800
    mysql maple05-mysql-2 follower Running <none> k3d-kubeblocks-playground-server-0/172.20.0.3 Jan 30,2023 17:33 UTC+0800
    mysql maple05-mysql-0 follower Running <none> k3d-kubeblocks-playground-server-0/172.20.0.3 Jan 30,2023 17:33 UTC+0800

    Resources Allocation:
    COMPONENT DEDICATED CPU(REQUEST/LIMIT) MEMORY(REQUEST/LIMIT) STORAGE-SIZE STORAGE-CLASS
    mysql false <none> <none> <none> <none>

    Images:
    COMPONENT TYPE IMAGE
    mysql mysql docker.io/apecloud/wesql-server:8.0.30-5.alpha2.20230105.gd6b8719

    Events(last 5 warnings, see more:kbcli cluster list-events -n default mycluster):
    TIME TYPE REASON OBJECT MESSAGE
  3. 删除 Leader Pod。

    kubectl delete pod maple05-mysql-1
    >
    pod "maple05-mysql-1" deleted
  4. 连接 MySQL 集群版,只需几秒就可成功。

    kbcli cluster connect maple05
    >
    Connect to instance maple05-mysql-2: out of maple05-mysql-2(leader), maple05-mysql-1(follower), maple05-mysql-0(follower)
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 33
    Server version: 8.0.30 WeSQL Server - GPL, Release 5, Revision d6b8719

    Copyright (c) 2000, 2022, Oracle and/or its affiliates.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    mysql>

销毁 Playground

  1. 在销毁 Playground 之前,建议删除 KubeBlocks 创建的数据库集群。

    # 查看所有集群
    kbcli cluster list -A

    # 删除一个集群
    # 需要进行二次确认,或者可以添加 --auto-approve 自动确认
    kbcli cluster delete <name>

    # 卸载 KubeBlocks
    # 需要进行二次确认,或者可以添加 --auto-approve 自动确认
    kbcli kubeblocks uninstall --remove-pvcs --remove-pvs
  2. 销毁 Playground。

    kbcli playground destroy 
警告

kbcli playground destroy 会直接销毁云上的 Kubernetes 集群。但是云上可能还有一些残留资源,例如卷和快照等。请及时删除,避免不必要的费用。