本文介绍了如何创建一个简单的 Kubernetes 集群,部署 PolarDB-X Operator,并使用 operator 部署一个完整的 PolarDB-X 集群。
注:本文中的部署说明仅用于测试目的,不要直接用于生产环境。
本文主要包含以下内容:
- 创建 Kubernetes 测试集群
- 部署 PolarDB-X Operator
- 部署 PolarDB-X 集群
- 连接 PolarDB-X 集群
- 销毁 PolarDB-X 集群
- 卸载 PolarDB-X Operator
本节主要介绍如何使用 minikube 创建 Kubernetes 测试集群,您也可以使用阿里云的 容器服务 ACK 来创建一个 Kubernetes 集群,并遵循教程部署 PolarDB-X Operator 和 PolarDB-X 集群。
minikube 是由社区维护的用于快速创建 Kubernetes 测试集群的工具,适合测试和学习 Kubernetes。使用 minikube 创建的 Kubernetes 集群可以运行在容器或是虚拟机中,本节中以 CentOS 8.2 上创建 Kubernetes 为例。
注:如在其他操作系统例如 macOS 或 Windows 上部署 minikube,部分步骤可能略有不同。
部署前,请确保已经安装 minikube 和 Docker,并符合以下要求:
- 机器规格不小于 4c8g
- minikube >= 1.18.0
- docker >= 1.19.3
minikube 要求使用非 root 账号进行部署,如果你试用 root 账号访问机器,需要新建一个账号。
$ useradd -ms /bin/bash polardbx
$ usermod -aG docker polardbx
如果你使用其他账号,请和上面一样将它加入 docker 组中,以确保它能够直接访问 docker。
使用 su 切换到账号 polardbx
,
$ su polardbx
执行下面的命令启动一个 minikube,
minikube start --cpus 4 --memory 7960 --image-mirror-country cn --registry-mirror=https://docker.mirrors.sjtug.sjtu.edu.cn
注:这里我们使用了阿里云的 minikube 镜像源以及 SJTU 提供的 docker 镜像源来加速镜像的拉取。
如果一切运行正常,你将会看到类似下面的输出。
😄 minikube v1.23.2 on Centos 8.2.2004 (amd64)
✨ Using the docker driver based on existing profile
❗ Your cgroup does not allow setting memory.
▪ More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities
❗ Your cgroup does not allow setting memory.
▪ More information: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🤷 docker "minikube" container is missing, will recreate.
🔥 Creating docker container (CPUs=4, Memory=7960MB) ...
> kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
> kubeadm: 43.71 MiB / 43.71 MiB [---------------] 100.00% 1.01 MiB p/s 44s
> kubectl: 44.73 MiB / 44.73 MiB [-------------] 100.00% 910.41 KiB p/s 51s
> kubelet: 146.25 MiB / 146.25 MiB [-------------] 100.00% 2.71 MiB p/s 54s
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5 (global image repository)
🌟 Enabled addons: storage-provisioner, default-storageclass
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
此时 minikube 已经正常运行。minikube 将自动设置 kubectl 的配置文件,如果之前已经安装过 kubectl,现在可以使用 kubectl 来访问集群:
$ kubectl cluster-info
kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
如果没有安装 kubectl 的,minikube 也提供了子命令来使用 kubectl:
$ minikube kubectl -- cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
注意:minikube kubectl 子命令需要在 kubectl 的参数前加 "--",如使用 bash shell 可以用 alias kubectl="minikube kubectl -- " 来设置快捷指令。下文都将使用 kubectl 命令进行操作。
现在我们可以开始部署 PolarDB-X Operator 了!
测试完成后,执行 minikube delete 来销毁集群。
开始之前,请确保满足以下前置要求:
- 已经准备了一个运行中的 Kubernetes 集群,并确保
- 集群版本 >= 1.18.0
- 至少有 2 个可分配的 CPU
- 至少有 4GB 的可分配内存
- 至少有 30GB 以上的磁盘空间
- 已经安装了 kubectl 可以访问 Kubernetes 集群
- 已经安装了 Helm 3
执行以下命令安装 PolarDB-X Operator。
$ helm install --namespace polardbx-operator-system --create-namespace polardbx-operator https://github.com/polardb/polardbx-operator/releases/download/v1.5.0/polardbx-operator-1.5.0.tgz
您也可以通过 PolarDB-X 的 Helm Chart 仓库安装:
helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com
helm install --namespace polardbx-operator-system --create-namespace polardbx-operator polardbx/polardbx-operator
期望看到如下输出:
NAME: polardbx-operator
LAST DEPLOYED: Sun Oct 17 15:17:29 2021
NAMESPACE: polardbx-operator-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
polardbx-operator is installed. Please check the status of components:
kubectl get pods --namespace polardbx-operator-system
Now have fun with your first PolarDB-X cluster.
Here's the manifest for quick start:
```yaml
apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: quick-start
annotations:
polardbx/topology-mode-guide: quick-start
```.
查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态:
$ kubectl get pods --namespace polardbx-operator-system
NAME READY STATUS RESTARTS AGE
polardbx-controller-manager-6c858fc5b9-zrhx9 1/1 Running 0 66s
polardbx-hpfs-d44zd 1/1 Running 0 66s
polardbx-tools-updater-459lc 1/1 Running 0 66s
恭喜!PolarDB-X Operator 已经安装完成,现在可以开始部署 PolarDB-X 集群了!
PolarDB-X目前包含企业版和标准版两个系列,您可以根据实际的需求创建对应的集群。
PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 现在我们来快速部署一个 PolarDB-X 企业版集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。执行以下命令创建一个这样的集群:
echo "apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: quick-start
annotations:
polardbx/topology-mode-guide: quick-start" | kubectl apply -f -
你将看到以下输出:
polardbxcluster.polardbx.aliyun.com/quick-start created
使用如下命令查看创建状态:
$ kubectl get polardbxcluster -w
NAME GMS CN DN CDC PHASE DISK AGE
quick-start 0/1 0/1 0/1 0/1 Creating 35s
quick-start 1/1 0/1 1/1 0/1 Creating 93s
quick-start 1/1 0/1 1/1 1/1 Creating 4m43s
quick-start 1/1 1/1 1/1 1/1 Running 2.4 GiB 4m44s
当 PHASE 显示为 Running 时,PolarDB-X 集群已经部署完成!恭喜你,现在可以开始连接并体验 PolarDB-X 分布式数据库了!
PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。 现在我们来快速部署一个 PolarDB-X 标准版集群,它仅包含 1 个由三副本组成的DN节点。执行以下命令创建一个这样的集群:
echo "apiVersion: polardbx.aliyun.com/v1
kind: XStore
metadata:
name: quick-start
spec:
config:
controller:
RPCProtocolVersion: 1
topology:
nodeSets:
- name: cand
replicas: 2
role: Candidate
template:
spec:
image: polardbx/polardbx-engine-2.0:latest
resources:
limits:
cpu: "2"
memory: 4Gi
- name: log
replicas: 1
role: Voter
template:
spec:
image: polardbx/polardbx-engine-2.0:latest
resources:
limits:
cpu: "1"
memory: 2Gi" | kubectl apply -f -
你将看到以下输出:
xstore.polardbx.aliyun.com/quick-start created
使用如下命令查看创建状态:
$ kubectl get xstore -w
NAME LEADER READY PHASE DISK VERSION AGE
quick-start quick-start-4dbh-cand-0 3/3 Running 3.6 GiB 8.0.18 11m
当 PHASE 显示为 Running 时,PolarDB-X 标准版集群已经部署完成!恭喜你,现在可以开始连接并体验 PolarDB-X 数据库了!
PolarDB-X 支持 MySQL 传输协议及绝大多数语法,因此你可以使用 mysql 命令行工具连接 PolarDB-X 进行数据库操作。
在开始之前,请确保已经安装 mysql 命令行工具。
创建 PolarDB-X 集群时,PolarDB-X Operator 同时会为集群创建用于访问的服务,默认是 ClusterIP 类型。使用下面的命令查看用于访问的服务:
$ kubectl get svc quick-start
期望输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
quick-start ClusterIP 10.110.214.223 <none> 3306/TCP,8081/TCP 5m25s
我们使用 kubectl 提供的 port-forward 命名将服务的 3306 端口转发到本地,并且保持转发进程存活。
$ kubectl port-forward svc/quick-start 3306
Operator 将为 PolarDB-X 企业版集群默认创建一个账号 polardbx_root,并将密码存放在 secret 中。
使用以下命令查看 polardbx_root 账号的密码:
$ kubectl get secret quick-start -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
Password: bvp9wjxx
保持 port-forward 的运行,重新打开一个终端,执行如下命令连接集群:
$ mysql -h127.0.0.1 -P3306 -upolardbx_root -pbvp9wjxx
期望输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.29 Tddl Server (ALIBABA)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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>
恭喜!你已经成功地部署并连接到了一个 PolarDB-X 企业版数据库集群,现在你可以开始体验分布式数据库的能力了!
Operator 将为 PolarDB-X 标准版集群默认创建一个账号 admin,并将密码存放在 secret 中。
使用以下命令查看 admin 账号的密码:
$ kubectl get secret quick-start -o jsonpath="{.data['admin']}" | base64 -d - | xargs echo "Password: "
Password: bvp9wjxx
保持 port-forward 的运行,重新打开一个终端,执行如下命令连接集群:
$ mysql -h127.0.0.1 -P3306 -uadmin -pbvp9wjxx
即可连接到 PolarDB-X 标准版。
完成测试后,你可以通过以下命令销毁 PolarDB-X 集群。
$ kubectl delete polardbxcluster quick-start
再次查看以确保删除完成
$ kubectl get polardbxcluster quick-start
使用如下命令卸载 PolarDB-X Operator。
$ helm uninstall --namespace polardbx-operator-system polardbx-operator
Helm 卸载并不会删除对应的定制资源 CRD,使用下面的命令查看并删除 PolarDB-X 对应的定制资源:
$ kubectl get crds | grep polardbx.aliyun.com
polardbxclusters.polardbx.aliyun.com 2021-10-17T07:17:27Z
xstores.polardbx.aliyun.com 2021-10-17T07:17:27Z
$ kubectl delete crds polardbxclusters.polardbx.aliyun.com xstores.polardbx.aliyun.com