通过 K8S 部署

本文介绍了如何创建一个简单的 Kubernetes 集群,部署 PolarDB-X Operator,并使用 Operator 部署一个完整的 PolarDB-X 集群。

注:本文中的部署说明仅用于测试目的,不要直接用于生产环境。

本文主要包含以下内容:

  1. 创建 Kubernetes 测试集群
  2. 部署 PolarDB-X Operator
  3. 部署 PolarDB-X 集群
  4. 连接 PolarDB-X 集群
  5. 销毁 PolarDB-X 集群
  6. 卸载 PolarDB-X Operator

创建 Kubernetes 测试集群

本节主要介绍如何使用 minikube 创建 Kubernetes 测试集群,您也可以使用阿里云的 容器服务 ACK 来创建一个 Kubernetes 集群,并遵循教程部署 PolarDB-X Operator 和 PolarDB-X 集群。

注意:如果您使用阿里云ACK,请使用ACK托管版,勿使用ACK Serverless 版本, 且节点的操作系统建议选择 Centos 或 Alibaba Cloud Linux.

同时建议检查 docker registry mirror配置,将阿里云镜像源切换成上交的镜像源:docker.mirrors.sjtug.sjtu.edu.cn

使用 minikube 创建 Kubernetes 集群

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.ustc.edu.cn

注1:这里我们使用了阿里云的 minikube 镜像源以及 USTC 提供的 docker 镜像源来加速镜像的拉取。

注2:如果您遇到 Unable to find image 的报错,可以把命令中的 --image-mirror-country cn 去掉。

如果一切运行正常,你将会看到类似下面的输出。

😄  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 来销毁集群。

部署 PolarDB-X Operator

开始之前,请确保满足以下前置要求:

  • 已经准备了一个运行中的 Kubernetes 集群,并确保
    • 集群版本 >= 1.18.0
    • 至少有 2 个可分配的 CPU
    • 至少有 4GB 的可分配内存
    • 至少有 30GB 以上的磁盘空间
  • 已经安装了 kubectl 可以访问 Kubernetes 集群
  • 已经安装了 Helm 3。如果您的机器无法github,可以

首先创建一个叫 polardbx-operator-system 的命名空间,

kubectl create namespace polardbx-operator-system

执行以下命令安装 PolarDB-X Operator。

helm install --namespace polardbx-operator-system polardbx-operator https://github.com/polardb/polardbx-operator/releases/download/v1.6.0/polardbx-operator-1.6.0.tgz

您也可以通过 PolarDB-X 的 Helm Chart 仓库安装:

helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com
helm install --namespace polardbx-operator-system 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 企业版集群

PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 现在我们来快速部署一个 PolarDB-X 企业版集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。

首先执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):

curl -s "https://polardbx-opensource.oss-cn-hangzhou.aliyuncs.com/scripts/get-version.sh" | sh

输出内容如下所示(以 PolarDB-X V2.4.0 版本为例):

CN polardbx/polardbx-sql:v2.4.0_5.4.19
DN polardbx/polardbx-engine:v2.4.0_8.4.19
CDC polardbx/polardbx-cdc:v2.4.0_5.4.19

准备一个quick-start.yaml文件,将如下内容粘贴到文件中,并根据上述命令的结果更新 YAML 文件各个组件的image字段。

apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
  name: quick-start
spec:
  topology:
    nodes:
      gms:
        template:
          image: polardbx/polardbx-engine:v2.4.0_8.4.19 
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi
      cn:
        replicas: 1
        template:
          image: polardbx/polardbx-sql:v2.4.0_5.4.19
          resources:
            requests:
              cpu: 100m
              memory: 1Gi
            limits:
              cpu: 1
              memory: 2Gi
      dn:
        replicas: 1
        template:
          image: polardbx/polardbx-engine:v2.4.0_8.4.19
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi
      cdc:
        replicas: 1
        template:
          image: polardbx/polardbx-cdc:v2.4.0_5.4.19
          resources:
            requests:
              cpu: 100m
              memory: 500Mi
            limits:
              cpu: 1
              memory: 1Gi

执行如下命令创建集群:

kubectl apply -f quick-start.yaml

你将看到以下输出:

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 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。 现在我们来快速部署一个 PolarDB-X 标准版集群,它仅包含 1 个由三副本组成的DN节点。

首先执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):

curl -s "https://polardbx-opensource.oss-cn-hangzhou.aliyuncs.com/scripts/get-version.sh" | sh

输出内容如下所示(以 PolarDB-X V2.4.0 版本为例):

CN polardbx/polardbx-sql:v2.4.0_5.4.19
DN polardbx/polardbx-engine:v2.4.0_8.4.19
CDC polardbx/polardbx-cdc:v2.4.0_5.4.19

准备一个quick-start.yaml文件,将如下内容粘贴到文件中,并根据上述命令的结果更新 YAML 文件各个组件的image字段。

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:v2.4.0_8.4.19
          resources:
            limits:
              cpu: 2
              memory: 4Gi
    - name: log
      replicas: 1
      role: Voter
      template:
        spec:
          image: polardbx/polardbx-engine:v2.4.0_8.4.19
          resources:
            limits:
              cpu: 1
              memory: 2Gi

执行如下命令创建集群:

kubectl apply -f quick-start.yaml

你将看到以下输出:

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 集群

PolarDB-X 支持 MySQL 传输协议及绝大多数语法,因此你可以使用 mysql 命令行工具连接 PolarDB-X 进行数据库操作。

在开始之前,请确保已经安装 mysql 命令行工具。

转发 PolarDB-X 的访问端口

创建 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

连接 PolarDB-X 集群

Operator 将为 PolarDB-X 集群默认创建一个账号,并将密码存放在 secret 中。

使用以下命令查看默认的账号与密码

eval pxc=quick-start;eval user=$(kubectl get secret $pxc -o jsonpath={.data} | jq 'keys[0]'); echo "User: $user"; kubectl get secret $pxc -o jsonpath="{.data['$user']}" | base64 -d - | xargs echo "Password:"

User: polardbx_root
Password: rhjnc8p4

保持 port-forward 的运行,重新打开一个终端,执行如下命令连接集群:

$ mysql -h127.0.0.1 -P3306 -upolardbx_root -prhjnc8p4

期望输出:

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 集群。

$ kubectl delete polardbxcluster quick-start

再次查看以确保删除完成

$ kubectl get polardbxcluster quick-start

卸载 PolarDB-X Operator

使用如下命令卸载 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

results matching ""

    No results matching ""