AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Kubernetes Node 全解

  • 2020-05-14
  • 本文字数:3013 字

    阅读完需:约 10 分钟

Kubernetes Node全解

介绍

Kubernetes 在 GitHub 上拥有超过 48,000 颗星,超过 75,000 个 commit,拥有以 Google 为代表的科技巨头公司为主要贡献者。可以说,Kubernetes 已迅速掌管了容器生态系统,成为容器编排平台的真正领导者。


Kubernetes 提供了诸如部署的滚动和回滚、容器健康检查、自动容器恢复、基于指标的容器自动扩展、服务负载均衡、服务发现(适用于微服务架构)等强大功能。在本文中,我们将讨论 Kubernetes 重要的基本概念、master 节点架构,并重点关注节点组件。

理解 Kubernetes 及其抽象

Kubernetes 是一个开源的编排引擎,用于自动部署、扩展、管理和提供托管容器化应用程序的基础架构。在基础架构级别,Kubernetes 集群由一组物理或虚拟机组成,每个机器都以特定角色运行。


Master 机器就像是所有业务的大脑,负责编排所有运行在 节点 机器上的容器。每个节点都配有一个容器运行时。节点接收来自 master 的指令,然后执行操作来创建 pod、删除 pod 或调整网络规则。



图 1:Kubernetes 节点组件架构


Master 组件 负责管理 Kubernetes 集群。它们管理 pod 的生命周期,pod 是 Kubernetes 集群内部署的基本单元。Master Server 运行以下组件:


  • kube-apiserver - 主要组件,为其他 master 组件公开 API。

  • etcd - 分布式密钥/值存储库,Kubernetes 使用它来持久化存储所有集群信息。

  • kube-scheduler – 依照 pod 规范中的信息,来决定运行 pod 的节点。

  • kube-controller-manager - 负责节点管理(检测节点是否出现故障)、pod 复制和端点创建。

  • cloud-controller-manager - 守护进程,充当 API 和不同云提供商工具(存储卷、负载均衡器等)之间的抽象层。


节点组件 是 Kubernetes 中的 worker 机器,受到 master 的管理。节点可以是虚拟机(VM)或物理机器——Kubernetes 在这两种类型的系统上都能良好运行。每个节点都包含运行 pod 的必要组件:


  • kubelet – 为位于那个节点上的 pod 监视 API 服务器,确保它们正常运行

  • cAdvisor - 收集在特定节点上运行着的 pod 的相关指标

  • kube-proxy - 监视 API 服务器,实时获取 pod 或服务的变化,以使网络保持最新

  • 容器运行时 - 负责管理容器镜像,并在该节点上运行容器

Kubernetes 节点组件详解

总而言之就是,节点上运行着两个最重要的组件——kubelet 和 kube-proxy,除此之外还有一个负责运行应用容器化应用程序的容器引擎。

kubelet

kubelet 处理着 master 和在其上运行的节点之间的所有通信。它以 manifest 的形式接收来自主设备的命令, manifest 定义着工作负载和操作参数。它与负责创建、启动和监视 pod 的容器运行时进行接合。


kubelet 还会周期性地对配置的活跃度探针和准备情况进行检查。它会不断监视 pod 的状态,并在出现问题时启动新实例。kubelet 还有一个内部 HTTP 服务器,在端口 10255 上显示一个只读视图。除此之外,在/healthz 上还有一个健康检查端点,以及一些其他状态端点。例如,我们可以在/pods 获取正在运行的 pod 的列表。我们还可以在/spec 获取 kubelet 正在运行的机器的详情。

kube-proxy

kube-proxy 组件在每个节点上运行,负责代理 UDP、TCP 和 SCTP 数据包(它不了解 HTTP)。它负责维护主机上的网络规则,并处理 pod、主机和外部世界之间的数据包传输。它就像是节点上运行着的 pod 的网络代理和负载均衡器一样,通过在 iptables 使用 NAT 实现东/西负载均衡。


kube-proxy 过程位于连接到 Kubernetes 的网络和在该特定节点上运行的 pod 之间。它本质上是 Kubernetes 的核心网络组件,负责确保跨集群的所有元素有效地进行通信。当用户创建 Kubernetes 服务对象时,kube-proxy 实例会负责将该对象转换为位于 worker 节点的、本地 iptables 规则集上的有意义的规则。iptables 用于将分配给服务对象的虚拟 IP 转换为服务映射的所有 pod IP。

容器运行时

容器运行时负责从公有或私有镜像仓库中拉取镜像,并根据这些镜像运行容器。当下最流行的容器引擎无疑是 Docker,不过 Kubernetes 还支持诸如 rkt、runc 等的其他容器运行时。正如我们在上文中提到过的,kubelet 会直接与容器运行时交互,以启动、停止或删除容器。

cAdvisor

cAdvisor 是一个开源代理,它能够监视资源使用情况并分析容器的性能。cAdvisor 最初由谷歌创建,现在已与 kubelet 集成。


位于每个节点上的 cAdvisor 实例,会收集、聚合、处理和导出所有正在运行的容器的指标,如 CPU、内存、文件和网络使用情况等。所有数据都将发送到调度程序,以确保调度程序了解节点内部的性能和资源使用情况。这些信息会被用于执行各种编排任务,如调度、水平 pod 扩展、管理容器资源限制等。

从动手实操了解节点组件端点

接下来,我们将安装一个 Kubernetes 集群(在 Rancher 的帮助下),以此来开始探索节点组件公开的一些 API。要完成下面的操作,我们需要:


  • Google Cloud Platform 帐户(任何公有云也都是一样的)

  • 一台主机,后续 Rancher 会运行在它上面(可以是个人 PC / Mac 或公有云中的 VM)

  • 在同一主机上,安装 kubectl 和 Google Cloud SDK。验证好您的相关 credential(gcloud init 和 gcloud auth login),确保 gcloud 能正常访问您的 Google Cloud 账户

  • 在 GKE 上运行的 Kubernetes 集群(运行 EKS 或 AKS 也是相同的)

启动 Rancher 实例

首先,启动 Rancher 实例。这一过程非常简单,参考快速上手指南即可:


https://rancher.com/quick-start/

使用 Rancher 部署 GKE 集群

使用 Rancher 设置和配置 Kubernetes 集群,同样是按指南进行操作即可:


https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/gke/


部署好集群后,我们可以快速部署 Nginx 以进行测试:



为了与 Kubernetes API 进行交互,我们需要在本地计算机上启动代理服务器:



让我们检查一下进度,看它是否正在正常运行,以及是否在监听默认端口:



现在,在浏览器中,检查 kubelet 公开的各种端点:



图 2:kubelet API 端点


接下来,显示集群可用节点的列表:



我们可以通过 spec 来检查所有列出的、使用 API 的节点。在本文的示例中,我们使用 n1-standard-1 机器类型(1 个 vCPU,3.75GB RAM,10GB 的根大小磁盘)创建了一个 3 节点集群。我们可以通过访问专用端点来确认这些规范:




图 3:Kubernetes 节点规范列表


在不同端点使用相同的 kubelet API,我们可以检查我们创建的 Nginx pod,以查看它们正运行在什么节点上。


首先,列出正在运行的 pod:



现在,curl 每个节点的/proxy/pods 端点,查看其运行的 pod 列表:




图 4:Kubernetes 节点的 pod 列表


我们还可以检查 cAdvisor 端点,它会以 Prometheus 格式输出大量数据。默认情况下,这在/metrics HTTP 端点可用:




图 5:Kubernetes / metrics 端点


SSH 到节点并直接调用 kubelet 端口,也可以获得相同的 cAdvisor 或 pod 信息:


清理

要清理我们在本文中使用的资源,只需从 Rancher UI 中删除 Kubernetes 集群即可(选择集群并点击 Delete 按钮就可以了)。这将删除我们的集群正在使用的所有节点以及关联的 IP 地址。如果您是在公有云中使用 VM 来运行 Rancher,那么您也需要处理它。找出您的实例名称,然后将其删除即可:


结语

在本文中,我们讨论了 Kubernetes 节点机器的关键组件。之后,我们使用 Rancher 部署了一个 Kubernetes 集群,并完成了一个小型部署以帮助我们学习使用 kubelet API。


若想了解有关 Kubernetes 及其架构的更多信息,Kubernetes 官方文档是一个不错的起点:https://kubernetes.io/docs/concepts/overview/components/


2020-05-14 22:26858

评论

发布
暂无评论
发现更多内容

深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN

汀丶人工智能

人工智能 深度学习 元学习 元强化学习 6 月 优质更文活动

深入理解Pod的核心知识

穿过生命散发芬芳

pod 6 月 优质更文活动

Nautilus Chain测试网迎阶段性里程碑,模块化区块链拉开新序幕

股市老人

VSD Viewer for Mac:Visio绘图文件阅读器

背包客

macos Mac软件 Visio文件查看工具 Visio Viewer for Mac VSD Viewer

华为云数据库GaussDB:给世界一个更优选择

YG科技

WWDC2023 Session系列:探索XCode15新特性 | 京东云技术团队

京东科技开发者

xcode wwdc session WWDC 2023 企业号 6 月 PK 榜

MySQL8新特性窗口函数详解

越长大越悲伤

MySQL sql

2023开放原子全球开源峰会OpenCloudOS社区年会顺利举行

开放原子开源基金会

开源 开放原子 OpenCloudOS社区

DEVONthink Pro 3 for Mac:Mac强大的文档管理工具

背包客

macos 文档管理软件 Mac软件 DEVONthink Pro DEVONthink

STM32L0 ADC使用HAL库关于校准问题的说明

矜辰所致

STM32L051 ADC 6 月 优质更文活动

OneCode-流程引擎设计

codebee

基于STM32设计的智能灌溉控制系统

DS小龙哥

6 月 优质更文活动

激活SBOM内生价值 推动供应链体系建设健康有序|2023开放原子全球开源峰会软件物料清单(SBOM)分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 软件物料清单(SBOM)

华为云数据库GaussDB:数字化转型和可持续发展的更优选择

YG科技

中国科学院院士梅宏:推进构建面向全球的开源生态治理体系

开放原子开源基金会

开源 开放原子 梅宏

柏睿向量存储查询引擎基于LLM实现特定垂直领域的知识问答功能

新消费日报

PDF Expert for mac:pdf编辑工具中文最新

背包客

macos PDF Mac软件 PDF Expert PDF Expert for Mac

行业翘楚论道未来想象|2023开放原子全球开源峰会云原生分论坛圆满落幕

开放原子开源基金会

开源 云原生 开放原子

阿里资深专家撰写出的Nginx底层与源码分析手册,GitHub已爆赞

互联网架构师小马

nginx

深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM

汀丶人工智能

人工智能 深度学习 元学习 元强化学习 6 月 优质更文活动

对线面试官-Sychronized和ReentrantLock

派大星

Java 面试题

以商业实践反哺开源技术跃升|2023开放原子全球开源峰会开源商业化创新发展分论坛成功举行

开放原子开源基金会

开源 开源商业化 开放原子全球开源峰会

TS接口类型

不叫猫先生

6 月 优质更文活动

这项国家级安全检测,腾讯云慧眼安全能力再获认可!

牵着蜗牛去散步

人工智能 腾讯云 网络安全 腾讯云AI 腾讯云慧眼人脸核身

Alibaba官方上线!SpringBoot+SpringCloud全彩指南

互联网架构师小马

Java 微服务 Spring Cloud Spring Boot

NestJs 管道(Pipe)

小鑫同学

typescript 后端 nestjs 6 月 优质更文活动

华为云数据库GaussDB:数字化转型的可信之选

YG科技

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点,和一个血案

汪子熙

后台开发 abap Netweaver 字符串处理 6 月 优质更文活动

【C/C++】extern 的一些注意事项

sidiot

c 6 月 优质更文活动

聚焦企业实践一线与个体职业成长|2023开放原子全球开源峰会OSPO分论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 OSPO 开放原子

Kubernetes Node全解_文化 & 方法_Rancher_InfoQ精选文章