跳转至

1.2.3.2.2 部署 Doris Operator

1 添加 Doris Cluster 资源定义

Doris Operator 使用自定义资源定义( Custom Resource DefinitionCRD )扩展 KubernetesDoris ClusterCRD 中封装了对 Doris 对象的描述,例如对 FEBE 的描述,详细内容可以参考 doris-operator-api 。在部署 Doris 前,需要先创建 Doris ClusterCRD

通过以下命令可以在 Kubernetes 环境中部署 Doris Cluster CRD

Bash
1
kubectl create -f https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/doris.selectdb.com_dorisclusters.yaml

如果没有外网,先将 CRD 文件下载到本地:

Bash
1
2
wget https://raw.githubusercontent.com/apache/doris-operator/master/config/crd/bases/doris.selectdb.com_dorisclusters.yaml
kubectl create -f ./doris.selectdb.com_dorisclusters.yaml

以下是期望输出结果:

Bash
1
customresourcedefinition.apiextensions.k8s.io/dorisclusters.doris.selectdb.com created

在创建了 Doris Cluster CRD 后,可以通过以下命令查看创建的 CRD

Bash
1
kubectl get crd | grep doris

以下为期望输出结果:

Bash
1
dorisclusters.doris.selectdb.com                      2024-02-22T16:23:13Z

2 添加 Doris Operator

2.1 方案一:快速部署 Doris Operator

可以直接拉去仓库中的 Doris Operator 模板进行快速部署。

使用以下命令可以在 Kubernetes 集群中部署 Doris Operator

Bash
1
kubectl apply -f https://raw.githubusercontent.com/apache/doris-operator/master/config/operator/operator.yaml

以下为期望输出结果:

Bash
1
2
3
4
5
6
7
namespace/doris created
role.rbac.authorization.k8s.io/leader-election-role created
rolebinding.rbac.authorization.k8s.io/leader-election-rolebinding created
clusterrole.rbac.authorization.k8s.io/doris-operator created
clusterrolebinding.rbac.authorization.k8s.io/doris-operator-rolebinding created
serviceaccount/doris-operator created
deployment.apps/doris-operator created

2.2 方案二:自定义部署 Doris Operator

在创建完 CRD 后,在 Kubernetes 集群上部署 Doris Operator 有两种方式:在线与离线部署。

operator.yaml 文件中规范了部署 operator 的服务的最低要求。为了适配复杂的生产环境,可以下载 operator.yaml 文件后,按照期望更新其中配置。

2.2.1 在线安装 Doris Operator

在修改 operator.yaml 文件后,可以使用以下命令部署 Doris Operator 服务:

Bash
1
kubectl apply -f ./operator.yaml

以下为期望输出结果:

Bash
1
2
3
4
5
6
7
namespace/doris created
role.rbac.authorization.k8s.io/leader-election-role created
rolebinding.rbac.authorization.k8s.io/leader-election-rolebinding created
clusterrole.rbac.authorization.k8s.io/doris-operator created
clusterrolebinding.rbac.authorization.k8s.io/doris-operator-rolebinding created
serviceaccount/doris-operator created
deployment.apps/doris-operator created

2.2.2 离线安装 Doris Operator

  1. 下载 operator 运行所需镜像文件

    如果服务器没有连通外网,需要先下载对应的 operator 镜像文件。 Doris Operator 用到以下的镜像:

    Bash
    1
    selectdb/doris.k8s-operator:latest
    

    在可以连通外网的服务器中运行以下的命令,可以将镜像下载下来:

    Bash
    1
    2
    3
    4
    ## download doris operator image
    docker pull selectdb/doris.k8s-operator:latest
    ## save the doris operator image as a tar package
    docker save -o doris.k8s-operator-latest.tar selectdb/doris.k8s-operator:latest
    

    将已打包的 tar 文件放置到所有的 Kubernetes node 节点中,运行以下命令上传镜像:

    Bash
    1
    docker load -i doris.k8s-operator-latest.tar
    
  2. 配置 Doris Operator

    下载 operator.yaml 文件后,可以根据生产环境期望修改模板。

    Doris OperatorKubernetes 集群中是一个无状态的 Deployment ,可以根据需求修改如 limitsreplicalabelnamespace 等项目。如需要指定某一版本的 doirs operator 镜像,可以在上传镜像后对 operator.yaml 文件做如下修改:

    Bash
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    ...
    containers:
    - command:
        - /dorisoperator
        args:
        - --leader-elect
        image: selectdb/doris.k8s-operator:v1.0.0
        name: dorisoperator
        securityContext:
        allowPrivilegeEscalation: false
        capabilities:
            drop:
            - "ALL"
    ...
    
  3. 安装 Doris Operator

    在修改 Doris Operator 模板后,可以使用 apply 命令部署 Operator

    Bash
    1
    kubectl apply -f ./operator.yaml
    

    以下为期望输出结果:

    Bash
    1
    2
    3
    4
    5
    6
    7
    namespace/doris created
    role.rbac.authorization.k8s.io/leader-election-role created
    rolebinding.rbac.authorization.k8s.io/leader-election-rolebinding created
    clusterrole.rbac.authorization.k8s.io/doris-operator created
    clusterrolebinding.rbac.authorization.k8s.io/doris-operator-rolebinding created
    serviceaccount/doris-operator created
    deployment.apps/doris-operator created
    

2.3 方案三:Helm 部署 Doris Operator

Helm Chart 是一系列描述 Kubernetes 相关资源的 YAML 文件的封装。通过 Helm 部署应用时,你可以自定义应用的元数据,以便于分发应用。 ChartHelm 的软件包,采用 TAR 格式,用于部署 Kubernetes 原生应用程序。通过 Helm Chart 可以简化部署 Doris 集群的流程。

2.3.1 在线添加仓库

  1. 添加部署仓库

    通过 repo add 命令添加远程仓库

    Bash
    1
    helm repo add doris-repo https://charts.selectdb.com
    

    通过 repo update 命令更新最新版本的 chart

    Bash
    1
    helm repo update doris-repo
    
  2. 安装 Doris Operator

    通过 helm install 命令可以使用默认配置在 dorisnamespace 中安装 Doris Operator

    Bash
    1
    helm install operator doris-repo/doris-operator
    

    如果需要自定义装配 values.yaml ,可以参考如下命令:

    Bash
    1
    helm install -f values.yaml operator doris-repo/doris-operator
    

    通过 kubectl get pods 命令查看 Pod 的部署状态。当 Doris OperatorPod 处于 Running 状态且 Pod 内所有容器都已经就绪,即部署成功。

    Bash
    1
    kubectl get pod --namespace doris
    

    返回结果如下:

    Bash
    1
    2
    NAME                              READY   STATUS    RESTARTS   AGE
    doris-operator-866bd449bb-zl5mr   1/1     Running   0          18m
    

2.3.2 离线添加仓库

如果服务器无法连接外网,需要预先下载 Doris OperatorDoris Clusterchart 资源。

  1. 下载离线 chart 资源

    下载 doris-operator-{chart_version}.tgz 安装 Doris Operator chart 。如需要下载 1.4.0 版本的 Doris Operator 可以使用以下命令:

    Bash
    1
    wget https://charts.selectdb.com/doris-operator-1.4.0.tgz
    
  2. 安装 Doris Operator

    通过 helm install 命令可以安装 Doris Operator

    Bash
    1
    helm install operator doris-operator-1.4.0.tgz
    

    如果需要自定义装配 values.yaml ,可以参考如下命令:

    Bash
    1
    helm install -f values.yaml operator doris-operator-1.4.0.tgz
    

    通过 kubectl get pods 命令查看 Pod 的部署状态。当 Doris OperatorPod 处于 Running 状态且 Pod 内所有容器都已经就绪,即部署成功。

    Bash
    1
    kubectl get pod --namespace doris
    

    返回结果如下:

    Bash
    1
    2
    NAME                              READY   STATUS    RESTARTS   AGE
    doris-operator-866bd449bb-zl5mr   1/1     Running   0          18m
    

3 查看服务状态

当部署 Operator 服务后,可以通过以下命令查看服务状态。

Bash
1
kubectl get pod -n doris

返回结果如下:

Bash
1
2
NAME                              READY   STATUS    RESTARTS   AGE
doris-operator-6f47594455-p5tp7   1/1     Running   0          11s

需要确保 STATUS 状态为 Running ,且 pod 中所有容器的状态都为 Ready