Kubernetes的重要概念

了解和掌握Kubernetes的重要概念是非常有必要的。只有深入理解Kubernetes的基本概念,才能掌握其各个组件的功能,从而能够快速地部署和维护Kubernetes。本节将对Kubernetes中的重要概念进行介绍。

1  Cluster(集群)

在Kubernetes中,Cluster(集群)是计算、存储和网络资源的集合。Kubernetes利用这些基础资源来运行各种应用程序。因此,Cluster是整个Kubernetes容器集群的基础环境。

2  Master(控制节点)

Master(控制节点)是指集群的控制节点。在每个Kubernetes集群中,都至少有一个Master节点来负责整个集群的管理和控制。几乎所有的集群控制命令都是在Master上面执行的。因此,Master是整个集群的大脑。正因为Master如此重要,所以为了实现高可用性,用户可以部署多个Master节点。Master节点可以是物理机,也可以是虚拟机。

通常来说,Master上运行了以下关键的进程。

(1)Kubernetes API服务器

Kubernetes API服务器(Kubernetes API Server)的进程名称为kube-apiserver。Kubernetes API服务器提供了Kubernetes各类资源对象的增、删、改、查的HTTP Rest接口,是整个系统的数据总线和数据中心。Kubernetes API服务器提供了集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更,提供了其他模块之间的数据交互和通信的枢纽,是资源配额控制的入口,拥有完备的集群安全机制。

(2)Kubernetes控制器管理器

Kubernetes控制器管理器(Kubernetes Controller Manager)作为集群内部的管理控制中心,负责管理集群内的Node(节点)、Pod(副本)、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源配额(ResourceQuota)。当某个节点意外宕机时,Kubernetes控制器管理器会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

(3)Kubernetes调度器

Kubernetes调度器(Kubernetes Scheduler)的作用是根据特定的调度算法把Pod调度到指定的工作节点(Node)上,这个过程也叫绑定(Bind)。Kubernetes调度器的输入为需要调度的Pod和可以被调度的节点的信息,输出为调度算法选择的Node节点,并将该Pod(基本操作单元)绑定到这个节点。

(4)Etcd

Etcd是采用Go语言编写的一个分布式key-value 存储,也是Kubernetes集群中的一个十分重要的组件。它用于保存集群所有的网络配置和对象的状态信息,以解决分布式系统中数据一致性的问题。

3  Node(工作节点)

在Kubernetes中,除了Master节点之外,其他节点都称为Node节点(注意:Node这个英文单词本身就是节点的意思)。与Master节点不同,Node节点才是Kubernetes中承担主要计算功能的工作节点。Node节点可以是一台物理机,也可以是一台虚拟机。

整个Kubernetes集群中的Node节点协同工作,Master会根据实际情况将某些负载分配给各个Node节点。当某个Node节点出现故障时,其他Node节点会替代其功能。

Node节点上运行以下主要进程。

(1) Kubelet

在Kubernetes集群中,每个Node节点都会启动Kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。Kubelet会在API Server上注册节点信息,定期向Master节点汇报节点资源的使用情况,并通过cAdvisor监控容器和节点资源。可以把Kubelet理解成一个代理进程,是Node节点上的Pod管家。

(2)Kube-proxy

Kube-proxy运行在所有Node节点上,它监听每个节点上Kubernetes API中定义的服务变化情况,并创建路由规则来进行服务负载均衡。

(3)Docker引擎

Docker引擎就是本书前面介绍的Docker CE等服务引擎,负责容器的创建和管理等。

4  Pod

Pod是Kubernetes的基本操作单元,一个Pod中可以包含一个或多个紧密相关的容器,一个Pod可以被一个容器化的环境看作应用层的逻辑宿主机。一个Pod中的多个容器应用通常是紧密耦合的,Pod在Node节点上被创建、启动或者销毁。每个Pod中运行着一个特殊的被称为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更高效,在设计时我们可以充分利用这个特性,将一组密切相关的服务进程放入同一个Pod中。

同一个Pod中的容器之间仅需通过localhost就能互相通信。同一个Pod中的业务容器共享Pause容器的IP地址,共享Pause容器挂载的存储卷。

Pod是Kubernetes调度的基本工作单元,Master节点会以Pod为单位,将其调度到Node节点上。Pod的基本组成如图12-1所示。

图12-1  Pod的基本组成

服务

在Kubernetes的集群中,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失。这就引出一个问题,如果有一组Pod组成一个集群来提供服务,那么如何来访问它呢?答案是通过服务即可。

一个服务可以看作一组提供相同服务的Pod的对外访问接口,服务作用于哪些Pod是通过标签选择器来定义的。服务通常拥有以下特点:

  • 拥有一个指定的名字,比如mysql-server。
  • 拥有一个虚拟IP地址和端口号,销毁之前不会改变,只能在内网访问。
  • 能够提供某种远程服务能力。
  • 被映射到了提供这种服务能力的一组容器应用上。

如果服务要提供外网服务,就需要指定公共IP和Node端口,或外部负载均衡器。

默认情况下,容器的数据都是非持久化的。当容器消亡后,数据也跟着丢失。为了解决这个问题,Docker提供了卷机制以便将数据持久化存储。类似地,Kubernetes 提供了更强大的卷机制和丰富的插件,可以解决容器数据持久化和容器间共享数据的问题。

与Docker不同,Kubernetes卷的生命周期与Pod绑定。容器宕掉后,Kubelet再次重启容器时,卷的数据依然还在,而Pod被删除时,卷才会清理。数据是否丢失取决于具体的卷类型,比如emptyDir类型的卷实际上是一个临时空目录,是Pod内多用户同享的一个目录。与Pod的生命周期一致,这个目录在Pod创建时创建,删除时删除。持久化存储卷为独立于计算资源的一种物理存储资源,不属于任何一个Node节点。因此,在Pod被删除时,不会丢失数据,除非人工将其删除。

命名空间

命名空间是Kubernetes系统中的另一个重要概念,通过将系统内部的对象分配到不同的命名空间中,形成逻辑上的不同项目、小组或用户组,从而使得在共享使用整个集群的资源的同时还能分别管理它们。

Kubernetes集群在启动后,会创建一个名为default的默认命名空间,如果不特别指明命名空间,那么用户创建的Pod、RC、服务都会被系统创建到默认的命名空间中。

当团队或项目中具有许多用户时,可以考虑使用命名空间来区分。在未来的Kubernetes版本中,默认情况下,相同命名空间中的对象将具有相同的访问控制策略。

节选自《Docker与Kubernetes容器运维实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值