kubernetes 核心术语

2020-05-12  本文已影响0人  为为王

kubernetes 是一个开放的开发平台。对现有的编程语言、编程框架、中间件没有任何的侵入性。它有完备的集群管理能力,包括多层次的安全防护和准入控制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。kubernetes还提供了完善的管理工具,包括开发、测试、部署、监控等流程。因此kubernetes是一个基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。


image.png

Master

Master 指的是集群的控制节点,在每个kubernetes集群中都需要一个Mater来负责整个集群的管理和控制。几乎所有的控制命令都会给到master,它负责具体的执行过程。matster通常会占用一个独立的服务器(高可用部署建议用3台服务器)。如果master宕机,那么kubernetes对集群应用的管理将会失效。

master上运行以下关键进程:

另外,在Master上还需要部署etcd服务,因为kubernetes里的所有资源对象都被保存在etcd中。

Node

kubernetes中的其它机器被称为Node,是kubernetes中的工作负载节点,每个Node都会被master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其它节点上。

每个Node上都运行着以下关键进程。

Pod

image.png

Pod是kubernetes最小部署单元,一个Pod包含多个容器。每个Pod都有一个被称为根容器的Pause容器。Pause容器对应的镜像属于kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个密切相关的用户业务容器。

一个Pod中有多个容器的设计可以有以下优势:

Label

Label是一个可以让用户自定义的key/value形式的键值对,Label可以被附加到如Pod、Service、RC等各种kubernetes资源对象上。Label通常在定义资源时指定,也可以在对象创建后动态的添加或删除。

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

Label Selector可以查询或筛选具有某些标签的kubernetes资源对象,其在kubernetes重要使用场景如下:

Replication Controller

简称RC,它定义了某种Pod的副本数量在任意时刻都符合某个预期的期望,RC包括如下几个部分:

Deployment

Deployment内部使用Replia Set来解决Pod的编排问题,在未来这个功能正在一点点的替换RC。其典型使用场景有以下几个:

Service

Service 是一个抽象的概念,,它定义了一个服务的的访问入口地址,前端应用通过这个入口地址来访问其背后由Pod组成的集群实例,Service与其后端的Pod副本之间则是通过LabelSelector之间无缝对接的。


image.png

kubernetes 服务发现

通过提供特定的api接口来做服务发现对导致平台的侵入性较强,也增加了开发、测试的难度。所以kubernetes使用DNS作为服务发现,直接使用服务名作为域名。

外部系统访问Service

   internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

Service的Cluster Ip特点如下:

StatefulSet

StatefulSet是kubernetes专门为有状态的应用集群定制的一种集群模式,如kafka集群、etcd集群这些集群有以下4个共同点:

  1. 每个节点都有固定的身份ID,集群成员可以通过这个ID相互发现并通信。
  2. 集群规模比较固定,不会随意变动。
  3. 每个节点都是有状态的,通常会持久化数据到永久存储中。
  4. 如果磁盘损坏或某个节点无法正常运行,则集群可能受损。

RC和Deployment无法满足上述四点,所以StatefulSet作为补充提供了以下特性:

从上面的特性可以看出,Cluster IP属于kubernetes集群内部私有地址,无法在集群外部直接使用这个地址。

Namespace

namespace是kubernetes实现多租户隔离的重要概念,通过namespace可将集群内部的资源分配到不同的命名空间中,形成逻辑上不同的分组,便于不同的分组共享使用集群资源时还能被分别管理。默认情况下用户创建的RC、Pod、Service都被分配到default命名空间中。

ConfigMap

kubernetes提供的配置中心,原理是通过Volume的方式挂载位于etcd的配置数据。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      Name: game-demo
    data:
      # 类属性键;每一个键都映射到一个简单的值
      player_initial_lives: 3
      ui_properties_file_name: "user-interface.properties"
      #
      # 类文件键
      game.properties: |
        enemy.types=aliens,monsters
        player.maximum-lives=5
        user-interface.properties: |
        color.good=purple
        color.bad=yellow
        allow.textmode=true

Volume

Volume存储卷是Pod中能够被多个容器共享的的目录,其生命周期只与Pod有关,而与容器无关。kubernetes支持多种类型的volume,举例如下:

emptyDir

emptyDir Volume在Pod分配到Node时创建,它无需对应宿主机上的任何文件,当Pod从Node上移除时自动删除。emptyDir应用场景如下:

hostPath

挂载宿主机是哪个的文件或目录到Pod,主要使用场景如下:

注意hostPath上无法使用资源配额管理。

云存储

如 GCE和AWS。

其它存储

支持nfs等网络或开源存储。

Persistent Volume

Volume存储被定义在Pod上,属于计算资源的一部分。而PV是集群某个网络存储对应的一块存储。其与Volume有以下区别:

Horizontal Pod Autoscaler

水平扩容的设计目标是使kubernetes中的应用有根据当前负载的变化,自动的触发水平扩容或缩容。HPA通过追踪RC控制的所有的Pod负载变化情况,来确定是否有必要针对性的调整目标副本数量。当前HPA有以下两种方式作为Pod负载度量指标:

Job

Job 资源对象控制一组Pod容器,用于定义并启动一个批处理任务。批处理任务通常串行或并行的启动多个计算进程去处理一批工作项,在处理完成后,整个批处理任务结束。Job与RC等控制器有以下差别:

  1. Job控制的副本是短暂运行的,可以将其视为一组docker容器,其中每个docker容器都仅仅运行一次。Job生成的Pod副本的RestartPoliy被设置为Nerver,意思是不会自动重启。kubernetes还支持cronJob,用于支持某些批处理任务需要反复执行的问题。
  2. Job所控制的Pod副本的工作模式能够多实例并行计算。
上一篇 下一篇

猜你喜欢

热点阅读