Part I:Kubernetes Basics
需要一个系统去统一管理(编排)我的容器
- 通过声明式的配置去完成各种自动化操作,也提供了自动发现,负载均衡等功能
整体架构
Control Plane
- kube-apiserver 对外提供整个集群的API
- etcd 一个高可用的高一致的的 key value store
- kube-scheduler 用于调度
- kube-controller-manager 包含了一组controller
Nodes
- kubelet 类似一个agent起在每个节点上,与container交互完成生命周期管理
- kube-proxy 维护网络规则
- Container Runtime 各个节点上管理容器的进程
Kubernetes Concepts
-
Pod 集群调度的最基本单位
- 一组container的集合
- 在一个Pod中可以部署一个或多个container
-
Service 为后端的Pod提供负载均衡的功能
- ClusterIP
- NodePort
- LoadBalancer
- ExternaName
-
PV & PVC
-
Workload
- Deployment 主要用于无状态的服务
- 通过Pod和ReplicSets来提供一种声明式的部署方式
- StatefulSets 主要用于有状态的服务
- 提供稳定唯一的网络定义
- 提供稳定持久的存储
- 提供有序的部署和扩/缩容
- 有序的自动化的去罗列updates
- DaemonSet
- Jobs
- CronJob
- Deployment 主要用于无状态的服务
-
Controllers
Part II:TiDB Operator Principles
- 比较方便的部署
- 水平扩/缩容
- 滚动升级
- 多集群的支持
- 自动故障转移
- 监控
Custom Resource Definition(CRD)
TiDB Operator 架构
TiDB Controller Manager
tidb-controller-manage连续地使期望状态和实际状态产生差异。
如果状态不匹配,controller-manager会触发动作以达到到所需的状态。
工作过程:
TiDB Scheduler
需要配置schedulerName为tidb-scheduler
PD/TiKV/TiDB都有自己的调度策略
Part III:Deploy TiDB Operator
- 创建安装CRD
- 获取tidb-operator的values.yaml
- 编辑values.yaml
- 安装tidb-operator
- 通过 kubectl get po -n tidb-admin来查询pod是否已经running&ready
- 升级:先升级yaml,再通过这各yaml来升级tidb-operator
Part IV:Deploy TiDB Clusters
- 配置CRD
- 配置TiDB集群CR
- 应用该CR过程:
- 启动一个TiDB Discovery服务 - 用于PD的动态启动
- 随机给其中一个PD进行初始化,然后把其他的PD加入集群
- 为组件分别创建StatefulSet
- 依据TiDB配置生成config map然后再挂载至Pod中
- 查看
- kubectl get service status
- 访问
- kebectl port-forward svc/basic-tidb 4000:4000