《Kubernetes指南》1-Kubernetes入门

1 Kubernetes基本概念和术语

kubernetes中大部分概念如Node、Pod、Replication Controller、Service等都可以被看作一种资源对象,几乎所有的资源对象都可以通过kubernetes提供的kubectl工具(或API编程调用)执行增删改查等操作,并将其保存在etcd中持久化存储。从这个角度来看,kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比保存在etcd库里的“资源期望状态”和当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能

1.1 Master

kubernetes里的Master指的是集群控制节点。每个kubernetes集群里都需要一个Master节点来负责整个集群的管理和控制,基本上kubernetes所有的控制命令都是发给它,它来负责具体的执行过程,我们后面所有的执行的命令基本上都是在Master节点上运行的。Master节点通常会占据一个独立的服务器或虚拟机,就是它的重要性体现,一个集群的大脑,如果它宕机,那么整个集群将无法响应控制命令。

Master节点上运行着以下几组关键进程:

  1. Kubernetes API Server(kube-apiserver):提供了HTTP Rest接口的关进服务进程,是Kubernetes里所有资源增删改查等操作的唯一入口,也是集群管理的入口进程。

  2. Kubernetes Controller Manage(kube-controller-manage):Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

  3. Kubernetes Scheduler(kube-scheduler):负责资源的调度(Pod调度)的进程。

Master还启动了一个etcd server进程,因为kubernetes里所有的资源对象的数据都是保存在etcd中的。

1.2 Node

除了Master,kubernetes集群的其它机器也被称为Node节点,在较早的版本也被称为Monion。同样的它也是一台物理机或是虚拟机。Node节点才是Kubernetes集群中工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机之后,其上的工作负载会被Master自动转移到其它节点上面去。

每个Node节点运行着以下几个关键进程:

  • kubelet:负责pod对应的同期创建、启动停止等任务,同时与Master节点密切协作,实现集群管理的基本功能。

  • kube-proxy:实现Kubernetes Service的通信与负载均衡的重要组件。

  • Docker-Engine(docker):docker引擎,负责本机容器的创建和管理工作。

Node节点可以在运行期间动态增加到Kubernetes集群中,前提是这个节点已经正确安装、配置和启动的上述关键进程。在默认情况下kubenet会向Master注册自己,这也是kubernetes推荐的管理方式。一旦Node被纳入集群管理范围,kubelet进程就会定时向Master节点汇报自身的情况,包括操作系统、Docker版本、机器cpu和内存情况及有哪些pod在运行。这样Master可以获知Node的资源使用情况并实现高效均衡的资源调度策略。而某个Node超过时间不进行上报信息时,master将会将其标记为失联(Not Ready),随后会触发资源转移的自动流程

1.3 Pod

pod的组成与容器的关系,pause为根容器,其他为业务容器。
《Kubernetes指南》1-Kubernetes入门
k8s为每个Pod都都分配了唯一的ip,称之为Pod IP,一个Pod里的多个容器共享Pod IP地址。k8s要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术来实现,如Flannel、Openswith等,牢记在k8s中,一个Pod容器与另外主机上的Pod容器能够直接通信。
Pod其实有两种类型:普通的Pod及静态的Pod(static Pod),后者比较特殊,并不存放在k8s的etcd里面存储,而是存放在某一个具体的Node上的一个文件中,并且只在此Node上启动运行而普通的Pod一旦被创建,就会被放入到etcd中存储,随后会被k8s Master调度到某个具体的Node上面进行绑定(Binding),随后该Pod被对应的Node上的kubblet进程实例化成一组的Docker容器并启动起来。默认情况下,当Pod里的某个容器停止时,k8s会自动检测这个问题并重启启动这个Pod(Pod里面的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其它节点上。Pod、容器与Node的关系如下:

《Kubernetes指南》1-Kubernetes入门