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>