polardbxoperatordocs/deployment/0-quickstart.md

302 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 快速上手
本文介绍了如何创建一个简单的 Kubernetes 集群,部署 PolarDB-X Operator并使用 operator 部署一个完整的 PolarDB-X 集群。
> 注:本文中的部署说明仅用于测试目的,不要直接用于生产环境。
本文主要包含以下内容:
1. [创建 Kubernetes 测试集群](#创建-kubernetes-测试集群)
2. [部署 PolarDB-X Operator](#部署-polardb-x-operator)
3. [部署 PolarDB-X 集群](#部署-polardb-x-集群)
4. [连接 PolarDB-X 集群](#连接-polardb-x-集群)
5. [销毁 PolarDB-X 集群](#销毁-polardb-x-集群)
6. [卸载 PolarDB-X Operator](#卸载-polardb-x-operator)
# 创建 Kubernetes 测试集群
本节主要介绍如何使用 [minikube](https://minikube.sigs.k8s.io/docs/start/) 创建 Kubernetes 测试集群,您也可以使用阿里云的 [容器服务 ACK](https://www.aliyun.com/product/kubernetes) 来创建一个 Kubernetes 集群,并遵循教程部署 PolarDB-X Operator 和 PolarDB-X 集群。
## 使用 minikube 创建 Kubernetes 集群
[minikube](https://minikube.sigs.k8s.io/docs/start/) 是由社区维护的用于快速创建 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 账号访问机器,需要新建一个账号。
```bash
$ useradd -ms /bin/bash polardbx
$ usermod -aG docker polardbx
```
如果你使用其他账号,请和上面一样将它加入 docker 组中,以确保它能够直接访问 docker。
使用 su 切换到账号 `polardbx`
```bash
$ su polardbx
```
执行下面的命令启动一个 minikube
```bash
minikube start --cpus 4 --memory 7960 --image-mirror-country cn --registry-mirror=https://docker.mirrors.sjtug.sjtu.edu.cn
```
> 注:这里我们使用了阿里云的 minikube 镜像源以及 SJTU 提供的 docker 镜像源来加速镜像的拉取。
如果一切运行正常,你将会看到类似下面的输出。
```bash
😄 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 来访问集群:
```bash
$ 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
```bash
$ 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 来销毁集群。
# 部署 PolarDB-X Operator
开始之前,请确保满足以下前置要求:
+ 已经准备了一个运行中的 Kubernetes 集群,并确保
+ 集群版本 >= 1.18.0
+ 至少有 2 个可分配的 CPU
+ 至少有 4GB 的可分配内存
+ 至少有 30GB 以上的磁盘空间
+ 已经安装了 kubectl 可以访问 Kubernetes 集群
+ 已经安装了 [Helm 3](https://helm.sh/docs/intro/install/)
执行以下命令安装 PolarDB-X Operator。
```bash
$ helm install --namespace polardbx-operator-system --create-namespace polardbx-operator https://github.com/polardb/polardbx-operator/releases/download/v1.2.1/polardbx-operator-1.2.1.tgz
```
您也可以通过 PolarDB-X 的 Helm Chart 仓库安装:
```bash
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
```
期望看到如下输出:
```bash
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 状态:
```bash
$ 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 集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。执行以下命令创建一个这样的集群:
```bash
echo "apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: quick-start
annotations:
polardbx/topology-mode-guide: quick-start" | kubectl apply -f -
```
你将看到以下输出:
```bash
polardbxcluster.polardbx.aliyun.com/quick-start created
```
使用如下命令查看创建状态:
```bash
$ 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 支持 MySQL 传输协议及绝大多数语法,因此你可以使用 mysql 命令行工具连接 PolarDB-X 进行数据库操作。
在开始之前,请确保已经安装 mysql 命令行工具。
## 转发 PolarDB-X 的访问端口
创建 PolarDB-X 集群时PolarDB-X Operator 同时会为集群创建用于访问的服务,默认是 ClusterIP 类型。使用下面的命令查看用于访问的服务:
```bash
$ kubectl get svc quick-start
```
期望输出:
```bash
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 端口转发到本地,并且保持转发进程存活。
```bash
$ kubectl port-forward svc/quick-start 3306
```
## 连接 PolarDB-X 集群
Operator 将为 PolarDB-X 集群默认创建一个账号 polardbx_root并将密码存放在 secret 中。
使用以下命令查看 polardbx_root 账号的密码:
```bash
$ kubectl get secret quick-start -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
Password: bvp9wjxx
```
保持 port-forward 的运行,重新打开一个终端,执行如下命令连接集群:
```bash
$ mysql -h127.0.0.1 -P3306 -upolardbx_root -pbvp9wjxx
```
期望输出:
```bash
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 分布式数据库集群,现在你可以开始体验分布式数据库的能力了!
# 销毁 PolarDB-X 集群
完成测试后,你可以通过以下命令销毁 PolarDB-X 集群。
```bash
$ kubectl delete polardbxcluster quick-start
```
再次查看以确保删除完成
```bash
$ kubectl get polardbxcluster quick-start
```
# 卸载 PolarDB-X Operator
使用如下命令卸载 PolarDB-X Operator。
```bash
$ helm uninstall --namespace polardbx-operator-system polardbx-operator
```
Helm 卸载并不会删除对应的定制资源 CRD使用下面的命令查看并删除 PolarDB-X 对应的定制资源:
```bash
$ 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
```