Kubernetes 简介

Kubernetes 简介

导读:Kubernetes(K8s)是开源的,用于管理云平台中多个主机上的容器化的应用,应用操作包括部署,调度和节点集群间扩展。如果你曾经用过 Docker 容器技术部署容器,那么可以将 Docker 看成 Kubernetes 内部使用的低级别组件。(Kubernetes 不仅仅支持 Docker,还支持 Rocket,这是另一种容器技术)

小贴士:K8s 是 Kubernetes 的缩写,其中 8 是指 K 后面的 8 个字母

Kubernetes 的作用

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它
    ...

K8s 基本介绍

架构图

[站外图片上传中...(image-ed1ab9-1564482843628)]

组件

  • etcd 保存了整个集群的状态;
  • apiserver 用于暴露 Kubernetes API,提供了资源操作的唯一入口。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行;
  • controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
  • kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(管理 Kubernetes Master 和 Node 之间的通信)的管理;
  • Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
  • kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
  • kube-dns 负责为整个集群提供 DNS 服务

名词解释

[图片上传失败...(image-5a1676-1564482843628)]

Node

节点是物理或者虚拟机器,作为 Kubernetes worker,通常称为 Minion。每个节点都运行如下 Kubernetes 关键组件:
kubelet:是主节点代理。
kube-proxy:Service 使用其将链接路由到 Pod,如上文所述。
Docker 或 Rocket:Kubernetes 使用的容器技术来创建容器。

集群拥有一个 Kubernetes Master。Kubernetes Master 提供集群管理控制,并且拥有一系列组件,比如 Kubernetes API Server 与 Replication Controller。API Server 提供可以用来和集群交互的接口;Replication Controller 用于创建和复制 Pod。

Pod

Pod 应用于节点上,包含一组容器和卷,一个 Pod 是一个容器环境下的“逻辑主机”(类似模具下生产出的玩具),它可能包含一个或者多个紧密相连的应用。同一个 Pod 里的容器和应用共享同一个网络命名空间(可以使用 localhost 互相通信)。Pod 中的应用也可以共享磁盘(Volumes)。
Pod 是短暂的(无状态),不是持续性实体。
提出问题:

  1. 如果 Pod 是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢?
    虽然 Kubernetes 支持卷的概念,但共享磁盘目录(EmptyDir)的生命周期和所属的 Pod 是完全一致的,因此 Pod 中的数据并不能跨重启而存在。
  2. 是否手动创建 Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?
    可以手动创建单个 Pod,但是也可以使用 Replication Controller 使用 Pod 模板创建出多份拷贝,下文会详细介绍。
  3. 如果 Pod 是短暂的,那么重启时 IP 地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?
    这时可以使用 Service,下文会详细介绍

Label

正如图所示,一些 Pod 有 Label(pod description)。一个 Label 是附加(attach)到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个“tier”和“app”标签,通过 Label(tier = backend, app = myapp)来标记后端 Pod 容器。然后可以使用 Selectors 选择带有特定 Label 的 Pod 进行相关操作,比如将 Service 或者 Replication Controller 应用到上面。

Service

Service 定义了访问这些 Pod 的策略的一层抽象。Service 通过 Label 找到 Pod 组。
现在,假定有 2 个后台 Pod,并且定义后台 Service 的名称为“backend-service”,Label 选择器为(tier = backend, app = myapp)。backend-service 的 Service 会完成如下两件重要的事情:

  1. 服务发现
    将新的 Pod 服务放入其负载均衡的体系中
  2. DNS 寻址
    会为 Service 创建一个本地集群的 DNS 入口,因此前端 Pod 只需要通过组件 DNS 查找主机名为“backend-service”(此过程由 kube-dns 组件实现),就能够解析出前端应用程序可用的 IP 地址。
    得到了后台服务的 IP 地址后,Service 在这 2 个后台 Pod 之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个 Node 上运行的代理(kube-proxy)完成。
    [图片上传失败...(image-f29038-1564482843628)]

有一个特别类型的 Kubernetes Service,称为“LoadBalancer”,作为外部负载均衡器使用,在一定数量的 Pod 之间均衡流量。

Replication Controller

Replication Controller(简单理解为上文提到的模具)确保任意时间都有指定数量的 Pod“副本”在运行。如果为某个 Pod 创建了 Replication Controller 并且指定 3 个副本,它会创建 3 个 Pod,并且持续监控它们。如果某个 Pod 不响应,那么 Replication Controller 会替换它,保持总数永远为 3。
如果之前不响应的 Pod 恢复了,Replication Controller 会将其中一个终止保持总数为 3。如果在运行中将副本总数改为 5,Replication Controller会立刻启动 2 个新 Pod,保证总数为 5。还可以按照这样的方式缩小 Pod。在节点挂掉重启时,可以自动创建 Pod 及相关应用服务。
创建 Replication Controller 需要的条件:
Pod 模板(模具):用来创建 Pod 副本的模板
Label:Replication Controller 需要监控的 Pod 的标签。

ReplicaSet(RS)

Replication Controller(RC)的升级版本。ReplicaSet 和 Replication Controller 之间的唯一区别是对选择器的支持。ReplicaSet 支持 labels user guide 中描述的 set-based 选择器要求, 而 Replication Controller 仅支持 equality-based 的选择器要求。

Deployment

Deployment 为 Pod 和 Replica Set 提供声明式更新。
你只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和 ReplicaSet 的实际状态改变到您的目标状态。您可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

注意:一般情况下不该手动管理由 Deployment 创建的 Replica Set,否则就篡越了 Deployment controller 的职责!

kubectl

kubectl 用于运行 Kubernetes 集群命令的管理工具。
eg:

ConfigMap 与 Secret

ConfigMap 与 Secret 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 跟 Secret 很类似,但它可以更方便地处理不包含敏感信息的字符串。

参考文档

中文文档
体验环境

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

推荐阅读更多精彩内容