Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

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:26851

评论

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

夏天不开车?沃尔沃XC40纯电版为你带来清凉与健康

新消费日报

公众期待开放的自然语言处理神器

百度开发者中心

人工智能 ChatGPT 文心一言

文心一言 VS 讯飞星火 VS chatgpt (86)-- 算法导论8.2 3题

福大大架构师每日一题

福大大架构师每日一题

引领未来,挑战与机遇并存

百度开发者中心

人工智能 图像识别 文心大模型

ClickHouse在腾讯游戏营销效果分析中的探索实践

腾讯云大数据

Clickhouse

OpenHarmony使用ArkUI Inspector分析布局

OpenHarmony开发者

OpenHarmony

开发指导—利用CSS动画实现HarmonyOS动效(二)

HarmonyOS开发者

HarmonyOS

数仓资源管控理论已掌握,是时候实战了

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号9月PK榜

NFTScan | 08.28~09.03 NFT 市场热点汇总

NFT Research

NFT\

入坑ThreadLocal,这一篇文章就够了

树上有只程序猿

Java ThreadLocal

时尚行业的前沿与挑战

百度开发者中心

人工智能 ChatGPT 生成式AI 文心一言

细数2019-2023年CWE TOP 25 数据,看软件缺陷的防护

华为云开发者联盟

安全 后端 华为云 华为云开发者联盟 企业号9月PK榜

重新定义内容创作和教育的新范式

百度开发者中心

人工智能 文心一言 文心大模型‘

业务不想停机,就得这么实现MongoDB迁移

NineData

mongodb 数据迁移 NineData MongoDB迁移 全量数据迁移

麒麟云容器运行时优化之容器停止优化

麒麟云

Kubernetes 云原生 银河麒麟云原生操作系统

龙智携手Atlassian和JFrog举办线下研讨会,探讨如何提升企业级开发效率与质量

龙智—DevSecOps解决方案

Atlassian JFrog

AI应用如何进行测试?

互联网工科生

人工智能 AI

“AI+算力”为出海企业打上了一剂“强心针”

千流出海

媒体 采访 出海

聚焦用户隐私安全,华为助力APP开发者守护个人信息安全

最新动态

如何避免财务共享流程设计不够落地导致实施初期重新设计的问题

用友BIP

智能财务 财务共享

影响LED显示屏价格的因素

Dylan

软件 硬件 价格 LED显示屏 led显示屏厂家

开箱即用!3个视频教你玩转华为云CodeArts Board!

华为云PaaS服务小智

云计算 软件开发 华为云

荣耀开发者沙龙 · 北京站 活动精彩回顾

荣耀开发者服务平台

开发者 互联网技术 互联网生态 安卓 ios honor

做等保测评的公司有多少家?哪里可以查到?

行云管家

网络安全 等级保护 等保测评 等保测评机构 行云堡垒

你应该知道的几个大数据平台相关术语

行云管家

数据中台 数据安全 大数据平台

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