暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过k8s快速部署一个PolarDB-X分布式集群

209


一、部署前的环境准备

  1. Kubernetes 集群
    • 版本要求:K8s 1.18 及以上(推荐 1.20+,兼容性更好)。
    • 集群需支持 StatefulSet
      Deployment
       等资源,且节点有足够的 CPU、内存资源(建议单节点至少 2C 4G)。
  2. kubectl 工具:已安装并配置好与目标 K8s 集群的连接(通过 kubectl config get-contexts
     确认当前集群配置)。
  3. 容器运行时:支持 Docker、containerd 等主流容器运行时。
  4. 网络
    • 集群内部网络互通,节点可访问外部镜像仓库(如 Docker Hub、阿里云容器镜像服务等)。

二、部署PolarDBX-X Operator

在 Kubernetes 生态中,Operator 是一种以容器化方式运行的控制器(Controller),它利用 ** 自定义资源(Custom Resource Definition, CRD)** 扩展 Kubernetes API,将特定应用的运维知识(如部署流程、配置管理、故障恢复、升级策略等)编码到软件中,实现对复杂应用的自动化管理。

PolarDB-X Operator 是专为管理 PolarDB-X 分布式数据库设计的 Operator,它能:

  • 根据用户定义创建 CN(计算节点)、DN(存储节点)、GMS(全局元数据服务)等组件。
  • 监控组件健康状态,自动处理故障节点的替换和恢复。
  • 执行滚动升级,确保升级过程中服务不中断。
  • 管理存储卷,确保数据持久化和高可用

我们使用 Helm charts 安装PolarDB-X Operator

# 首先创建命名空间
kubectl create namespace polardbx-operator-system

# 添加Helm仓库,将Polardb-X官方的Helm仓库添加到本地配置中,便于后续直接从仓库中获取Charts
helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com

# 从刚添加的仓库中下载polardbx-operator Chart并部署到集群中。
helm install --namespace polardbx-operator-system polardbx-operator polardbx/polardbx-operator


  • 参数解析
    • --namespace polardbx-operator-system
      :将 Operator 部署到名为 polardbx-operator-system
       的命名空间(需提前创建或使用 --create-namespace
      )。
    • polardbx-operator
      :本次安装的 Release 名称(实例名),用于后续管理(如升级、卸载)。
    • polardbx/polardbx-operator
      :Chart 的位置,格式为 仓库名/Chart名

三、部署后的验证

以下是PolarDB-X Operator安装后的核心动作,它们共同构成了Operator管理PolarDB-X集群的基础。

  1. 创建 CRD(自定义资源定义) :扩展K8s API

注册 PolarDBXCluster
 等自定义资源类型,使 Kubernetes 能够理解和管理 PolarDB-X 集群。

查看创建的crd:

  kubectl get crds|grep polardbx

Kubernetes 原生仅支持 Pod、Service 等基础资源,而 PolarDBXCluster
 这类描述分布式数据库集群的 “自定义资源”,需要通过 CRD 告知 Kubernetes 其结构和规则。

  1. 部署 Operator 控制器
    Operator 控制器作为核心组件被部署为 Deployment,负责监听和处理自定义资源的变化。控制器 Pod(通常命名为 polardbx-controller-manager-*
    ):
    持续监听 PolarDBXCluster
     等资源的变化,并根据用户定义的期望状态自动调整集群。
# 查看控制器 Pod 
kubectl get pods -n polardbx-operator-system -l app.kubernetes.io/component=controller-manager

3. 系统组件初始化

除控制器外,Operator 还会部署一系列系统组件,这些组件通常通过 DaemonSet 或 StatefulSet 部署:

  • 分布式存储服务(如 polardbx-hpfs-*
    ):
    基于 HPFS (High Performance File System) 提供数据持久化能力,通常每个节点运行一个实例(通过 DaemonSet)。
  • 工具链和监控组件(如 `polardbx-tools-updater-*):
    负责集群维护、版本更新和监控数据采集。
# 查看DeamonSet
kubectl get daemonsets -n polardbx-operator-system

查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态, 就说明Operator部署好了:

kubectl get pods -n polardbx-operator-system

四、部署PolarDB-X分布式集群

1.获取PolarDB-X各个组件的最新镜像版本 首先执行如下命令获取PolarDB-X各个组件的最新镜像版本

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


CN polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-sql:v2.4.1_5.4.19
DN polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-engine:v2.4.1_8.4.19
CDC polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-cdc:v2.4.1_5.4.19
COLUMNAR polardbx-opensource-registry.cn-beijing.cr.aliyuncs.com/polardbx/polardbx-columnar:v2.4.1_5.4.19

2.准备一个quick-start.yaml文件,将如下内容粘贴到文件中,并根据上述命令的结果更新Yaml文件各个的image字段。这个PolarDB-X分布式集群,它包含1个GMS 节点、1个CN 节点、1个DN节点和1个CDC节点。

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

3.执行如下命令创建集群

kubectl apply -f quick-start.yaml

# 使用如下命令查看创建状态

kubectl get polardbxcluter -w

@test-k8s-master01:~# kubectl get polardbxcluster -w
NAME          GMS   CN    DN    CDC   COLUMNAR   PHASE      DISK   AGE
quick-start   0/1   0/1   0/1   0/1    -         Creating          2m33s
quick-start   1/1   1/1   1/1   1/1    -         Running   7.4 GiB   9m35s

当 PHASE 显示为 Running 时,就说明PolarDB-X 集群已经部署完成!

五、转发PolarDB-X的访问端口

创建 PolarDB-X 集群时,PolarDB-X Operator 同时会为集群创建用于访问的服务,默认是 ClusterIP 类型。使用下面的命令查看用于访问的服务:

kubectl get svc quick-start

root@test-k8s-master01:~# kubectl get svc quick-start
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
quick-start   ClusterIP   192.168.10.41   <none>        3306/TCP,8081/TCP   12m

我们使用 kubectl 提供的 port-forward 命名将服务的 3306 端口转发到本地,并且保持转发进程存活。

kubectl port-forward svc/quick-start 3306

root@test-k8s-master01:~# kubectl port-forward svc/quick-start 3306
Forwarding from 127.0.0.1:3306 -> 3306
Forwarding from [::1]:3306 -> 3306

六、连接PolarDB-X集群

Operator将为PolarDB-X集群默认创建一个账号,并将密码放在secret中。 使用如下命令查看默认的账号与密码:

root@test-k8s-master01:~# 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: 5j2npnbz

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

mysql -h127.0.0.1 -upolardbx_root -p5j2npnbz

root@test-k8s-master01:~# mysql -h127.0.0.1 -upolardbx_root -p5j2npnbz
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 184
Server version: 8.0.3 Tddl Server (ALIBABA)

Copyright (c) 2000, 2025, 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'forhelp. Type '\c' to clear the current input statement.

#查看DN
mysql> show storage;
+-----------------------+-------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| STORAGE_INST_ID       | LEADER_NODE       | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
+-----------------------+-------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
| quick-start-ndb6-dn-0 | 10.10.147.36:3306 | true       | MASTER    | 1        | 2           | 0      | false     | null  | null   |
| quick-start-ndb6-gms  | 10.10.146.35:3306 | true       | META_DB   | 2        | 2           | 0      | false     | null  | null   |
+-----------------------+-------------------+------------+-----------+----------+-------------+--------+-----------+-------+--------+
2 rows inset (0.04 sec)

# 查看cn
mysql> show mpp;
+-------------+--------------------+------+--------+
| ID          | NODE               | ROLE | LEADER |
+-------------+--------------------+------+--------+
| quick-start | 10.10.150.126:3306 | W    | Y      |
+-------------+--------------------+------+--------+



参考文档:
https://doc.polardbx.com/quickstart/topics/quickstart-k8s.html

 or  


👇👇👇 

文章转载自PostgreSQL运维技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论