基本术语

cluster

master

master是cluster的大脑,主要职责是调度,即:决定将应用放在哪里运行。

master组件主要包括(这些组件只需要在master上运行即可): - kube-apiserver:用于暴露kubernete api - kube-scheduler:用于在nodes之间调度pod - kube-controller-manager:管理cluster的各种资源,保证资源处于预期状态; - etcd:一致性分布式键值存储,集群的数据库; - pod网络(如:flannel):保证Pod间能够相互通信。

Node

职责:运行容器应用,由master管理;

Node组件主要包括(这些组件需要在每个node上运行):

Pod

Pod是容器的集合,通常会将紧密相关的一组容器放在一个Pod中,同一个Pod中所有的容器共享IP地址和Port空间,也就是说,他们在同一个Network namespace中。

POD是kubernetes调度的最小单位,同一个Pod中的容器始终被一起调度。
Pod中的容器会作为一个整体被master调度到一个Node上运行。

Controller:用于运行容器

Controller中定义了Pod的部署属性。kubernetes提供了多种Controller,包括:

deployment

可以理解为:应用

Service:用于访问容器(提供负载均衡支持)

暂时简单理解为: 端口映射

Deployment可以部署多个Pod副本,每个Pod都有自己的IP,外界如何访问这些副本?
Service定义了外界访问一组特定Pod的方式,Service有自己的IP和端口,Service为Pod提供了负载均衡。

Kubernetes运行容器(Pod)和访问容器(Pod)这两项任务,分别由Controller和Service执行

Namespace

Namespace可以将一个物理Cluster逻辑划分为多个虚拟Cluster,每个cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。


组件

kubelet

运行在所有nodes上,负责启动pod和容器

kubeadm

运行在所有nodes上,用于初始化集群

kubectl

运行在所有nodes上,命令行工具


其他

容器被设计为每个容器只运行一个进程(除非进程本身产生子进程)

同一POD中--多个容器之间的部分隔离

同一pod下的所有容器共享IPC命名空间、Linux命名空间,具有相同的主机名和网络接口;
但是文件系统完全隔离;

平坦POD间网络

集群中POD都在同一个共享网络地址空间中,这意味着每个pod都可以通过其他pod的ip地址来实现相互访问,而不关系其他pod导致处于哪个工作节点上;