k8s一般由三个或者三个以上节点组成,它遵循集群的一般要求,并且有以下基础类型组成:
Master 是集群的控制节点,即主节点。 在Kubernetes集群中需要由一个或者一组 Master, 负责管理和控制整个集群。 Master通常占有一台独立的服务器(在高可用模式下建议使用三台或者以上的服务器),是整个集群的【大脑】,如果它发生宕机或者不可用,那么对集群中容器应用的管理都将无法实施。
在 Master 上运行着以下关键进程
另外,在Master上通常还需要部署etcd
服务。
如果将原本部署在Master上的这些进程以Pod
的方式部署在Node
上,比如采用kubedam
安装Kubernetes
集群,那么此时Kubernetes
集群中就没有Master
了,因为所有节点都是Node
。
在Kubernetes
中,除Master
外的其他服务器被称为Node
,Node
在较早的一些版本也被称为Minion
。与Master
一样,Node
既可以的一台物理主机,也可以是一台虚拟机。Node
是Kubernetes
集群的工作负载节点,每个Node
都会被Master
分配一些工作负载(Docker
容器),当某个Node
宕机时,其上的工作负载都会被Master
自动转移到其他Node
上。在每个Node
上都运行着以下关键进程:
Pod
对应容器的创建、启停等任务,同时与Master
密切协作,实现集群管理的基本功能Kubernetes Service
通讯与负载均衡机制的服务Node
可以在运行期间被动态增加到Kubernetes
集群中,前提是在这个Node
上已经正确的安装、配置和启动了上述关键进程。在默认情况下,kubelet
会向Master
注册自己,这也是Kubernetes
推荐的Node
管理方式。一旦Node
被纳入集群管理范畴,kubelet
进程就会定时向Master
汇报自身的情报,例如操作系统、主机CPU和内存的使用情况,以及当前有哪些Pod
在运行等,这样Master
就可以获知每个Node
的资源使用情况,并实现高效均衡的资源调度策略了,而某个Node
在超过指定时间不上报信息时,会被Master
判定为【失联】,该Node
状态被标记为【NotReady】,Master
随后会触发【故障转移】的的自动流程。
查看集群中有多少节点的命令如下:
kubectl get nodes
命名空间是集群类里面一个重要的基础概念,它在很多情况可以实现多租户隔离,典型的一个思路是给每个租户分配一个命名空间,命名空间属于Kubernetes
集群范畴的资源对象,在一个集群可以创建多个命名空间,每个命名空间都是独立的存在,属于不同命名空间的资源对象在逻辑上互相隔离。在每个Kubernetes
集群安装完成且正常运行后,Master
会自动创建两个命名空间:
用户创建的资源对象如果没有指定命名空间,则被默认都安装在kube-system
命名空间中。我们可以通过命名空间将集群的资源对象【分配】到不同的命名空间中,形成逻辑上分组的不同项目、小组或者用户组,便于不同的分组共享整个集群的资源的同时被分别管理。当给每个租户都创建了一个命名空间来实现多租户管理的资源隔离时,还能结合Kubernetes
的资源配额管理,限定不同租户能占用的资源,例如CPU私有量和内存使用量等
命名空间的定义如下:
apiVersion: v1
kind: Namespace
metadata:
name: development
执行以下命令来创建此定义:
kubectl apply -f <namespace.yaml>