概述
本质
脱胎于Google内部大规模容器管理技术Borg,从运维角度来看,K8S本身就是一种集群,通过整合多台服务器资源为资源池,并同意对外提供计算,存储,网络等能力的集群
K8S 特性
- 自动容器依赖
- 自动修复
- 水平扩展
- 服务发现
- 负载均衡
- 自动发布
- 自动回滚
- 密码密钥管理
- 配置管理
- 存储编排
- 任务批处理
- ...
K8S 架构
K8S是有中心节点的架构,架构分为Master/Node两种类型节点
- Master/Node:
- Master: 集群管理节点,处理用户请求,调度器分析可用资源,选择合适的Node运行容器,controller控制资源状态向期望的状态转移
- Node: 工作节点,负责运行具体服务Pod
K8S 核心组件
- Master:
- APIServer: 接收处理客户端、内部组件请求(kubelet、kube-proxy)
- Scheduler: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。第一步,预选,根据Node上可用资源(RAM、存储),选择符合Pods运行需求的。第二步,优选,最佳适配,根据调度算法中的优选算法决定
- Controller-Manager: 负责监控管理控制器,例如,ReplicaSet、Deployment、DaemonSet等等控制器的可用状态,而控制器负责管理Pods等资源是否处于期望状态,如果不是,则通知APIServer向预期状态转移。
- Node:
- kubelet: 负责维护Pods的生命周期,增删启停,同时也负责Volume(CSI)和网络(CNI)的管理;
- kube-proxy: 负责Service管理,通过监控APIServer的Service资源变化情况,创建或修改删除Service,利用iptables或者ipvs规则,提供外部访问或Cluster内部的服务发现、负载均衡;
Add-ons:
- kube-dns: 负责为整个集群提供DNS服务
- ingress-controller: 通过配置一组规则对服务的入站连接做7层请求处理,例如,虚拟主机,负载均衡,解包SSL等等
- heapster: 提供资源监控
- dashboard: Web管理界面
- federation: 跨可用区的集群
ETCD: 存储集群元数据信息
- Flannel: 负责集群网络连通性
K8S 架构图
高度抽象版
整体
Master
Node