使用 KubeBlocks 实现多 K8s 部署
KubeBlocks 支持管理 多个 Kubernetes 集群,为用户在实例容灾、K8s 集群管理等方面提供新的选项。为支持多 K8s 管理,KubeBlocks 引入了控制面(control plane )和数据面(data plane)。
- 控制面:一个独立的 K8s 集群,KubeBlocks operator 运行在该集群当中,KubeBlocks 定义的相关对象大都存放在这个集群(比如 Definition、Cluster、Backup、Ops 等)。用户通过跟这个集群的 API 进行交互来实现对多集群实例的管理。
- 数据面:用于运行最终工作负载的 K8s 集群,数量可以是一到多个。这些集群当中会 hosting 实例相关的计算、存储、网络等资源,如 Pod、PVC、Service、SA、CM、Secret、Jobs 等,而 KubeBlocks operator 目前(v0.9.0)不会在这些集群中运行。
实际物理部署上,控制面可以选择部署在单个 AZ,简单灵活;也可以选择部署在多个不同 AZ,提供更高的可用性保证;也可以复用某个数据面集群,以更低成本的方式运行。
环境准备
准备 K8s 集群,并准备部署 KubeBlocks 所需的配置信息。本文示例准备了三个数据面集群,context 分别命名为:k8s-1
、k8s-2
、k8s-3
。
-
准备 K8s 集群:1 个设定为控制面,其他几个设定为数据面,确保这些数据面集群的 API server 在控制面集群中可以联通。这里的联通包含两个层面:一是网络连通,二是访问配置。
-
准备 KubeBlocks 访问数据面所需的配置信息,以 secret 形式放置在控制面集群当中,部署 KubeBlocks 时需要传入。其中,secret key 要求为 “kubeconfig”,value 为标准 kubeconfig 内容格式。示例如下:
apiVersion: v1
kind: Secret
metadata:
namespace: kb-system
name: <your-secret-name>
type: kubernetes.kubeconfig
stringData:
kubeconfig: |
apiVersion: v1
clusters:
...
contexts:
...
kind: Config
users:
...
部署多 K8s 集群
部署 Kubeblocks
在控制面安装 KubeBlocks。
-
安装 KubeBlocks。
# multiCluster.kubeConfig 指定存放数据面 k8s kubeconfig 信息的 secret
# multiCluster.contexts 指定数据面 K8s contexts
kbcli kubeblocks install --version=0.9.0 --set multiCluster.kubeConfig=<secret-name> --set multiCluster.contexts=<contexts>