Kubernetes【一】 入坑

一 Kubernetes 是什么


Kubernetes(k8s->8代表中间的八个字母)是一个基于容器技术的分布式架构领先方案;虽然诞生时间不长,但因为是含着金钥匙🔑出生(先天的优良基因Borg以及 Google 粑粑的完美背书),所以一经开源就获得了很大的反响,并迅速称霸了容器技术领域。Kubernetes 意在提供一个能够自动化部署、可拓展、应用容器可运营的平台,对资源进行自动化,只关注 service 的状态,从而大大的减少开发 & 运维的成本。

Borg 是 Google 内部使用的一个大规模集群管理系统,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率最大化;经过十几年的打磨,Borg 已经非常完善。Kubernete 算是 Borg 的第一个开源版本。

二 为什么要用 Kubernetes


自从2013年开源的Docker项目发布之后,其以惊人的速度被企业采用,已成为容器运行的事实标准,随着容器技术的迅速发展,容器技术所带来的便利性使得实现微服务架构变得更加容易,当然趋势也必定是这样,单体应用一定会被替代;而随着微服务架构的出现,对于运维人员来说,对集群的管理则变得非常困难,虽然目前已经有很多优秀的集群管理工具,但面对Kubernetes来说,还是只能当配角;Kubernetes 给我们带来了很多牛p的功能,比如:自我修复、水平扩展、自动发布&回滚、批量处理执行等。

三 Kubernetes 架构


架构图

Kubernetes 集群分为两类节点:Master 和 Node。在 Master 上运行 etcd、APIServer、Controller Manager 和 Scheduler,后三个节点构成总控中心,负责对集群中所有的资源进行管理和调度。在每个 Node 上运行的有 Kubelet、Proxy 和 Docker Daemon 三个组件,负责对本节点的 Pod 的生命周期的管理。

1 基本概念

✨Pod

Pod 是 Kubenetes 中的最基本的单元,包含了一个或多个紧密相关的容器,类似豌豆荚(包含一个或多个豆豆)。一个 Pod 可以被认为是一个容器化的环境的“逻辑宿主机”。之所以有 Pod 这个概念的原因是因为 Docker 容器之间的通信受到了 Docker 通信机制的限制,一个 container 需要通过 link 的方式才能访问到另外一个 container。而在 Pod 中的 containers 他们之间仅需要通过 localhost 就可以相互通信了。一个 Pod 中的 containers 共享同一组资源:

  • PID 命名空间: Pod 中不同的应用程序可以看到该 Pod 中其他应用程序的进程ID
  • 网络空间命名:Pod 中的多个容器能够访问同一个 IP 和 端口范围
  • UTS 命名空间:Pod 中的多个 container 共享同一主机名
  • Volumes:Pod 中的各个容器可以访问 Pod 级别定义的 Volumes

Pod 拥有自己的 lifecycle 以及相应的管理方式,这在后面会详细分享。

✨Node (节点)

Node 是集群中相对与 master 而言的工作主机(我们的服务会以 Pod 的形式在 Node 中运行)。Node 可以是一台物理机,也可以是一台虚拟机。每个 Node 上会运行一个用于启动和管理 Pod 的服务 —— Kubelet,并且能够被 master 管理。每个 Node 上运行的进程包括了 Kubelet、kube-proxy 和 docker daemon

✨Replication Controller (RC)

Replication Controller 是 Kubernetes 的核心概念,用于定义 Pod 的数量(可用于高可用,滚动更新...)。在 Master 内,Controller Manager 进程通过 RC 的定义来完成 Pod 的创建、监控、启停等操作。
根据 Replication Controller 的定义(yaml / json),Kubernetes 会以多退少补的原则确保在任意时刻都能运行指定的 Pod 的“副本(Repica)”数量。

✨Service

在 Kubernetes 中,每个 Pod 都会有单独的 Ip 地址,Ip 地址会随着 Pod 的销毁而结束,创建新的 Pod 时 Ip 也会改变。那么当一组 Pod 组成一个集群的时候,我们该怎么来访问呢?Service 便可以用于解决该问题,Service 可以看作成一组提供相同服务的 Pod 的对外访问接口,当外界想要访问该服务时,会直接访问到 Service(可以通过服务名称访问),然后 Service 通过负载均衡选择一个 Pod 。在每个 Pod 资源(yaml/json)被创建时可以指定一个 lebal,而创建 Service 的时候可以指定一个 match label,这样 Service 创建成功后会匹配到相同的 label 的 Pod。当 Pod 挂掉后,有新的相同的 label 的 Pod 创建后也会自动的注册到该 Servcie 上。而当 service 的 ip 改变后,会有相应的 DNS 去处理,service 的服务名称并不会改变。

service
✨Namespace (命名空间)

Namespace 会通过系统内部的对象“分配”到不同的 Namespace 中,形成逻辑上分组的不同小组,便于不同的分组在共享使用集群的资源的同时还能被分别管理,比如测试环境和生产环境完全隔离。Kubernetes 集群启动后,会创建一个命为 “default” 的 Namespace,在创建其他资源时(Pod,RC,Service...)如果没有指定 Namespace ,都会被默认分到 default 的 Namespace 中。

✨etcd

etcd 是一个高可用的 key/value 的存储系统,用于持久化存储集群中所有的资源对象,例如集群中的 Node、Service、Pod、RC、Namespace...

✨API Server

API Server 是连接其他所有服务组件的枢纽,以 REST 方式提供服务,集群中所有对资源的管理都需要通过调用 API Server 来完成。

创建 Pod 的流程

  1. 通过 Kubectl 提交一个创建 RC 的请求(比如 Pod 副本为1),该请求会通过API Server 被写入到 etcd 中
  2. Controller Manager 通过 API Server 的监听资源变化的接口监听到这个 RC 事件后,发现 集群中还没有它对应的 Pod 实例,便会根据 RC 里面的 Pod 模版细腻些定义生成一个 Pod 对象,通过 API Server 写入到 etcd 中
  3. 此事件被 Scheduler 发现,它会执行一个复杂的调度流程,为这个新的 Pod 选择一个 Node 落户,然后通过 API Server 保存到 etcd 中
  4. 目标 Node 中的 Kubelet 进程通过 API Server 监听到这个 Pod ,并根据它的定义,负责管理这个 Pod,直到这个 Pod 结束掉

创建 Service 流程

  1. 通过 Kubectl 提交一个映射到该 Pod 的 Service 的创建请求
  2. Controller Manager 会通过 Label 查询到相关联的 Pod 实例,然后生成 Service 的 Endpoints 信息并通过 API Server 写入到 etcd 中
  3. 所有 Node 上运行的 Proxy 进程通过 API Server 查询并监听 Service 对象与其相对应的 Endpoints 信息,从而实现 Servide 访问到后端 Pod 的转发功能。

2 各组件功能

API Server: 提供了资源对象的唯一操作入口,其他的组件都必须通过它提供的 API 来对资源进行操作。通过对资源数据的“全量查询”和“变化监听”,从而可以实时的完成业务功能。

Controller Manager:集群内部的管理控制中心,目的主要是实现 Kubernetes 集群的故障检测和恢复的自动化工作。比如根据 RC 的定义对 Pod 的管理;根据 Service 与 Pod 的关系,对服务的 Endpoints 进行管理;以及对 Node 的管理。

Scheduler:集群中的调度器,负责 Pod 在集群节点中的调度分配

Kubelet:负责当前 Node 节点上的 Pod 的管理。创建、修改、监控、删除...

Proxy:实现 Service 的代理及软件模式的负载均衡

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

推荐阅读更多精彩内容