您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[ArchSummit深圳2024|全球架构师峰会]:曹伟-K8s上的数据库私有云之旅:KubeBlocks架构设计与实践 - 发现报告

曹伟-K8s上的数据库私有云之旅:KubeBlocks架构设计与实践

AI智能总结
查看更多
曹伟-K8s上的数据库私有云之旅:KubeBlocks架构设计与实践

曹伟丨云猿生数据创始人/ CEO 演讲者:曹伟 云猿生数据创始人/ CEO 前阿里云数据库总经理(研究员),阿里云RDS的架构师,云原生数据库PolarDB创始人。中国计算机学会数据库专委会、开源专委会执行专委,获得2020年中国电子学会科技进步一等奖,在SIGMOD、VLDB、ICDE、FAST、USENIX ATC等数据库与存储国际顶级学术会议发表论文20余篇。 内容大纲 •公共云、私有云,K8s和数据库的演进趋势•数据库私有云平台案例•dbPaaS的挑战•KubeBlocks的设计理念及核心特点•数据库容器化的常见问题 数据库行业发展方向 公有云vs.私有云的选择 趋势一 私有云正在从时代全面进化到 趋势二 K8s发展带动技术水平追赶 K8s正在统一公共云和私有云的 K8s:构建PaaS的基础 服务发现 配置管理 K8sPaaS全景图里还缺最后一块: dbPaaS的挑战 陷阱:烟囱式架构 开发和维护成本高 引入新引擎成本高 数据库容器化后 能不能像一样在K8s上进行管理呢? 首先思考:如何解决软件工程复杂性问题 KubeBlocks通过抽象和分层管理数据库 KubeBlocks通过抽象和分层管理数据库 KubeBlocks通过抽象和分层管理数据库 KubeBlocks通过抽象和分层管理数据库 把KubeBlocksAPI映射到数据库– MySQL 把KubeBlocksAPI映射到数据库– Redis主备 把KubeBlocksAPI映射到数据库– Redis集群 把KubeBlocksAPI映射到数据库– Kafka KubeBlocks通过抽象和分层管理数据库 例子:Redis Addon支持Redis的多种部署形态 1.编写ComponentDefinition:Redis/Sentinel/RedisProxy cmpd-redis.yaml cmpd-redis.yaml kind:ComponentDefinitionmetadata:name:redisspec:serviceKind:redisserviceVersion:7.0.6services:ports:-port:6379volume:-name:data…roles:-name:primary…-name:secondary…configs:…scripts:…logConfigs:…exporter:…systemAccounts:-name:default… lifecycleActions:-roleProbe:… -postProvision:…-accountProvision:…-… -name:REDIS_ADVERTISED_PORT…-name:SENTINEL_SERVICE_PORT…-name:SENTINEL_POD_NAME_LIST…runtime: 2.编写ComponentDefinition:Redis/Sentinel/RedisProxy cmpd-redis-sentinel.yaml cmpd-redis-sentinel.yaml kind:ComponentDefinitionmetadata:name:redis-sentinelspec:serviceKind:redis-sentinelserviceVersion:7.0.6services:ports:-port:26379volume:-name:data…configs:…scripts:…logConfigs:…exporter:…systemAccounts:-name:default… 3.编写ComponentDefinition:Redis/Sentinel/RedisProxy cmpd-redis-twemproxy.yaml cmpd-redis-twemproxy.yaml kind:ComponentDefinitionmetadata:name:redis-twemproxyspec:serviceKind:redis-twemproxyserviceVersion:0.5services:ports:-port:22121volume:-name:data…configs:…scripts:…logConfigs:…exporter:… vars: -name:REDIS_SERVICE_NAME…-name:REDIS_SERVICE_PORT…runtime:initContainers:-name:init-redis-twemproxyimage:…containers:-name:redis-twemproxyimage:…command:…env:…ports:…volumeMounts:…-name:metricsimage:… 4.编写ClusterDefinition:组装Redis/Sentinel/RedisProxy 5.使用RedisAddon创建和管理Redis数据库 通过kbcli 通过YAMLAPI KubeBlocks已经集成了35种数据库引擎 https://github.com/apecloud/kubeblocks-addons/tree/main/addons 数据库容器化的常见问题 容器化会不会影响数据库的性能? K8s适合管理有状态服务么? 虚拟化与容器方案对比 •Kata•Firecracker KubeBlocks基于runC容器进行的性能优化 数据库容器化的常见问题 容器化会不会影响数据库的性能? K8s适合管理有状态服务么? 从StatefulSet到InstanceSet StatefulSet InstanceSet •不支持PVC扩容•变更Pod配置时必须按照严格顺序e.g.pod-2, pod-1, pod-0•不支持异构的Pod配置 •直接管理Pod•支持异构的Pod配置•支持指定Pod下线•支持管理非常多数量的Pod(e.g.几千个) 高可用和高可靠仍然是通过数据库层面多副本技术 容灾调度策略 •不同节点部署•不同可用区部署 角色/健康探测 •探测节点可用性•切换角色Label 控制粒度到Pod •滚动更新,控制节点变更顺序•计划内角色切换 支持集成第三方高可用组件 •可定制健康探测,结合系统信息综合判断•节点异常时提供自修复能力 在正在成为趋势 应用场景:互联网公司的私有云降本增效 应用场景:央国企和银行的数科公司的私有云 应用场景:为软件厂商进行私有化部署 提高部署效率 轻量化部署 业务出海 KubeBlocks in CNCF Landscape KubeBlocks企业版 基于KubeBlocks提供公共云RDS体验的私有云数据库一站式管理服务 KubeBlocks特性总结 •基于抽象和API标准对多种据库引擎进行统一的管理•东八区最专业的数据库容器化团队•高质量高性能,生产环境部署标准的K8s Operator 欢迎交流