刘林 Kubernetes+Operator+实践:MySQL容器化

2020-02-27 1153浏览

  • 1.Kubernetes Operator 实践 —— MySQL 容器化 刘林 搜狗资深工程师
  • 2.关于我 刘林 搜狗商业平台研发部 资深开发工程师 l 主要从事商业平台研发工作,在构建高性能、高可用大规模 系统方面有丰富的实践经验 l 目前专注于云计算、DevOps 等相关领域,负责搜狗商业云 平台的设计研发工作
  • 3.1. 背景介绍 2. Operator 的基本原理 3. MySQL Operator 设计实践 4. 小结
  • 4.技术体系广 服务多迭代快 质量要求高 业务响应快 故障恢复快 搜狗商业平台 Java 技术体系 商业平台 CRM C++ 搜索广告 广告平台 物料展现 信息流广告 搜狗产品矩阵 Golang JavaScript Python 审核平台 大数据平台 代理商 基础架构 品牌广告 广告主
  • 5.商业云平台 BizCloud SaaS 搜狗商业平台业务系统 搜索推广 信息流 品牌 搜狗商业平台基础平台 账户 物料 计费 PaaS 管理界面 统一服 统一配 务管理 置中心 BizNginx (Load Balancer) SOA服务框架 Kafka Zookeeper etcd AppEngine(Resin/Tomcat…) 项目 管理 DevOps IaaS Kubernetes Node Node Cluster1 Node Node Cluster2 Registry CI&&CD 编 译 模板管理 测 自动化测试 试 部署中心 发 布 服务发现 灰度发布 授 权 监控中心 监 日志系统 控
  • 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 容器化系统架构 REST CLI 0. 创建 CRD Kubernetes Master API Server Controller Manager Scheduler 3. 集群管理 2. 调度 pod mysql pod-0 mysql pod-1 …… mysql pod-N kubelet kube-proxy docker Node1 mysql Pod-T mysql pod-5 mysql pod-6 …… mysql pod-M …… Ceph kubelet kube-proxy docker NodeM Mysql Operator pod NodeN
  • 16.MySQL-Operator 主流程 API Server List/Watch - CRD - Pod Reflector DeltaFIFO Write Callbacks OnAdd OnUpdate OnDelete WorkQueue Local Storage ReadOnly Worker Informer Operator • Informer:监听事件并触发回调函数的二级缓存工具包 • WorkQueue:事件合并、过滤、延时、限速
  • 17.CRD 里有什么 MySQL CRD • Spec:配置 & 期望状态 • Status:当前状态 MySQL 配置 • 版本 • 端口 • 存储信息 • 配置文件 集群配置 • 副本数 • 高可用模式 K8s 调度信息 • 资源套餐 • 亲和性信息 • NodeSelector
  • 18.使用 CRD 1. 创建 CRDapiVersion:apiextensions.k8s.io/v1beta1kind:'>kind: