云原生三驾马车之Kubernetes探析
什么是云原生?
云原生就是面向云环境的,从设计层面支持自动伸缩容,资源控制和支持统一服务注册/发现的应用。
第一驾马车:Kubernetes核心组件介绍
Kubernetes和云原生的联系
在云原生领域,行业最佳实践一直将服务器作为一种商品。其思想是, 没有哪一台服务器是独一无二、不可或缺或不可替换的。任何一个部 件都可以被悄无声息的取下并替换。如果一台服务器宕了,那没什么问题,另换一台就是了。
Kubernetes架构图
API Server 核心组件。对外公开 Kubernetes API
Etcd 持久化所有的数据内容
Scheduler 负责监视新创建的、未指定运行节 点(node)的 Pods,选择Pod运行节点
Controller-Manager 管理所有的 控制器
Kubelet 每个Node上运行的代理,保证 容器运行在指定节点中
Kubernetes实现服务编排的奥秘
服务编排通俗的说就是将一个服务在合适的时间放在一个合适的地方,让其按照规划的方式运行。--- 这就是服务编排
核心概念
一组(一个或多个) 容器
共享存储、网络、以及怎样运行这些容器的声明
Pod是可以创建和管理的、最小单位可部署的计算 单元
被某种工作负载或者控制器管理
工作负载类型
Deployment 集群上的无状态应用
StatefulSet 通过一个或者多个以某种方式 跟踪状态的应用,用于有状态应用
Daemonset 本地节点常驻运行的应用
Job/CronJob 定时创建可以一直运行到结束 并停止的无状态应用
Services 一组相同Pods构成的网络组
Deployment 是保证其管理的Pod数量永远符合用户的期望
用户期望拥有三个运行 nodejs 的pod, Deployment会时刻监控pod状态,当出现数量不足时,会自动补齐
服务编排的过程
List Watch
集群控制模块最核心的设计
采用统一的异步消息处理机制,保证了消 息的实时性、可靠性、顺序性和性能
List Watch关键设计
基于chunk的消息通知
2.本地缓存 & 本地索引
3.无界队列 & 事件去重
4.基于观察者模式的注册
Kubernetes落地最佳实践
SideCar 只设置辅助类的工具、SideCar 不要用于Init初始化
单集群高可用性
Kubernetes In Kubernetes
K8S多可用区建设
通过K8s on K8s实现多个集群托管
通过外部LB进行流量控制
单集群高可用是基础,然后在规划多可用区
K8s on K8s是一套‘自举’托管方案,可以增加集群水平扩展性。