“一切以服务为中心”
作为指导思想,也就是Service
,那么由谁来提供Service呢?由Pod
对象,又通过Label
标签来为Service和Pod建立关联;Pod运行在Node
上,那么Pod又是怎么产生的呢?可以直接定义创建,也可由RC(Replication Controller)
文件创建。是集群控制节点,每个K8S集群中都需要一个Master节点来负责整个集群的管理和控制,它是整个集群的“首脑”,运行着三个关键进程:
1.kube-apiserver
提供API,是所有资源增、删、改、查等操作的唯一入口,也是集群控制的入口进程
2.kube-controller-manager
所有资源对象的自动化控制中心,好比资源对象的“大总管”
3.kube-scheduler
负责资源调度(Pod)的进程,相当于公交公司的“调度室”
etcd Server
进程,用于保存K8S里所有资源对象的数据除了Master,K8S集群中的其他机器被称为Node节点,它是集群中的工作负载节点,是真正干活的。它有以下一组关键进程:
1.kubelet
负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能
2.kube-proxy
实现K8S Service的通信与负载均衡机制的重要组件
3.Docker Engine
负责本机的容器创建和管理工作
Node
节点可以在运行期间动态增加到K8S集群中,默认情况下kubelet
会向Master
注册自己,一旦Node被纳入集群管理范围,kubelet进程就会定时向Master节点汇报自身的情况,如操作系统、Docker版本、机器的CPU和内存情况,以及之前有哪些Pod在运行。而当某个Node超时不上报信息,就会被Master判定为“失联”
,Node的状态被标记为不可用(Not Ready)
,随后Master会触发“工作负载大转移”
的自动流程。Pod是管理,创建,计划的最小单元。
每个Pod都有一个特殊的“根容器”Pause容器
,Pod里的多个业务容器共享Pause容器的IP和Volume,简化了业务容器之间的通信问题和文件共享问题。
Kubernetes为每个Pod分配了唯一的IP地址,称之为Pod IP
;采用虚拟二层网络技术Flannel、Openvswitch
实现任意两个Pod之间的TCP/IP直接通信。
Pod里的服务进程通过Endpoint(PodIP+containerPort)
对外提供服务。
Pod可以对其能使用的服务器上的计算资源设置限额。以千分之一的CPU配额为最小单元,用m表示。通常一个容器的CPU配额100~300m,即占用0.1~0.3个CPU。CPU配额是一个绝对值,跟服务器CPU的个数无关。
内存的配额也是绝对值,用Mi表示。
Pod有两种类型:
1.普通Pod
一旦创建,被放入到etcd
中存储,随后被调度到某个具体的Node上进行绑定,并被kubelet进程实例化成一组相关的Docker容器并启动起来。当Pod中的某个容器停止时,K8s会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。
2.静态Pod
不存放在K8s的etcd存储里,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动运行。
一对 key/value ,被关联到对象上,比如Pod。标签可以用来划分特定组的对象(比如,所有女的),标签可以在创建一个对象的时候直接给与,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的。
Replication Controller 保证了在所有时间内,都有特定数量的Pod副本正在运行,如果太多了,Replication Controller就杀死几个,如果太少了,Replication Controller会新建几个,和直接创建的pod不同的是,Replication Controller会替换掉那些删除的或者被终止的pod。
只创建一个pod,也要使用Replication Controller。Replication Controller 就像一个进程管理器,监管着不同node上的多个pod,而不是单单监控一个node上的pod。
为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。
K8S中的Service就是我们经常提起的微服务架构中的一个“微服务”。
K8S为每个Service都分配一个全局唯一的虚拟IP—Cluster IP,并通过DNS做了一个Name与Service的域名映射。
1.三个IP
Node节点的IP地址。是物理网卡的IP地址,是一个真实存在的物理网络。
它是Docker Engine根据docker0网桥的IP地址段进行分配的,不同Node里面的Pod通过虚拟二层网络进行互相通信。
是Pod中能够被多个容器访问的共享目录。
Volume与Pod的生命周期相同,但与容器的生命周期不相关,当容器终止或者重启时,Volume中的数据也不丢失。
命名空间在很多情况下用于实现多租户的资源隔离。
K8S集群在启动后会创建一个名为“default”
的NameSpace。