简介:
两个核心角色:
主要负责整个集群的管理控制。
通常Master会占用一台独立的服务器,基于高可用原因,也有可能是多台。
组成:
为Kubernetes中各类资源对象提供了增删改查等HTTP REST接口。
于资源的任何操作,都需要经过API Server进程来处理。
访问API Server进程的3种方式:
Kubernetes的“数据库”。
一种轻量级的分布式键值存储。
可以在单台Master服务器上配置,也可以配置到多台服务器。
保存集群中所有的配置和各个对象的状态信息
只有API Server进程才能直接访问和操作etcd。
kube-scheduler是Pod资源的调度器。
监听最近创建但还未分配Node的Pod资源,会为Pod自动分配相应的Node。
一个实例的运作原理:
Pod:Kubernetes的最小可操作单元,一个Pod包含一个或多个容器。
大部分功能是由控制器执行的。
为了方便使用和学习,控制器由多个功能模块组合到一起,合成一个进程。
这些功能模块原本应该是各个独立的进程。
功能模块:
Endpoint:用于监听Service和对应的Pod副本的变化。
kube-controller-manager所执行的各项操作也是基于API Server进程。
Kubernetes集群中的各个工作节点。
Node由Master管理,提供运行容器所需的各种环境,对容器进行实际的控制,而这些容器会提供实际的应用服务。
组成:
每个Node上都运行的主要代理进程。
kubelet负责维护容器的生命周期。
也负责存储卷(volume)等资源的管理。
以PodSpec为单位来运行任务。
kubelet会定期向API Server进程报告自身状态,API Server进程将状态更新到etcd中。
PodSpec是一种描述Pod的YAML或JSON对象。
不是Kubernetes创建的容器将不属于kubelet的管理范围。
主要用于管理Service的访问入口。
负责运行容器的软件。
Kubernetes支持多种运行时,例如:
任何基于Kubernetes CRI(容器运行时接口)的实现都支持
虽然底层为容器。
为了屏蔽底层的技术细节,
Kubernetes抽象出各种对象实例(概念),
用户操作对象实例,便可以操控容器。
Kubernetes处理的最基本单元。
容器本身并不会直接分配到主机上,而是会封装到名为Pod的对象中。
特性:
注意:用户不应自行管理Pod,因为Pod并没有提供应用程序通常会用到的一些特性,如复杂的生命周期管理及动态伸缩。
Pod由控制器来管理。
在控制器中定义Pod的部署方式(如有多少个副本、需要在哪种Node上运行等)。
根据不同的业务场景,Kubernetes提供了多种控制器:
ReplicationController和ReplicaSet控制器功能类似。
相同功能:
ReplicationController更多的功能:
ReplicaSet更多的功能:
都没有的功能:
基于ReplicaSet控制器。
有部分功能和ReplicationController相似。
最常用的工作负载对象之一。
优势:
Deployment控制器可能是使用频率最高的对象。
提供了排序和唯一性保证的特殊Pod控制器。
部署顺序、持久数据或固定网络等相关的特殊需求时使用。
可以通过Pod转移持久性数据卷。即使删除了Pod,这些卷也依然存在,以防止数据意外丢失。
虽然各个Pod的定义是一样的,但是因为其数据的不同,所以提供的服务是有差异的。
主要用于有状态的应用(例如,数据库)。
在集群的各个节点上运行单一的Pod副本。
非常适合部署那些为节点本身提供服务或执行维护的Pod。
用于提供基本服务的,并且每个节点都需要。
可以绕过某些用于阻止控制器将Pod分配给某些主机的调度限制。
例如:原本Master服务器不可用于常规的Pod调度,但DaemonSet控制器可以越过基于Pod的限制,确保基础服务的运行。
Job控制器:
CronJob控制器:
Service组件:
当需要给另一个应用程序或外部用户提供某些Pod的访问权限时,就可以配置一个Service组件。
Ingress:
通过同一域名或IP地址下不同的路径来访问不同的Service组件。
存储卷(volume):
持久存储卷(persistent volume):
持久存储卷的Pod一旦使用完毕,存储卷的回收策略将决定是保留存储卷(直到手动删除),还是立即删除数据。
对Kubernetes集群资源进行划分。
实现多租户的资源隔离。
逻辑划分
标签(label):一种语义化标记。
附加到Kubernetes对象上,对它们进行标记或划分。
针对不同的实例进行管理或路由,可以用标签来进行选择。
每种基于控制器的对象都可以使用标签来识别需要操作的Pod。
Service组件也可以使用标签来确定应该将请求路由到哪些后端Pod。
每个单元可以拥有多个标签。
每个单元对于每个键只能拥有一个值。
键值对形式。标签的使用更像是对资源进行划分细类。
注解(annotation)也是一种类似的机制。
将任意键值信息附加到某一对象中。
可以包含少量结构化数据。
向对象添加更多元数据的一种方式,但并不用于筛选。