一、K8S的历史
K8S源自于goole的brog系统,采用GO语言开发,他的特点有:
1、开源
2、轻量级:消耗的资源少
3、弹性伸缩:可以扩展或减少节点,平缓收缩,不需要重启服务器
4、负载均衡:负载均衡采用的IPVS框架
二、K8S前身,brog系统组件介绍
三、K8S基础架构图
api server:所有服务访问的统一入口
CrontrollerManager:维持副本期望数目
Scheduler:负责介绍任务,选择合适的节点进行分配任务
ETCD:键值对数据库,储存K8S集群所有的重要信息(持久化)
Kubelet:直接跟容器(docker)引擎交互实现容器的生命周期管理
Kube-proxy:负责写入规则至IPTABLES、IPVS,实现服务映射访问
COREDNS:可以为集群中的SVC创建一个域名IP的对呀关系解析
DASHBOARD:给K8S集群提供一个B/S结果访问体系
INGRESS CONTROLLER:官方只能实现四层代理,INGRESS可以实现7层代理
FEDERATION:提供一个可以跨集群中心多K8S统一管理功能
PROMETHEUS:提供K8S集群的监控能力
ELK:提供K8S集群日志统一分析介入平台
三、Pod的概念
1、什么是pod
pod分为自主式pod,和控制器管理的pod;
1、pod只要有一个容器,就会自动生成一个pause容器,而pod里的其它容器没有自己的IP,他们共享pause的网络和存储卷,所以每一个pod里的容器端口不能重复
控制器有多种:
1、replicationController 简称RC:用来确保容器应有的副本数始终保持在用户定义的副本数,即有容器异常退出,会自动创建新的Pod来代替,如果有多余的容器,多出来的容器也会自动回收。
2、ReplicaSet简称RS,和RC的功效相同,并且RS支持集合式的selector.新版本用RS代替RC。
3、Deployment,用来自动管理RS的,deployment无需担心与其它机制不兼容的问题,并且可以实现滚动更新,并且可以实现回滚。deployment并不创建pod,是管理RS的,pod是RS创建的。
4、HPA,仅使用与deployment 和RS,用来平滑扩展。HPA会监控资源利用率,当CPU大于80,就进行扩展,最小2个,最多10个,直到CPU小于80。同样,当CPU小于80,如果有多余的Pod,也会自动删除一些pod。
5、StatefulSet:为了解决有状态服务的问题(如mysql,必须实时跟踪数据),docker主要解决无状态服务(如apche,负载均衡调度器)。主要应用场景包括:
(1)、稳定的持久化存储:即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
(2)、稳定的网络标志:即Pod重新调度后其PodName和HomeName不变,基于HeadLess Service来实现
(3)、有序部署,有序扩展,即Pod是有顺序的,在部署或扩展的时候要依据定义的顺序依次启动。
6、DaemonSet:当有Npde加入集群时,会为他们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet会删除它创建的Pod
用处:如在node上允许日志收集daemon,运行监控daemon.
7、Job负责批处理任务,仅执行一次的任务,能批量处理任务的一个或多个Pod成功接收。
2、服务发现
service收集Pod是通过标签收集的,中间通过轮询访问。
四、网络通信模式
KOS认为所有Pod都在一个可以直接连通的扁平的网络空间中。
同一个pod中的各容器,因为共享pause网络,可以直接访问
不同pod之间通讯,用OverLay Network
Pod与service 之间的通信,靠各节点的Iptables规则.