kubernetes 核心术语

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


image.png

Master

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

master上运行以下关键进程:

  • kubernetes API Server (lube-apiserver):提供了HTTP Rest接口的关键服务进程,是kubernetes里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。
  • kubernetes Controller Manager(kube-controller-manager): 所有资源对象的自动化控制中心。
  • kubernetes Scheduler (kube-scheduler):负责资源调度(pod调度)的进程。

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

Node

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

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

  • kubelet : 负责pod对应的容器的创建、启停等任务,同时与Master密切协作实现基本的集群管理功能、
  • kube-proxy :实现service的通信和负载均衡机制的重要组件。
  • Docker Engine (docker):Docker 引擎,负责本机的容器的创建和管理工作。

Pod

image.png

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

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

  • 整体的控制一组容器,让他们有相同的生命周期。
  • Pod 中的容器共享挂载或网络命名空间

Label

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

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

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

  • kube-controller 进程通过在资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自动控制流程。
  • kube-proxy 进程通过Service的Label Selector来选择对应的Pod,自动建立每个Service到Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
  • 通过某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-schduler进程可以实现Pod定向调度的特性。

Replication Controller

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

  • Pod期待的副本数量
  • 用于筛选目标Pod的LabelSelector
  • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板。

Deployment

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

  • 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建。
  • 检查Deployment来看部署动作是否完成(Pod副本数量是否达到预期的值)。
  • 更新Deployment以创建新Pod(比如镜像更新)。
  • 如果当前的Deployment不稳定,则回滚到一个早先的Deployment版本。
  • 暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新的发布。
  • 扩展Deployment以应对高负载。
  • 查看Deployment状态,以此作为发布是否成功的指标。
  • 清理不再需要的旧版本ReplicaSets。


    image.png

Service

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


image.png

kubernetes 服务发现

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

外部系统访问Service

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

Service的Cluster Ip特点如下:

  • Cluster IP 仅仅作用域Service这个对象,并由kubernetes管理和分配ip地址(来源与Cluster IP地址池)。
  • 无法被ping,因为没有一个“实体的网络对象”来响应。
  • 只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备TCP/IP通信的基础,并且它们属于kubernetes集群这样一个私有空间,集群外部的节点如果要访问这个通信端口,需要做一些额外的工作。
  • 在kubernetes集群内,Node IP网、Pod IP网与Cluster IP网之间的通信,采用的是kubernetes自己设计的一种编程式的特殊路由规则,与我们熟知的ip路由有很大的不同。

StatefulSet

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

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

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

  • 每个Pod都很稳定,拥有唯一的网络标识。
  • Pod副本的启停顺序是受控的。
  • Pod采用稳定的持久化存储卷,通过PV或PVC来实现。
  • 支持Headless Service,不使用Cluster IP,解析DNS域名时返回全部Pod的Endpoint列表。

从上面的特性可以看出,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,主要使用场景如下:

  • 保存日志文件。
  • 访问docker引擎内部数据结构。

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

云存储

如 GCE和AWS。

其它存储

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

Persistent Volume

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

  • PV只能是网络存储,不属于任何Node,但是可以在每个Node上访问。
  • PV并不定义在Pod上。

Horizontal Pod Autoscaler

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

  • CPUUtilizationPercentage :Pod当前的cpu使用率除以Pod Request的平均值。
  • 应用程序自定义度量指标,例如TPS、QPS。

Job

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

  1. Job控制的副本是短暂运行的,可以将其视为一组docker容器,其中每个docker容器都仅仅运行一次。Job生成的Pod副本的RestartPoliy被设置为Nerver,意思是不会自动重启。kubernetes还支持cronJob,用于支持某些批处理任务需要反复执行的问题。
  2. Job所控制的Pod副本的工作模式能够多实例并行计算。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271