在云上使用 KubeBlocks
本文档将引导你快速上手 KubeBlocks,并演示如何通过命令创建演示环境(Playground)。
准备工作
在云上部署需要使用 Terraform 脚本来初始化云资源。kbcli
会自动下载并保存该脚本,然后使用 Terraform 命令来创建一个完全托管的 Kubernetes 集群,并在该集群上部署 KubeBlocks。
- AWS
- GCP
- 腾讯云
- 阿里云
开始之前
请确保已经:
配置访问密钥
选项 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 分钟。如果长时间未安装成功,建议检查网络环境。
开始之前
请确保已经:
- 拥有 Google Cloud 账户。
- 安装 kubectl。
- 安装 kbcli。
配置 GCP 环境
步骤:
-
安装 Google Cloud SDK。
# macOS 安装 brew
brew install --cask google-cloud-sdk
# windows
choco install gcloudsdk -
初始化 GCP。
gcloud init
-
登录 GCP。
gcloud auth application-default login
-
配置 GOOGLE_PROJECT 环境变量,
kbcli playground
会在该项目中创建 GKE 集群。export GOOGLE_PROJECT=<project-name>
初始化 Playground
执行以下命令,在 GCP 的 us-central1
地区部署一个 GKE 服务,并安装 KubeBlocks。
kbcli playground init --cloud-provider gcp --region us-central1
cloud-provider
用于指定云服务商。region
用于指定部署 Kubernetes 集群的地区。
在初始化过程中,kbcli
会将 GitHub 仓库克隆到目录 ~/.kbcli/playground
,安装 KubeBlocks,并创建一个 MySQL 集群。执行 kbcli playground init 命令后,kbcli 会自动将 kubeconfig 的 context 切换到新的 Kubernetes 集群。
执行以下命令以查看创建的集群。
# 查看 kbcli 版本
kbcli version
# 查看集群列表
kbcli cluster list
整个初始化过程大约需要 20 分钟。如果长时间未安装成功,建议检查网络环境。
开始之前
请确保已经:
- 拥有腾讯云账户。
- 安装 kubectl。
- 安装 kbcli。
配置 TKE 环境
步骤:
-
登录腾讯云。
-
前往容器服务控制台授权资源操作权限。
-
前往访问管理控制台-> 访问密钥 -> API 密钥管理。点击创建密钥来生成一对 Secret ID 和 Secret Key。
-
将 Secret ID 和 Secret Key 添加到环境变量中。
export TENCENTCLOUD_SECRET_ID=YOUR_SECRET_ID
export TENCENTCLOUD_SECRET_KEY=YOUR_SECRET_KEY
初始化 Playground
在腾讯云的 ap-chengdu
可用区部署一个 Kubernetes 服务,并安装 KubeBlocks。
kbcli playground init --cloud-provider tencentcloud --region ap-chengdu
cloud-provider
用于指定云服务商。region
用于指定部署 Kubernetes 集群的地区。
在初始化过程中,kbcli
会将 GitHub 仓库克隆到目录~/.kbcli/playground
,安装 KubeBlocks,并创建一个 MySQL 集群。执行 kbcli playground init
命令后,kbcli 会自动将 kubeconfig 的 context 切换到新的 Kubernetes 集群。
执行以下命令以查看创建的集群。
# 查看 kbcli 版本
kbcli version
# 查看集群列表
kbcli cluster list
整个初始化过程大约需要 20 分钟。如果长时间未安装成功,建议检查网络环境。
开始之前
请确保已经:
- 拥有阿里云账户。
- 安装 kubectl。
- 安装 kbcli。
配置 ACK 环境
步骤:
-
登录阿里云。
-
按照首次使用容器服务 Kubernetes 版,检查是否已激活 ACK 并分配角色。
备注在中国大陆地区部署阿里云的用户,请参考相应指南。
-
点击 AliyunOOSLifecycleHook4CSRole,点击同意授权以创建一个 AliyunOOSLifecycleHook4CSRole 角色。
创建 ACK 集群时,需要创建和管理节点池,因此需要创建 AliyunOOSLifecycleHook4CSRole 角色,为 OOS 运维编排服务授权以访问其他云产品中的资源(详情请参考官方文档)。
-
创建 AccessKey ID 和对应的 AccessKey 密钥。
-
进入阿里云管理控制台。将鼠标悬停在账户中心处,点击 AccessKey 管理。
-
点击创建 AccessKey,创建 AccessKey ID 和对应的 AccessKey 密钥。
-
将 AccessKey ID 和 AccessKey 密钥添加到环境变量中,以配置身份授权信息。
export ALICLOUD_ACCESS_KEY="YOUR_ACCESS_KEY"
export ALICLOUD_SECRET_KEY="YOUR_SECRET_KEY"
备注详情请参考创建 AccessKey。
-
初始化 Playground
执行以下命令,在阿里云的 cn-hangzhou 地区部署一个 ACK 集群,并安装 KubeBlocks。
kbcli playground init --cloud-provider alicloud --region cn-hangzhou
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 集群
步骤:
-
查看数据库集群列表。
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 -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 的高可用性
下面通过简单的故障模拟,展示 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>
销毁 Playground
-
在销毁 Playground 之前,建议删除 KubeBlocks 创建的数据库集群。
# 查看所有集群
kbcli cluster list -A
# 删除一个集群
# 需要进行二次确认,或者可以添加 --auto-approve 自动确认
kbcli cluster delete <name>
# 卸载 KubeBlocks
# 需要进行二次确认,或者可以添加 --auto-approve 自动确认
kbcli kubeblocks uninstall --remove-pvcs --remove-pvs -
销毁 Playground。
kbcli playground destroy
kbcli playground destroy
会直接销毁云上的 Kubernetes 集群。但是云上可能还有一些残留资源,例如卷和快照等。请及时删除,避免不必要的费用。