Kubernets是什么
- 基于容器技术的分布式架构方案。
- 开放的开发平台。
- 完备的分布式支撑平台。
Master
Master指的是集群控制节点,每个k8s集群里需要有一个Master节点来负责整个集群的管理和控制,基本上k8s的所有控制命令都发给它,它来负责具体的执行过程。为了实现高可用,部署多个Master,Master节点上运行着以下一组关键进程。
Kubernets API Server:提供了HTTP Rest接口的关键服务进程,是Kubernets里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。
Kubernets Controller Manager:Kubernets里所有资源对象的自动化控制中心,管理集群的所有资源。
Kubernets Scheduler:负责资源调度的进程。
另外,Master节点上还需要启动一个etcd服务,Kubernets里的所有资源对象的数据全部保存在ectd。
Node
除了Master,Kubernets集群中的其他机器被称为Node节点,Node节点可以是虚拟机也可以是物理机。Node节点是集群中工作负载节点,当某个Node宕机后,其上的工作负载会自动转移到其他节点上。
每个Node都有以下关键进程。
kubelet:复杂Pod对应的容器的创建,启动,停止等任务,同时与Master协作,实现集群管理的功能。
kube-proxy:实现Kubernets Service的通信于负载均衡机制。
Docker Engine:DOcker引擎。
Pod
Pod是k8s中最重要也是最基本的概念,每个Pod内包含一个特殊的根容器(Pause容器),Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器外,每个Pod还包含至少一个或多个用户业务容器。Pod的设计理念,(当你想包含一个已经存在的东西,你得弄出一个比已有东西更大概念)。Pod里面多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,Pod分为俩类,普通Pod和静态Pod,静态Pod不存放在k8s的ectd中存储,而是存放在本地Node的文件中,因此只能在本Node内存在。
Label
Label是k8s系统中另外一个概念,一个Label是一个key-val的键值对,Label可以附加到任何资源对象上。给某个资源对象定一个Label就相当于给它打了一个标签,随后可以通过Label Selector查询和筛选拥有某些Label的资源对象。
1.kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本的数量。
2.kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service到对应Pod的请求转发路由表,从而实现Service的负载均衡。
3.通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler 可以实现Pod定向调度的特性。
Replication Controller
RC定义了Pod的副本数量在任意时刻都符合某个预定值,所以RC的内容如下。
1.Pod期待的副本数。
2.用户筛选目标Pod的Label Selector
3.当Pod的副本数量小于预期数时,创建新Pod的模板。
Deployment
引入Deployment是为了解决Pod的编排问题。Deployment相对于RC的最大一个升级就是我们可以随时知道部署的进度。
Horizontal Pod AutoScaler
HPA为对应用自定义指标进行自动扩容和缩容的功能进行增强。它是k8s内的一种资源对象,通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数。
1.CPU 使用率百分比
2.应用程序自定义指标,比如TPS,QPS。
StatefulSet
在k8s中,Pod的管理对象RC,Deployment,DaemonSet和Job都是面向无状态的服务,但现实中有很多服务是有状态的,特别是一些中间件集群,如MySQL,ZK。它们每个节点都有自己的身份ID,集群规模固定。
Service
k8s里面每个Service其实就是微服务架构中的一个微服务,它定义了一个服务的访问入口地址,前端应用通过这个入口地址访问其背后一组由Pod副本组成的集群实例,Service与其后端Pod副本集群之间则是通过Label Selector来实现无缝对接,而RC的作用实际上保证Service的服务能力和服务质量始终处于预期的标准。
IP
k8s集群内存在三种IP。
1.Node IP,物理机的IP。
2.Pod IP,Pod的IP地址。它是Docker Engine根据Docker0网桥来分配的。
3.Cluster IP:Service IP地址。Cluster IP是一个虚拟IP,但更像是一个伪造的IP,
3.1.Cluster IP仅仅作用于Kubernets Service这个对象,并由Kubernetes管理和分配IP地址。
3.2.Cluster IP无法被ping,因为不存在网络实体来响应(Ping 协议是网络层协议)
3.3.Cluster IP只能结合Service Port 组成一个具体的通信端口。
3.4.在Kubernets集群之内,Node IP网,Pod IP于Cluster IP之间的通信采用K8s自己设计的一种特殊的路由规则。
Volume
Volume中文名为存储卷,它是Pod中能被多个容器共享的目录。它的生命周期和Pod相关,k8s支持多种存储卷,如GlusterFS,Ceph等先进的分布式文件系统。
Namespace
Namespace用于实现多租户的资源隔离。Namespace通过将集群内部的资源对象分配到不同的Namespace中,形成逻辑上分组的不同项目或用户组,便于不同的分组在共享使用整个集群的资源同时还能被分别管理。
Annotation
Annotation与Label类似,也使用key-val的形式,不同的是Label有严格命名规则,它定义K8s对象的元数据,而Annotation则是用户任意定义的附加信息,以便于外部工具进行查找。