目录
简单来讲Kubernetes是让应用构建成为容器(镜像)之后在基于镜像,以容器化的方式运行容器编排容器,来让应用之间正常通信来管理容器之间的关系的,容器管理系统
1、你有一堆容器。每个容器都有docker的容器引擎,他们都能以容器化的方式运行应用,当应用不存在的时候他能自动的docker hadoop上下载拉去镜像,这些都是管理员自己解决解决问题,KUbernetes的作用是在当前容器应用中,根据某种算法选出性能最好更适合他的节点把应用运行在这个节点上,至于创建和启动K8s是不管的,这些问题都会交给docker
2、当这个容器stop了,他就会把这个容器调到别的节点上,而储存都会在外部的共享储存上,当你换机器够只要外部储存能连接上当前节点就可以保存数据不变。而k8s要知道到有哪些存储可用,以及当前的调度结果,从而驱动着存储服务进行调度对接,为容器提供存储空间
3 、因为调度节点ip等不同,还需要在上面做一个虚拟网段出来,无论容器调到那个机器都会在同一个网段或者网络当中
Kubernetes既不负责创运行容器,也不负责创建存储空间(存储空间是管理员在外部提供的),也不负责创建存储空间,这些都是有管理员额外选定后由第三方组件来实现但是他们都得接收Kubernetes的指挥
因此Kubernetes是个编排平台,很多核心功能都是由第三方平台提供,很多功能他只是对接别人的平台实现,他就是自己做成个框架,做成个标准,做成个机制,具体实现交给第三方平台
大概分为一下几个步骤
1、容器编排; Image --> App Container “是以应用为中心的编排平台”
2、 面向平台的平台:支持强大的扩展能力:构建其它的平台
3、他主要完成容器生命周期管理和关系管理
3.1,生命周期管理
容器编排: 器生命周期管理。容器创建、运行、监控、终止。
为容器运行提供支撑: 存储卷:卷编排。网络:网络编排
3.,2,容器关系管理 Pod
超亲密关系:运行一个整体的超亲密关系的容器为Pod,Kubernetes抽象出来的新概念Pod
非超亲密关系:各自独立运行
K8s的节点就两类由Master和Worker两类节点组成 也可以看成M/S结构的
Master为了实现这种架构会在每个Worker上安装一个应用程序,每个Worker上的程序都会和Master实时交互,并且执行Master的命令 ,每个Worker上的应用叫做集群代理程序
Pod简单理解就是在容器外部加了一成壳,其实在节点上看到的还是容器,但是K8s管理的是Pod,不是容器 Pod有另外一个名字叫容器集,可以把多个容器(超亲密)才一个Pod里运行。Pod只是个概念你看到的还是容器,本质上是为了更好地运行管理容器。本质上是共享Network、IPC和UTS名称空间以及存储资源的容器集
Worker(简称Node)

每个节点上都应该有两个,一个Kubelet,一个Kube-proxy
而主节点也是有三个组成API Server,scheduler,controller manager
Master基础组件
API Server:提供了k8s各类资源对象 以API形式对外提供服务,服务器程序,监听在某个套接字上;是整个系统的数据总线和数据中心
scheduler:调度器,负责为那些未能绑定到某节点的Pod,挑选一个最适配的Worker来运行它;只会从API接收指令;
controller: 他们的职责是保证集群中各种资源的状态和用户定义(yaml)的状态一致, 如果出现偏差, 则修正资源的状态. 除调度之外的编排决策,几乎都由Controller负责形式
工作负载型COntroller 应用程序的
生命周期管理 部署、启动、健康状态监控、重启、重建、销毁
controller manager :是各种controller的集合 管理者,是集群内部的管理控制中心
第三方 etcd: 是一个高度一致的分布式键值通用存储
在这里只能存Kubernetes所支持的数据模式,由API Server进行定义和抽象
默认使用json格式 被称为资源类型 --> 实例化之后的结果,称为资源对象,存储在etcd中
PV/PVC: Volume控制器
Deployment:编排无状态应用
StatefulSet:编排有状态应用 ······kubelel 三个标准接口
CRI 容器运行时接口
Volume(CSI)容器存储接口
CNI 容器网络接口
Node基础组件
Kubelet :是 kubernetes 工作节点上的一个代理组件,群代理程序,负责控制平面事关Pod运行的各种决策 ,向kube-apiserver汇报主机的运行状况。
Kube-proxy: 是 kubernetes 工作节点上的一个网络代理组件,运行在每个节点上。 Kube-proxy维护节点上的网络规则,实现了Kubernetes Service 概念的一部分 。它的作用是使发往 Service 的流量(通过ClusterIP和端口)负载均衡到正确的后端Pod。
- iptables模式:将Service资源的定义转为适配当前节点视角的iptables规则
- ipvs模式:将Service资源的定义转为适配当前节点视角的ipvs和少量iptables规则
是打通Pod网络在Service网络的关键所在
负责扩展Kubernetes集群的功能的应用程序,通常以Pod形式托管运行于Kubernetes集群之上
必选插件 他算不上插件,他是必选的,可以说没有他是运行不起来的,但是他可以用插件的的方式运行
重要插件
Service使用标签选择器(Label Selector)筛选并匹配Pod对象上的标签(Label),从而发现Pod
仅具有符合其标签选择器筛选条件的标签的Pod才可由Service对象作为后端端点使用
客户端 -->访问标签选择器中间层的ip(固定)-->通过标签选择器来过滤到需要的把ip取出来返回去,挂了也会移除换成好的(就是有健康状态选择机制的标签选择器) 在K8s上就叫 Service,CoreDNS会自动的给Service相关服务分配个主机名。他这个负载均衡事实并上不存在,他是软件逻辑,事实上是有 Kube-Proxy来实现
API Server 老板指挥司机controller干活,Kubelet (健康检测程序)
申明式API: 面向对象 指挥司机
命令式API: 面向过程 指挥汽车
Pod是运行应用的原子单元,其生命周期管理和健康状态监测由kubelet负责完成,而诸如更新、扩缩容和重建等应用编排功能需要由专用的控制器实现,这类控制器即工作负载型控制器
ReplicaSet和Deployment #无状态控制器 和节点Pod没关系
DaemonSet #系统级应用,每个节点运行一个
StatefulSet #有状态控制器 和节点Pod没关系
Job和CronJob # Job作业性。不持久 CronJob周期性作业
工作负载型控制器:
核心功能:按照用户期望的副本数量,创建并运行Pod
deployment --> nginx 运行谁
replicas: 3 数量
emplate: Pod模板 没有基于模板创建
label selector --> label 多了删除,通过标签关联,避免删错
部署应用

Kubernetes集群上会存在三个分别用于节点、Pod和Service的网络
节点网络
Pod网络
Service网络
Kubernetes网络中主要存在4种类型的通信流量
Pod网络需要借助于第三方兼容CNI规范的网络插件完成,这些插件需要满足以下功能要求