跳到主要内容

多 K8s 集群部署

提示

此功能适用于 ob-operator 2.3.0 及更高版本。 前提条件: 需要在所有 K8s 集群之间保证 Pod 和服务的互通。

在多个 K8s 集群上部署工作负载可以增强系统的扩展性、可靠性和安全性。通过将不同的 obzone 部署到不同的 K8s 集群,可以充分发挥 OceanBase 高可用架构的优势,实现集群级别的容灾,并使集群和工作负载的管理更加简单高效。

整体架构

inter-k8s-cluster-architecture

如架构图所示,K8s 集群具有不同角色。我们将部署了 ob-operator 的集群称为主集群(master),其他集群称为工作集群(worker)。

通过在主集群中创建类型为 K8sCluster 的自定义资源,可以将工作集群注册进来。ob-operator 使用存储在自定义资源中的凭证访问这些工作集群。OceanBase 的工作负载在工作集群中以原生 K8s 资源运行,而 OceanBase 的自定义资源仍保存在主集群中。

添加工作 K8s 集群

要将 K8s 集群添加为工作集群,请确保凭证具有以下权限:get, list, watch, create, update, patchdelete 以下资源,pod, service, pvc, jobnamespace。参考以下示例,将 kubeConfig 下的占位符替换为工作集群的凭证,并将其应用于主集群。

apiVersion: k8s.oceanbase.com/v1alpha1
kind: K8sCluster
metadata:
name: k8s-remote
spec:
name: remote
description: "This is the remote k8s cluster for testing"
kubeConfig: |
<Your K8s credential> # Typically you can found it in ~/.kube/config

使用以下命令检查资源

kubectl get k8scluster

预期输出如下

NAME         AGE   CLUSTERNAME
k8s-remote 1m remote

创建多个 K8s 集群中运行的 OceanBase 集群

要在多个 K8s 集群中创建 OceanBase 集群,与单 K8s 集群中创建集群唯一的区别是为运行在工作集群中的 obzone 指定运行的 K8s 集群。请参考以下示例配置

apiVersion: oceanbase.oceanbase.com/v1alpha1
kind: OBCluster
metadata:
name: test
namespace: default
# annotations:
# "oceanbase.oceanbase.com/independent-pvc-lifecycle": "true"
# "oceanbase.oceanbase.com/mode": "service"
spec:
clusterName: test
clusterId: 1
userSecrets:
root: root-password
topology:
- zone: zone1
replica: 1
- zone: zone2
replica: 1
k8sCluster: k8s-cluster-hz
- zone: zone3
replica: 1
k8sCluster: k8s-cluster-sh
observer:
image: oceanbase/oceanbase-cloud-native:4.2.1.7-107000162024060611
resource:
cpu: 2
memory: 10Gi
storage:
dataStorage:
storageClass: local-path
size: 50Gi
redoLogStorage:
storageClass: local-path
size: 50Gi
logStorage:
storageClass: local-path
size: 20Gi
parameters:
- name: system_memory
value: 1G
- name: "__min_full_resource_pool_memory"
value: "2147483648" # 2G

管理多 K8s 集群中运行的 OceanBase 集群

OceanBase 的管理方式和单个 K8s 集群中运行没有其他区别,只需要修改主集群中的自定义资源,ob-operator 会负责将相应更改同步到各个工作集群中。