使用 MatrixOne Operator 部署 MatrixOne 集群

本篇文档将讲述如何使用 MatrixOne Operator 部署一个简单的 MatrixOne 集群。

主要步骤

1. 创建 Kubernetes 集群

2. 部署 MatrixOne Operator

3. 创建 MatrixOne 集群

4. 连接 MatrixOne 集群

其他步骤

删除 MatrixOne 集群

1. 创建 Kubernetes 集群

开始前准备

开始步骤一之前,为保证 MatrixOne 集群能够正常部署与使用,请阅读本章节,了解创建 Kubernetes 集群的工具和配置要求。

你可以去以下几个工具的官方网站进行下载,并按照它们的官方文档指导进行安装配置。

版本要求:1.18 或以上版本

作用:安装 Kubernetes,协助 MatrixOne 集群进行自动部署、扩展和管理容器化应用程序。

版本要求:1.18 或以上版本

作用:安装命令行工具 kubectl,它是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具,协助 MatrixOne 集群使用进行自动部署。

版本要求:3.0 或以上版本

作用:Helm 是 Kubernetes 的应用程序包管理器,你可使用 Helm Charts 描述应用程序的结构。使用 Helm 命令行界面,您可以回滚部署、监控应用程序的状态并跟踪 MatrxiOne 集群部署的历史记录。

创建和启动 Kubernetes 集群步骤

本章节介绍了三种创建 Kubernetes 集群的方法,可用于测试使用 MatrixOne Operator 管理的 MatrixOne 集群。你可以选择使用 EKSGKEKind 安装并启动一套 Kubernetes 集群。

简要说明

  • 使用你本地的设备或 AWS Cloud Shell 上 eksctl 命令行工具部署 Amazon EKS 集群
  • 使用 Google Cloud Shell 在 Google Cloud Platform 的 Google Kubernetes Engine 中部署 Kubernetes 集群
  • 使用 Kind 创建在 Docker 中运行的 Kubernetes

方法一:创建并启动 Amazon EKS 集群

  1. 参考创建 Amazon EKS 集群官方文档,完成 eksctl 命令行工具的安装与配置。

  2. 选择合适的区域(如 ap-southeast-1),执行下面的命令,启动一套 EKS 集群:

  1. $ eksctl create cluster --name matrixone --nodegroup-name db --node-type m5.xlarge --node3 3 --node-ami auto

方法二:创建并启动 Google GKE 集群

  1. 参考将应用部署到 GKE 集群官方文档,完成 gcloud 命令行工具的安装与配置。

  2. 选择合适的区域(如 asia-east2),执行下面的命令,启动一套 GKE 集群:

  1. $ gcloud container clusters create matrixone --machine n2-standard-4 --region ${region} --num-nodes 3

方法三:创建并启动 Kind

Note

在 Kind 部署的集群上部署的 MatrixOne 数据库没有多节点高可用的能力,不建议在生产环境使用。

  1. 参考 Docker 官方文档在本地环境配置和启动 Docker 进程。

  2. 参考 Kind 官方文档,完成 kind 命令行工具的安装与配置。

  3. 执行下面的命令,在本地使用 Kind 部署一套 kubernetes 集群:

  1. $ cat <<EOF > kind.yaml
  2. kind: Cluster
  3. apiVersion: kind.x-k8s.io/v1alpha4
  4. nodes:
  5. - role: control-plane
  6. - role: worker
  7. - role: worker
  8. - role: worker
  9. EOF
  10. $ kind create cluster --name matrixone --config kind.yaml

2. 部署 MatrixOne Operator

  1. 执行下面的命令,在 Kubernetes 集群为 matrixone-operator 创建一个 Namespace:

    1. kubectl create namespace mo-system
  2. 执行下面的命令,使用 helm 安装 matrixone-operator:

    1. helm -n mo-system install mo ./charts/matrixone-operator --dependency-update
  3. 执行下面的命令,验证 matrixone-operator 安装完成:

    1. helm -n mo-system ls
    2. kubectl -n mo-system get pod
  4. 若 matrixone-operator 安装成功,上面的命令中即可看到已经安装的 helm chart 和运行中的 matrixone-operator Pod

3. 创建 MatrixOne 集群

  1. 执行下面的命令,使用现有的 Namespace 或新建一个 Namespace 开始集群部署:

    1. NS=${NAMESPACE_NAME}
    2. kubectl create namespace ${NS}

    在进行分布式部署时,MatrixOne 数据库需要外部的共享存储,MatrixOne 目前可以使用支持 S3 协议的对象存储(如 AWS S3、MinIO)或网络文件系统(如 NFS)作为共享存储。配置 AWS S3 或 MinIO 的步骤,请参考为 MatrixOne 集群配置共享存储的相关内容。

  2. 执行下面的命令,将在目标 Kubernetes 集群中部署一套 MinIO 作为共享存储,相信信息,参考为 MatrixOne 集群配置共享存储

    1. kubectl -n mo-system apply -f https://raw.githubusercontent.com/matrixorigin/matrixone-operator/main/examples/minio.yaml
    2. # 在 MatrixOne 集群将使用的 NS 中准备好 MinIO 的 credential
    3. $ kubectl -n ${NS} create secret generic minio --from-literal=AWS_ACCESS_KEY_ID=minio --from-literal=AWS_SECRET_ACCESS_KEY=minio123
  3. 执行下面的命令,下载示例的 MatrixOne 集群定义文件:

    1. $ curl -O https://raw.githubusercontent.com/matrixorigin/matrixone-operator/main/examples/mo-cluster.yaml
  4. 默认的集群定义中所有的组件均未配置资源申请,只适用于演示。你可以编辑 mo-cluster.yaml,为各组件指定 CPU 与内存的请求和限制。

    1. apiVersion: core.matrixorigin.io/v1alpha1
    2. kind: MatrixOneCluster
    3. metadata:
    4. name: mo
    5. spec:
    6. logService:
    7. replicas: 3
    8. + resources:
    9. + requests:
    10. + cpu: 3
    11. + memory: 14Gi
    12. + cpu: 3
    13. + memory: 14Gi
    14. dn:
    15. replicas: 2
    16. + resources:
    17. + requests:
    18. + cpu: 3
    19. + memory: 14Gi
    20. + limits:
    21. + cpu: 3
    22. + memory: 14Gi
    23. tp:
    24. replicas: 2
    25. + resources:
    26. + requests:
    27. + cpu: 3
    28. + memory: 14Gi
    29. + limits:
    30. + cpu: 3
    31. + memory: 14Gi
  5. 执行下面的命令,创建 MatrixOne 集群:

    1. kubectl -n ${NS} apply -f mo-cluster.yaml
  6. 执行下面的命令,验证 MatrixOne 集群创建是否成功:

    1. kubectl -n ${NS} get matrixonecluster --watch
  7. 等待集群对象的 Phase 达到 Ready 状态则创建成功,代码示例如下所示:

    1. NAME LOG DN TP AP VERSION PHASE AGE
    2. mo 3 2 2 nightly-63835b83 Ready 2m6s

4. 连接 MatrixOne 集群

  1. 执行下面的命令,获取 MatrixOne 集群的初始用户名和密码:

    1. SECRET_NAME=$(kubectl -n ${NS} get matrixonecluster mo --template='{{.status.credentialRef.name}}')
    2. MO_USR=$(kubectl -n ${NS} get secret ${SECRET_NAME} --template='{{.data.username}}' | base64 -d)
    3. MO_PWD=$(kubectl -n ${NS} get secret ${SECRET_NAME} --template='{{.data.password}}' | base64 -d)
  2. 默认配置的 MatrixOne 集群只允许所在 k8s 集群内的客户端进行访问。你可以通过下面列举的两种方法之一连接到 MatrixOne 集群上:

    • 在 k8s 集群内的启动一个临时 Pod,在 Pod 内连接 MatrixOne 集群:
    1. kubectl -n ${NS} run --rm mysql-shell -it --image=mysql -- mysql -h mo-tp-cn -P6001 -u${MO_USR} -p${MO_PWD}
    • 通过 kubectl port-forward 将目标服务映射到本地端口上进行访问:
    1. nohup kubectl -n mo port-forward svc/mo-tp-cn 6001:6001 &
    2. mysql -h 127.0.0.1 -P6001 -u${MO_USR} -p${MO_PWD}

删除 MatrixOne 集群

如果需要删除集群,只需要删除步骤 3 中创建的 MatrixOne 对象,可以执行下面的命令进行删除:

  1. kubectl -n ${NS} delete -f mo-cluster.yaml

假如 MinIO 中的数据已经不再需要,执行下面的命令,可以删除步骤 3 创建的 MinIO:

  1. kubectl -n mo-system delete -f https://raw.githubusercontent.com/matrixorigin/matrixone-operator/main/examples/minio.yaml

了解更多

如果你已经部署完成 MatrixOne 集群,你可以参加以下文档,了解更多。