Kubernetes Operator实践 MySQL容器化

2020-03-01 1204浏览

  • 1.Kubernetes Operator 实践 —— MySQL 容器化 刘林 搜狗资深工程师
  • 2.关于我 搜狗商业平台研发部 资深开发工程师 l 主要从事商业平台研发工作,在构建高性能、高可用大规模 系统方面有丰富的实践经验 l 刘林 目前专注于云计算、DevOps 等相关领域,负责搜狗商业云 平台的设计研发工作
  • 3.1. 背景介绍 2. Operator 的基本原理 3. MySQL Operator 设计实践 4. 小结
  • 4.搜狗商业平台 Java 技术体系广 服务多迭代快 C++ 技术体系 商业平台 CRM 搜索广告 搜狗产品矩阵 广告平台 Golang JavaScript 信息流广告 质量要求高 业务响应快 故障恢复快 物料展现 Python 审核平台 大数据平台 代理商 基础架构 广告主 品牌广告
  • 5.商业云平台 BizCloud 搜狗商业平台业务系统 SaaS 搜索推广 信息流 搜狗商业平台基础平台 账户 品牌 物料 CI&&CD 计费 模板管理 管理界面 PaaS BizNginx (Load Balancer) 统一服 务管理 统一配 置中心 Kafka 自动化测试 编 译 测 试 SOA服务框架 Zookeeper etcd 项目 管理 部署中心 DevOps 服务发现 发 布 AppEngine(Resin/Tomcat…) 灰度发布 IaaS Kubernetes Node Cluster1 Node Node Cluster2 监控中心 Node Registry 日志系统 授 权 监 控
  • 6.有状态服务的需求越来越多 问题 • 弹性伸缩能力不足 • 机器资源利用率不高 • 服务管理复杂 有状态服务容器化
  • 7.1. 背景介绍 2. Operator 的基本原理 3. MySQL Operator 设计实践 4. 小结
  • 8.带来的新挑战 无状态服务 有状态服务 有状态服务集群 服务调度 服务调度 状态保存 服务调度 状态保存 集群管理
  • 9.站在 Kubernetes 的肩膀上 Deployment StatefulSet 服务调度 状态存储 集群管理 PV/PVC StorageClass 成员管理 扩缩容 故障迁移 ?? CoreOS 提出了 operator 高可用
  • 10.Operator 是什么 An Operator is an application-specific controller that extends the Kubernetes API to create, configure and manage instances of complex stateful applications on behalf of a Kubernetes user. operator 是特殊的 controller,用来管理复杂的分布式应用 ü custom resource definition(CRD) ü custom controller
  • 11.CRD 的基本原理 • Kubernetes 中一切都可视为资源 • 默认资源类型:如 Pod、Service、Volume 等 • Kubernetes 1.7 之后增加了 CRD 自定义资源 • 二次开发扩展 Kubernetes API
  • 12.Controller 的基本原理 ① 观察资源的当前状态 ② 分析当前状态与期望状态的差别 ③ 调用 API 消除差别 申请扩容 TestCluster app=test 期望副本数:3 当前副本数:1 VS app=test 增加2个副本 app=test 当前副本数:3
  • 13.1. 背景介绍 2. Operator 的基本原理 3. MySQL Operator 设计实践 4. 小结
  • 14.MySQL 容器化目标 • 快速部署 MySQL 主从集群 • 支持 MySQL 集群高可用 • 支持 MySQL 集群弹性伸缩 • 支持 MySQL 5.5 & 5.7 Master Slave1 Slave2 MySQL 集群:1 主 2 从
  • 15.MySQL 容器化系统架构 Kubernetes Master 0. 创建 CRD REST API Server Controller Manager CLI Scheduler 3. 集群管理 mysql pod-0 mysql pod-1 …… kubelet mysql pod-N mysql Pod-T mysql pod-5 kube-proxy mysql pod-6 …… mysql pod-M Mysql Operator pod kube-proxy kubelet docker Node1 2. 调度 pod docker …… NodeM Ceph NodeN
  • 16.MySQL-Operator 主流程 API Server List/Watch - CRD - Pod Reflector DeltaFIFO Write Local Storage Callbacks OnAdd OnUpdate OnDelete WorkQueue ReadOnly Informer Operator • Informer:监听事件并触发回调函数的二级缓存工具包 • WorkQueue:事件合并、过滤、延时、限速 Worker
  • 17.CRD 里有什么 MySQL CRD • Spec:配置 & 期望状态 • Status:当前状态 MySQL 配置 集群配置 K8s 调度信息 • 版本 • 副本数 • 资源套餐 • 端口 • 高可用模式 • 亲和性信息 • 存储信息 • 配置文件 • NodeSelector
  • 18.使用 CRD 1. 创建 CRDapiVersion:apiextensions.k8s.io/v1beta1kind:'>kind: