【K8s 精选】Kubernetes 架构总览

1 Kubernetes 架构概览

Kubernetes 核心组件包括 Master 节点的 apiservercontroller-managerscheduler,Node 节点的 kubeletkube-proxyContainer runtime,还有分布式键值( key-value) 数据库 etcd

Kubernetes 简化架构.png

apiserver操作资源的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。
controller-manager维护集群的状态,例如故障检测、自动扩展、滚动更新等。
scheduler资源的调度,根据预设的调度策略把 Pod 调度到相应的宿主机(Node)上。
kubelet维持容器的生命周期,管理 Volume(CVI)和 Network(CNI)。
kube-proxy:为 Service 提供集群内部的服务发现和负载均衡,其中 Service 是为一组功能相同 Pods,提供统一的入口。
etcd:强一致性、高可用的键值数据库,可以持久化集群状态,同时具有消息发布与订阅的功能。

image.png

2 Master 简介

Master 主节点负责管理和控制整个 Kubernetes 集群。Master 主要包含的组件是 apiservercontroller-managerscheduler

2.1 apiserver

apiserver 称为 Kubernetes API Server,提供如下功能:
提供集群管理的 REST API 接口,包括创建/更新/删除资源、认证授权、数据校验以及集群状态变更等。
提供其它模块之间的数据交互和通信的枢纽。注意:只有 apiserver 才直接操作 etcd。

apiserver.JPG

2.2 controller-manager

controller-manager 由 controller-managercloud-controller-manager 组成,是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。

controller-manager.JPG

controller-manager 控制器分类
● Replication Controller
● Node Controller
● Deployment Controller
● Endpoint Controller
● Namespace Controller
● Job Controller
● Service Controller
● StatefulSet Controller

2.3 scheduler

scheduler 负责分配调度 Pod 到集群内的 Node 节点上。它通过监听 apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点,然后更新 Pod 的 NodeName 字段。

调度器的考虑因素:公平调度、资源高效利用、affinity 和 anti-affinity、数据本地化等。

scheduler 调度原理:
For given pod:

    +---------------------------------------------+
    |               Schedulable nodes:            |
    |                                             |
    | +--------+    +--------+      +--------+    |
    | | node 1 |    | node 2 |      | node 3 |    |
    | +--------+    +--------+      +--------+    |
    |                                             |
    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+

    Pred. filters: node 3 doesn't have enough resource

    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+
    |             remaining nodes:                |
    |   +--------+                 +--------+     |
    |   | node 1 |                 | node 2 |     |
    |   +--------+                 +--------+     |
    |                                             |
    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+

    Priority function:    node 1: p=2
                          node 2: p=5

    +-------------------+-------------------------+
                        |
                        |
                        v
            select max{node priority} = node 2

scheduler 调度分为两个阶段,predicate 和 priority
predicate:过滤不符合条件的节点
priority:优先级排序,选择优先级最高的节点

3 Node 简介

Node 节点是 Kubernetes 集群中的工作负载节点,Node 上的工作负载由 Master 分配。当某个 Node 宕机时,Master 会将该节点的工作负载转移到其他节点上去。Node 节点运行的主要有 kubeletkube-proxy

3.1 kubelet

每个 Node 节点都运行一个 kubelet 服务进程,它通过监听 10250 端口,接收并执行 Master 发来的指令。每个 Kubelet 进程会在 apiserver 上注册所在 Node 节点的信息定期向 Master 上报该节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源

kubelet 的主要功能:
节点管理:通过 apiserver 创建和管理节点资源
Pod 管理和 cAdvisor 资源监控:使用配置启动 Pod,并持续把运行中 Pod 的状态、事件和资源消耗信息发送给 apiserver

(1)节点管理

节点管理主要的功能是节点自注册节点状态更新
节点自注册:设置启动参数 --register-node 来确定是否向 apiserver 注册自己
节点状态更新:kubelet 在启动时通过 apiserver 注册节点信息,并定时向 apiserver 发送节点新消息,apiserver 在接收到新消息后,将信息写入 etcd

(2)Pod 管理

Pod 管理主要有 Pod 清单获取创建和修改 Pod
Pod 清单获取:kubelet 通过 apiserver 获取 PodSpecs,并确保这些 PodSpecs 中描述的 Pod 正常健康运行。
创建和修改 Pod:kubelet 通过 Watch-List 方式监听 etcd,如果有创建和修改 Pod 任务,则会有相关操作。

(3)cAdvisor 资源监控

Kubelet 通过 cAdvisor 获取其所在节点及容器的数据。

cAdvisor 是一个开源的分析容器资源使用率性能特性的代理工具。它集成到 kubelet 中,当 kubelet 启动时会同时启动cAdvisor,且一个 cAdvisor 只监控一个 Node 节点的信息。cAdvisor 自动查找所有在其所在节点上的容器,自动采集 CPU、内存、文件系统和网络使用的统计信息。cAdvisor 通过它所在节点机的 Root 容器,采集并分析该节点机的全面使用情况。

(4)容器运行时

容器运行时插件(Container Runtime Interface,简称 CRI)是 Kubernetes 容器运行时接口,它将 Kubelet 与容器运行时解耦,将原来完全面向 Pod 级别的内部接口拆分成面向 Sandbox 和 Container 的 gRPC 接口,并将镜像管理容器管理分离到不同的服务。

image.png

Kubelet 架构

image.png

Pod 启动流程示例

image.png

3.2 kube-proxy

每个 Node 节点都运行一个 kube-proxy 服务进程,它通过监听 apiserver 中 service 和 endpoint 的变化情况,利用 iptables 的方式实现通信和负载均衡

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

推荐阅读更多精彩内容