一、K8S的历史

K8S源自于goole的brog系统,采用GO语言开发,他的特点有:

1、开源

2、轻量级:消耗的资源少

3、弹性伸缩:可以扩展或减少节点,平缓收缩,不需要重启服务器

4、负载均衡:负载均衡采用的IPVS框架

二、K8S前身,brog系统组件介绍

k8s云原生开发 k8s 开源协议_K8S

三、K8S基础架构图

k8s云原生开发 k8s 开源协议_负载均衡_02

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规则.