在 Kubernetes 上部署存算分离集群
在 Kubernetes 上部署存算分离集群分为4步:
- 部署前准备。
- 部署 Doris Operator。
- 部署存算分离集群。
- 创建存储后端。
第1步:部署前准备
在 Kubernetes 上部署存算分离集群需要提前部署好 FoundationDB。如果使用虚机部署,需要确保虚机能够被 Kubernetes 集群上的服务访问。FoundationDB 在虚机上部署请参考存算分离部署文档中部署前准备阶段的介绍。在 Kubernetes 上部署请参考 FoundationDB 在 Kubernetes 上部署。
第2步:部署 Operator
- 下发资源定义:
kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/crds.yaml
- 部署 Doris-Operator 以及依赖的 RBAC 规则:
kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/disaggregated-operator.yaml
预期结果:
kubectl -n doris get pods
NAME READY STATUS RESTARTS AGE
doris-operator-6b97df65c4-xwvw8 1/1 Running 0 19s
第3步:部署存算分离集群
- 下载存算分离集群的部署样例:
curl -O https://raw.githubusercontent.com/apache/doris-operator/master/doc/examples/disaggregated/cluster/ddc-sample.yaml
- 配置 FoundationDB 访问信息:
Doris 存算分离版本使用 FDB 存储元数据,在
DorisDisaggregatedCluster
的spec.metaService.fdb
中提供两种方式配置 FDB 的可访问信息:直接配置访问地址,配置包含访问地址的 ConfigMap。
- 配置访问地址
若 FoundationDB 部署在 Kubernetes 外部,可直接配置 FoundationDB 的访问地址:其中, ${fdbAddress} 为 FoundationDB 使用客户端的访问地址。Linux 虚机默认部署的情况下存储在spec:
metaService:
fdb:
address: ${fdbAddress}/etc/foundationdb/fdb.cluster
,可参考 FoundationDB 对于 cluster file 的介绍了解详细信息。 - 配置包含访问信息的 ConfigMap
使用 fdb-kubernetes-operator 部署 FoundationDB,fdb-kubernetes-operator
会在部署的命名空间下生成一个特定的,包含 FoundationDB 访问信息的 ConfigMap。 生成的 ConfigMap 名称为部署 FoundationDB 的资源名称加上 "-config"。如何获取ConfigMap
,请参考文档 FoundationDB 在 Kubernetes 上部署中的访问信息获取章节。获取ConfigMap
的命名空间和名称后,请按照如下格式配置DorisDisaggregatedCluster
资源:其中,${foundationdbConfigMapName} 为spec:
metaService:
fdb:
configMapNamespaceName:
name: {foundationdbConfigMapName}
namespace: {namespace}fdb-kubernetes-operator
生成的ConfigMap
名称。${namespace} 为ConfigMap
所在的命名空间。
kubectl apply -f ddc-sample.yaml
部署资源下发后,等待集群自动搭建完成,预期结果如下:
kubectl get ddc
NAME CLUSTERHEALTH FEPHASE CGCOUNT CGAVAILABLECOUNT CGFULLAVAILABLECOUNT
test-disaggregated-cluster green Ready 2 2 2
第4步:创建远程存储后端
存算分离集群搭建完毕后,需要通过客户端执行相应的 CREATE STORAGE VAULT
SQL 语句创建存储后端来实现数据的持久化。
可以进入 FE 容器内部使用 MySQL Client 连接 Doris 进行创建操作。
- 获取 Service。
在部署集群后,通过以下命令可以查看 Doris Operator 暴露的 service:
kubectl get svc
返回结果如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-disaggregated-cluster-fe ClusterIP 10.96.147.97 <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 15m
test-disaggregated-cluster-fe-internal ClusterIP None <none> 9030/TCP 15m
test-disaggregated-cluster-ms ClusterIP 10.96.169.8 <none> 5000/TCP 15m
test-disaggregated-cluster-cg1 ClusterIP 10.96.47.90 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m
test-disaggregated-cluster-cg2 ClusterIP 10.96.50.199 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 14m
- MySQL 客户端访问。
使用以下命令,可以在当前的 Kubernetes 集群中创建一个包含 mysql client 的 pod:
kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never -- /bin/bash
在集群内的容器中,可以使用 fe 服务名访问 Doris 集群:
mysql -uroot -P9030 -h test-disaggregated-cluster-fe
- 创建存储后端。
使用提供 S3 协议对象存储作为存储后端,创建示例如下:
a. 创建 S3 Storage Vault
CREATE STORAGE VAULT IF NOT EXISTS s3_vault
PROPERTIES (
"type"="S3",
"s3.endpoint" = "oss-cn-beijing.aliyuncs.com",
"s3.region" = "bj",
"s3.bucket" = "bucket",
"s3.root.path" = "big/data/prefix",
"s3.access_key" = "ak",
"s3.secret_key" = "sk",
"provider" = "OSS"
);
b. 设置默认数据后端
SET s3_vault AS DEFAULT STORAGE VAULT;
提示
在本文展示的创建命令中,配置信息都是虚构信息不能用于真实场景,请参照管理 Storage Vault 章节创建可用存储后端。