在本地使用 KubeBlocks
本文档将引导你快速入门 KubeBlocks,并演示如何通过命令创建演示环境(Playground)。
准备工作
在开始之前,请确保已经满足以下条件。
-
系统最低要求:
- CPU:4 核,可使用
sysctl hw.physicalcpu
命令查看 CPU; - RAM:4 GB,使用
top -d
命令查看内存。
- CPU:4 核,可使用
-
在电脑上已安装:
初始化 Playground
步骤:
-
安装 Playground。
kbcli playground init
该命令执行以下操作:
- 在使用 K3d 的容器中创建一个 Kubernetes 集群。
- 在 K3d 集群中部署 KubeBlocks。
- 创建 MySQL 单机版集群。
备注-
如果之前执行过
kbcli playground init
但是失败了,再次执行该命令可能会导致报错。请先执行kbcli playground destroy
清理环境,再执行kbcli playground init
。 -
如果在 Windows 上执行 Playground 并报以下错误,这是因为受到了 Windows 11 的安全策略的影响。你操作的
kbcli.exe
可能经过第三方篡改(或者是你在 Windows 上通过 source build 出的 kbcli)。
error: failed to set up k3d cluster: failed to create k3d cluster kb-playground: Failed Cluster Start: Failed to start server k3d-kb-playground-server-0: Node k3d-kb-playground-server-0 failed to get ready: error waiting for log line `k3s is up and running` from node 'k3d-kb-playground-server-0': stopped returning log lines
解决方案:
- 卸载或删除当前的
kbcli.exe
文件。 - 使用
winget
下载最新的 kbcli,或者访问 KubeBlocks 的 GitHub 发布页面重新下载 kbcli。
-
反复检查 MySQL 集群,直到状态变为
Running
。kbcli cluster list
结果
在默认命名空间中创建了一个名为
mycluster
的集群,你可以在安装成功的提示语下可以看到用户指南。执行kbcli playground init -h
可以再次查看此指南。
在 Playground 中使用 KubeBlocks
现在就可以开启你的 KubeBlocks 之旅了。你可以尝试 KubeBlocks的基本功能,包括查看 MySQL 集群、访问 MySQL 集群、观测 MySQL 集群和 MySQL 的高可用性等等。
查看 MySQL 集群
步骤:
-
查看数据库集群列表。
kbcli cluster list
-
查看集群的详细信息,例如
STATUS
、Endpoints
、Topology
、Images
和Events
。kbcli cluster describe mycluster
访问 MySQL 集群
选项 1. 通过容器网络连接数据库
等待该集群的状态变为 Running
,然后执行 kbcli cluster connect
来访问指定的数据库集群。例如,
kbcli cluster connect mycluster
选项 2. 通过主机网络连接数据库
步骤:
-
获取连接凭证。
kbcli cluster connect --show-example --show-password --client=cli mycluster
-
执行
port-forward
。kubectl port-forward service/mycluster-mysql 3306:3306
>
Forwarding from 127.0.0.1:3306 -> 3306
Forwarding from [::1]:3306 -> 3306 -
打开一个新的终端,连接数据库集群。
mysql -h 127.0.0.1 -P 3306 -u root -paiImelyt
>
...
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 的高可用性
下面通过简单的故障模拟,展示 MySQL 的故障恢复能力。
删除 MySQL 单机版
首先删除 MySQL 单机版。
kbcli cluster delete mycluster
创建 MySQL 集群版
使用 kbcli
创建一个 MySQL 集群版,下面使用默认配置创建:
kbcli cluster create --cluster-definition='apecloud-mysql' --set replicas=3
模拟 Leader Pod 故障恢复
下面通过删除 Leader Pod 来模拟故障。
步骤:
-
确保新创建的集群状态为
Running
。kbcli cluster list
-
在
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 -
删除 Leader Pod。
kubectl delete pod maple05-mysql-1
>
pod "maple05-mysql-1" deleted -
连接 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>
用彩虹猫演示可用性故障
上面的例子主要使用了 kbcli cluster connect
来测试可用性,但我们不容易看到实际发生的变化。
下面用 NON-STOP NYAN CAT 来直观地进行展示。NON-STOP NYAN CAT 是一款 demo 应用程序,用来观察数据库集群异常对业务带来的影响。它提供动画和实时信息展示,可以直观表现数据库服务的可用性影响。
步骤:
-
安装 NYAN CAT demo 程序。
kbcli addon enable nyancat
预期输出
addon.extensions.kubeblocks.io/nyancat enabled
-
检查 NYAN CAT 插件的状态,当状态为
Enabled
时,表示该应用程序已准备就绪。kbcli addon list | grep nyancat
-
打开网页。
kbcli dashboard open kubeblocks-nyancat
-
在另一个终端选项卡中删除 Leader Pod,然后通过 NYAN CAT 页面查看对集群的影响。
kubectl delete pod maple05-mysql-1
-
卸载 NYAN CAT demo 程序。
kbcli addon disable nyancat
销毁 Playground
销毁 Playground 后,相关资源和数据将被清理:
- 删除所有 KubeBlocks 数据库集群;
- 卸载 KubeBlocks;
- 删除由 K3d 创建的 Kubernetes 集群。
销毁 Playground。
kbcli playground destroy