在K8s上运行生产级OceanBase Runsproduction-levelOceanBaseonK8s 曹伟 云猿生数据创始人&CEO 云猿生数据创始人/CEO 前阿里云数据库总经理/研究员,云原生数据库PolarDB创始人。中国计算机学会数据库专委会、开源专委会执行专委,获得2020年中国电子学会科技进步一等奖,在SIGMOD、VLDB、ICDE、FAST、USENIXATC等数据库 与存储国际顶级学术会议发表论文20余篇。 AWS GCP Azure 业务开发 InternalDeveloperPlatform/平台工程 App Endpoint Database Schema ACL Workflow K8s POD service PVC/PV secret configmapTaintToleration AffinityAnti-Affinity event ACK EKS GKE AKS OpenShiftRancher 阿里云 物理机 #YAML MASTER #YAML #YAML STAGE DEV #YAML YAMListheprogramminglanguageofDevOps DBPaaSAPI&Portal 监控报警 审计 扩缩容 容灾 账号 授权 维 运HA备份恢复迁移操 作 引擎 升级 •体验不一致 •系统预期行为不一致 •Conway'sLaw •业务引入新引擎成本高 资源调度 云(虚拟机) 物理机 容器 存储 网络 安全 环境 多云(包括混合云) K8sAPI K8s原生 支持多种数据库引擎 学习曲线类似 支持新业务扩展新引擎 Automation DevOps友好 支持IaC实践 提供声明式API 人工操作IaC自动化 kbcli KubeBlocksCloud K8sAPI OpenAPI 声明式API 生命周期 高可用 MySQLCR RedisCR PGCR 领域模型YAML低代码扩展 配置管理 备份还原 账号管理 监控日志 MongoDBCR KafkaCR PulsarCR ESCR OceanBaseCR …… 扩展API K8s容器编排 Pod Scheduler CSI …… Cluster&ClusterDefinitionComponent&ComponentDefinitionInstanceSet Instance K8s抽象 Pod PVC Configmap … Service Toleration Affinitiy … Cluster:OceanBase-paxos InstanceInstance Instance Pod PVC Service Component: OceanBaseInstanceSet Cluster:OceanBase-masterslave Pod PVC Service Instance Component: Instance OceanBase-replInstanceSet Component:OceanBase-repl InstanceSet Pod PVC Service Zone1 OBServer OBServer OBServer Zone2 Zone3 OBServer OBServer OBServerOBServer OBServer OBServer 要创建哪些组件 OBServer 每个组件如何配置和启动 配置文件启动脚本服务端口 OceanBaseArchitecture 1理解OceanBase架构 name:oceanbasespec: -serviceKind:…#服务类型services:…#对外提供的服务端口configs:…#配置文件 scripts:…#脚本文件 runtime:#运行时containers: -command: ports:…volumeMounts:… lifecycleActions:#生命周期管理roleProbe:…#自定义角色探测 2 定义组件模板,每个组件一个,需要填写 定义组件拓扑和组件配置,主要描述: ComponentDefinition.yaml kind:ComponentDefinitionmetadata: •Runtime 描述组件运行时信息,例如Containers •Configs: 渲染并挂载用户配置文件,参数约束,参数配置等 •Scripts: 渲染并挂载用户脚本文件,自定义环境变量等 •Services: 组件对外提供的服务端口和协议 •LifecycleActions: 常见的生命周期管理的任务,例如角色探测 configSpec配置文件 scriptSpec脚本文件 services 内部/外部服务 volumeMounts数据/日志文件目录 lifecycleActions组件的行为 创建集群模版 kind:Addonmetadata: name:oceanbasespec: addon.yaml OceanBaseAddon 开发OceanBaseAddon要写多少代码? description:OceanBaseDatabaseisanenterprise-levelnativedistributeddatabaseindependentlydevelopedbyAntGrouphelm: chartLocationURL:https://.../charts/oceanbase.tgz*installable: autoInstall:falsetype:Helm 开发时间 ~2周 JSON 2,961 监控面板配置 ShellScript 1,239 OBServer启动脚本 YAML 998 接入KueBlocks的YAML文件 描述OceanBase,指定是否默认安装等信息 *KubeBlocks的CICD流程会自动创建oceanbase.tgz,开发者不需要关心 *KubeBlocks-Addon会自动会新接入的Addon生成AddonYAML,简化了流程 3添加Addon配置文件 2步创建集群 运维功能列表 Step1:打开addon kbcliaddonenableoceanbase Step2:指定引擎类型,创建集群 kbcliclustercreateoceanbasemyob#myob为集群名 StepX:集群运维 kbclicluster<ops>myob 运维任务支持情况 Stop/StartY RestartY UpgradeY Volume-ExpandY VScaleY HScaleY Backup/RestoreY *Richday-2operations 拆解元件(Component) 组装式搭建(Cluster) 基于KubeBlocks(Addon) 1.单节点 2.主从 3.3节点Cluster 4.多租户Cluster OBProxy 性能 KubeBlocks针对容器和云环境对MySQL与PostgreSQL数据库的内核和参数进行优化,性能超过同规格RDS。 可用性KubeBlocks支持多种数据库的高可用集群配置。 可观察性 可扩展性 KubeBlocks对接入一个新的数据库引擎提供了良好的抽象,通过 addon机制可以快速集成,并提供一致的使用体验和预期行为。 KubeBlocks从丰富的数据源采集监控指标,集成了Prometheus堆栈,并提供了富有洞察力的Grafana模板。此外,还提供慢日志等排查工具。 KubeBlocks是一个开源的在K8s上运行和管理数据基础设施的系统软件,它帮助开发人员、SRE、平台工程师在企业中部署和维护专用的DBPaaS,并支持多种公共云和私有云环境。 集群管理 垂直伸缩 水平伸缩 存储扩容参数设置重启停止/启动版本升级账号管理 可观测性 内置Prometheus 与外部监控系统无缝集成 多层级监控大盘 IM/EMAIL报警 备份恢复 基于快照的自动备份 集成流行的备份工具 保存在低成本的对象存储 全量恢复/按时间点恢复 高可用 Failover Switchover 可配置的故障隔离级别 数据迁移 内置迁移工具 mysql2mysql 外部数据库导入 pg2pg异构迁移 混沌测试 故障注入Fault-inject 故障观测Nyancat 性能测试 Bench-tpcc Bench-fio 基础插件 Prometheus Csi-s3-driver Grafana Awsloadbalancercontroller 三方引擎 Nebula qdrant RisingWave weaviate Pika Milvus 33 已经支持 款 数据库引擎 CNCFCloudNativeLANDSCAPE收录的唯一的开源多引擎数据/数据库管理系统项目 欢迎加入社区 谢谢 谢谢 谢谢