一、部署前的环境准备
Kubernetes 集群: 版本要求:K8s 1.18 及以上(推荐 1.20+,兼容性更好)。 集群需支持 StatefulSet
、Deployment
等资源,且节点有足够的 CPU、内存资源(建议单节点至少 2C 4G)。kubectl 工具:已安装并配置好与目标 K8s 集群的连接(通过 kubectl config get-contexts
确认当前集群配置)。容器运行时:支持 Docker、containerd 等主流容器运行时。 网络: 集群内部网络互通,节点可访问外部镜像仓库(如 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集群的基础。
创建 CRD(自定义资源定义) :扩展K8s API
注册 PolarDBXCluster
等自定义资源类型,使 Kubernetes 能够理解和管理 PolarDB-X 集群。
查看创建的crd:
kubectl get crds|grep polardbx

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

点个“赞 or 在看” 你最好看!

👇👇👇 谢谢各位老板啦!!!




