YugabyteDB在GKE上的多区域部署指南(Helm Chart方式)
前言
YugabyteDB是一个高性能的分布式SQL数据库,支持在Kubernetes集群中进行部署。本文将详细介绍如何在Google Kubernetes Engine(GKE)上使用Helm Chart部署多区域(multi-zonal)或区域性(regional)的YugabyteDB集群。
环境准备
基础要求
在开始部署前,需要确保满足以下条件:
- 已创建多区域或区域性GKE集群
- 已配置Helm工具
- 集群节点资源满足最低要求:
- 总计12个CPU核心
- 45GB内存
- 推荐使用n1-standard-8实例类型(8核30GB)
工具安装
-
Google Cloud SDK安装
# 设置默认项目 gcloud config set project yugabyte # 安装kubectl gcloud components install kubectl
-
Helm安装验证
helm version
确保使用的是Helm 3.4或更高版本
集群创建
创建区域性集群
执行以下命令创建跨三个可用区的集群:
gcloud container clusters create my-regional-cluster \
--machine-type=n1-standard-8 \
--num-nodes 1 \
--region us-central1 \
--node-locations us-central1-a,us-central1-b,us-central1-c
配置存储类
创建专门的存储类以支持跨区域部署:
# storage.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: yb-storage
provisioner: kubernetes.io/gce-pd
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
type: pd-ssd
fsType: xfs
应用配置:
kubectl apply -f storage.yaml
YugabyteDB部署
添加Helm仓库
helm repo add yugabytedb https://charts.yugabyte.com
helm repo update
准备配置文件
为每个可用区创建独立的覆盖文件:
-
us-central1-a配置
# overrides-us-central1-a.yaml isMultiAz: True AZ: us-central1-a masterAddresses: "yb-master-0.yb-masters.yb-demo-us-central1-a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-b.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-c.svc.cluster.local:7100" storage: master: storageClass: "yb-storage" tserver: storageClass: "yb-storage" replicas: master: 1 tserver: 1 totalMasters: 3 gflags: master: placement_cloud: "gke" placement_region: "us-central1" placement_zone: "us-central1-a" tserver: placement_cloud: "gke" placement_region: "us-central1" placement_zone: "us-central1-a"
-
类似地创建us-central1-b和us-central1-c的配置文件
部署集群
-
创建命名空间
kubectl create namespace yb-demo-us-central1-a kubectl create namespace yb-demo-us-central1-b kubectl create namespace yb-demo-us-central1-c
-
部署各区域组件
helm install yb-demo-us-central1-a yugabytedb/yugabyte \ --version <version> \ --namespace yb-demo-us-central1-a \ -f overrides-us-central1-a.yaml --wait
(其他区域类似)
集群验证
检查Pod状态
kubectl get pods --all-namespaces
检查服务状态
kubectl get services --all-namespaces
访问管理界面
通过任一yb-master-ui服务的External IP访问管理界面(端口7000):
http://<external-ip>:7000
高级配置
区域感知副本放置
默认配置不会考虑区域分布,执行以下命令启用区域感知:
kubectl exec -it -n yb-demo-us-central1-a yb-master-0 -- bash \
-c "/home/yugabyte/master/bin/yb-admin --master_addresses yb-master-0.yb-masters.yb-demo-us-central1-a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-b.svc.cluster.local:7100,yb- master-0.yb-masters.yb-demo-us-central1-c.svc.cluster.local:7100 modify_placement_info gke.us-central1.us-central1-a,gke.us-central1.us-central1-b,gke.us-central1.us-central1-c 3"
客户端连接
YSQL Shell连接
kubectl exec -n yb-demo-us-central1-a -it yb-tserver-0 -- ysqlsh \
-h yb-tserver-0.yb-tservers.yb-demo-us-central1-a
YCQL Shell连接
kubectl exec -n yb-demo-us-central1-a -it yb-tserver-0 -- ycqlsh \
yb-tserver-0.yb-tservers.yb-demo-us-central1-a
外部客户端连接
获取yb-tserver-service的External IP:
- YSQL: 端口5433
- YCQL: 端口9042
总结
本文详细介绍了在GKE上使用Helm Chart部署多区域YugabyteDB集群的全过程。通过这种部署方式,您可以获得:
- 跨区域的高可用性
- 数据自动分片和负载均衡
- 灵活的资源扩展能力
- 简化的运维管理
对于生产环境,建议根据实际负载情况调整资源配置和副本数量,并设置适当的监控告警机制。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考