从Docker到K8s:将OceanBase 4社区版部署到Minikube的完整实践

发布时间:2026/7/5 13:38:12

从Docker到K8s:将OceanBase 4社区版部署到Minikube的完整实践 从Docker到KubernetesOceanBase 4社区版在Minikube中的云原生实践在本地开发环境中快速搭建分布式数据库集群一直是开发者的痛点。传统物理机部署OceanBase需要数十GB内存和多个CPU核心而Docker虽然降低了门槛却难以应对复杂的多节点管理需求。本文将带你使用Minikube构建单节点Kubernetes集群实现OceanBase 4社区版的自动化部署和生命周期管理。1. 环境准备与Minikube配置1.1 基础环境搭建在开始之前确保你的开发机满足以下条件至少16GB可用内存推荐32GB50GB可用磁盘空间已安装Docker Desktop或等效容器运行时kubectl命令行工具使用以下命令安装Minikube并启动集群# 安装MinikubeMacOS示例 brew install minikube # 启动带有额外资源的集群 minikube start --memory12g --cpus4 --disk-size50g提示如果遇到驱动问题可添加--driverdocker参数明确指定容器运行时1.2 Kubernetes存储配置OceanBase需要持久化存储来保存数据文件我们需要预先配置StorageClass和PersistentVolume# ob-storage.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ob-local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolume metadata: name: ob-data-pv spec: capacity: storage: 30Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: ob-local-storage local: path: /mnt/obdata nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - minikube应用配置并验证kubectl apply -f ob-storage.yaml kubectl get sc,pv2. OceanBase Kubernetes部署方案2.1 StatefulSet资源配置考虑到OceanBase的分布式特性我们采用StatefulSet确保Pod的稳定网络标识和有序部署# oceanbase-statefulset.yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: oceanbase spec: serviceName: oceanbase replicas: 1 selector: matchLabels: app: oceanbase template: metadata: labels: app: oceanbase spec: containers: - name: oceanbase-ce image: oceanbase/oceanbase-ce:4.2.1 resources: limits: memory: 10Gi cpu: 2 requests: memory: 8Gi cpu: 1 env: - name: OB_MEMORY_LIMIT value: 8G - name: OB_SYSTEM_MEMORY value: 1G - name: OB_DATAFILE_SIZE value: 5G - name: OB_LOG_DISK_SIZE value: 5G ports: - containerPort: 2881 name: mysql - containerPort: 2882 name: rpc volumeMounts: - name: ob-data mountPath: /root/ob volumeClaimTemplates: - metadata: name: ob-data spec: accessModes: [ ReadWriteOnce ] storageClassName: ob-local-storage resources: requests: storage: 20Gi关键参数说明参数推荐值作用OB_MEMORY_LIMIT8G实例总内存限制OB_SYSTEM_MEMORY1G系统保留内存OB_DATAFILE_SIZE5G数据文件初始大小OB_LOG_DISK_SIZE5G日志磁盘空间2.2 Service暴露与访问创建Service暴露OceanBase服务端口# oceanbase-service.yaml apiVersion: v1 kind: Service metadata: name: oceanbase spec: selector: app: oceanbase ports: - name: mysql port: 2881 targetPort: 2881 - name: rpc port: 2882 targetPort: 2882 type: NodePort通过minikube tunnel实现本地访问kubectl apply -f oceanbase-service.yaml minikube service list # 查看分配的NodePort minikube tunnel # 开启隧道3. 集群管理与运维实践3.1 初始化OceanBase集群进入Pod执行初始化命令kubectl exec -it oceanbase-0 -- bash # 在容器内执行 obd cluster create obcluster -c /root/ob-config.yaml示例配置文件内容# ob-config.yaml oceanbase-ce: servers: - 127.0.0.1 global: home_path: /root/ob mysql_port: 2881 rpc_port: 2882 zone: zone1 memory_limit: 8G system_memory: 1G datafile_size: 5G log_disk_size: 5G cpu_count: 2 production_mode: false3.2 日常运维操作通过kubectl实现常见管理操作启动/停止集群# 优雅停止 kubectl exec oceanbase-0 -- obd cluster stop obcluster # 重新启动 kubectl exec oceanbase-0 -- obd cluster start obcluster查看集群状态kubectl exec oceanbase-0 -- obd cluster list kubectl exec oceanbase-0 -- obclient -h127.0.0.1 -P2881 -uroot -Doceanbase -A -e SHOW DATABASES;日志查看kubectl logs oceanbase-0 -f4. 性能优化与扩展方案4.1 资源配额调整通过修改StatefulSet配置实现动态资源调整kubectl edit statefulset oceanbase建议调整参数对照表场景memory_limitcpu_countdatafile_size开发测试8G210G功能验证16G420G性能测试32G850G4.2 多节点部署方案虽然Minikube是单节点环境但可以通过修改配置模拟多节点部署为StatefulSet增加replicas数量为每个Pod配置不同的zone名称使用Headless Service实现节点发现# 多zone配置示例 - name: OB_ZONE value: zone1 # 根据pod序号动态修改为zone1/zone2/zone34.3 数据备份与恢复利用Kubernetes的持久化卷特性实现数据保护# 创建快照 kubectl exec oceanbase-0 -- obd cluster backup obcluster --backup-dir/root/ob-backup # 将备份文件拷贝到本地 kubectl cp oceanbase-0:/root/ob-backup ./local-backup在Minikube环境中部署OceanBase社区版最实用的技巧是合理配置资源限制。我发现将memory_limit设置为物理内存的70%同时确保datafile_size足够大可以避免大部分性能问题。当需要测试多节点行为时可以启动多个Minikube实例组成集群虽然这会增加资源消耗但能更好地模拟生产环境行为。

相关新闻