Kubernetes
一个基于容器技术的分布式架构,目的是实现资源管理的自动化以及跨多个数据中心的资源利用最大化。
基本概念
Service(服务)是分布式集群架构的核心
一个Service对象拥有如下关键特征:
- 拥有一个唯一指定的名字
- 拥有一个虚拟IP和端口号
- 能够提供某种远程服务能力
- 被映射到了提供这种服务能力的一组容器应用上
RC(Replication Controller):便于后来的Service升级和扩容
一个RC文件包括以下关键信息:
- 目标Pod的定义
- 目标Pod需要运行的副本数量(EPlicas)
- 要监控的目标Pod的标签(Label)
微服务架构:将一个巨大的单体应用分解为很多小的互相连接的微服务。s
Node(节点)是Kubernetes集群中相对于Master而言的工作主机。
Node的信息如下:
- Node地址:主机的IP地址,或者Node ID
- Node运行状态:包括Pending、Running、Terminated三种状态
- Node Condition(条件):描述Running状态Node的运行条件,目前只有一种条件-Ready。Ready表示Node处于健康状态,可以接受Master发来的创建Pod的指令。
- Node系统容量:描述Node可用的系统资源,包括CPU、内存容量、最大可调度Pod数量等。
- 其他:Node的其他信息,包括实例的内核版本号、Kubernetes版本号、Docker版本号、操作系统名称等。
Pod(豌豆荚)是Kubernetes的最基本操作单元,包含一个或者多个紧密相关的容器。
设计缘由:简化Docker中容器间的通信问题
一个Pod中的应用容器共享同一组资源,如下所述:
- PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID
- 网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围
- IPC命名空间:Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信
- UTS命名空间:Pod中的多个容器共享一个主机名
- Volumes(共享存储卷):Pod中的各个容器可以访问在Pod级别定义的Volumes
Pod有如下四种状态:
- Pending:Pod定义正确,提交到Master,但其所包含的容器镜像还未完全创建。通常Master对Pod进行调度需要一些时间,之后Node对镜像进行下载也需要一些时间。
- Running:Pod已被分配到某个Node上,且其包含的所有容器镜像都已经创建完成,并成功运行起来。
- Succeeded:Pod中所有容器都成功结束,并且不会被重启,这是Pod的一种最终状态
- Failed:Pod中所有容器都结束了,但至少一个容器是以失败状态结束的,这也是Pod的一种最终状态
Volume(存储卷)
Volume是Pod中能够被多个容器访问的共享目录,其生命周期与Pod相同。
Kubernetes各个组件:
- API Server:提供资源对象的唯一操作入口,其他所有组件都必须通过它提供的AP来操作资源数据,通过对相关的资源数据“全量查询”+“变化监听”,这些组件可以很“实时:地完成相关的业务功能,比如某个新的Pod一旦被提交到API Server中,Controller Manager就会立即发现并开始调度。
- Controller Manager:集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作,比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义。
- Scheduler:集群中的调度器,负责Pod在集群节点中的调度分配。
- Kubelet:负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时“上报”本Node的状态信息到API Server里。
- Proxy:实现了Service的代理及软件模式的负载均衡器。
Pod通信:p122