写点什么

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

评论

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

观测云获亚马逊云科技年度 DevOps 合作伙伴奖

观测云

报告发布|“双轮驱动”重磅升级,天猫联合瓴羊、罗兰贝格发布《天猫DTC企业经营指南 :以人为本,品牌致胜》

瓴羊企业智能服务

【原创】k8s 微服务滚动发布(服务持续可用)实践笔记

车江毅

k8s 不停机发布 滚动发布

StartDT奇点云邀您参加2022云栖大会,11月3-5日杭州见

奇点云

云栖大会 奇点云

软件测试校招面试真题 | 面试官必问面试题之你有什么想问我的?

测试人

以开发之名|斗罗大陆:创造一个尽情探险的开放式游戏世界

HarmonyOS SDK

华为 HMS Core

技术贴 | 走进 PostgreSQL 行级安全策略

KaiwuDB

时序 #数据库

uniapp实现国际化多语言切换

源字节1号

软件开发

数据结构学习,稀疏矩阵(三元组和十字链)

IC00

学习 数据结构 算法 学习笔记 10月月更

校招面试真题 | 和面试官聊的很 high,但就是拿不到 offer,怎么办?

霍格沃兹测试开发学社

基金营销存量博弈时代,数字内容小程序化助力破局

Speedoooo

小程序 基金 数字内容 小程序容器 买方投顾

软件测试 | 测试开发 | 校招面试真题 | 面试官必问面试题之你有什么想问我的?

测吧(北京)科技有限公司

测试

Linux 各个Namespace 的作用

忙着长大#

linux namespace

区服分析丨更透彻的游戏营运数据解读,助力高效增长

HarmonyOS SDK

分析

OpenYurt v1.0 正式发布!一文了解三大社区 SIG 重点更新

阿里巴巴云原生

阿里云 开源 云原生 openyurt 版本升级

Kubernetes 安全专家(CKS)考试技巧

HummerCloud

Kubernetes 云原生 考试经验 CKS 10月月更

信息安全 Dapr 策略咋控制

CTO技术共享

个人成长 dapr 10月月更

万物皆可集成系列:低代码通过Web API

葡萄城技术团队

集成 数据录入

峰会回顾 | 基于StarRocks,百草味如何通过数据赋能快消品行业

StarRocks

#数据库

Windows Server 2008 R2将tomcat添加进系统服务

我爱娃哈哈😍

tomcat windows 服务器运维

探究线程与进程的区别这一问题

C++后台开发

线程 多线程 进程 linux开发 C++开发

业务系统发布新版本咋流量保障

CTO技术共享

个人成长 灰度发布 10月月更

分布式事务-什么是分布式事务

zarmnosaj

10月月更

Go语言入门02—运算符

良猿

Go golang 后端 10月月更

如何利用Java在Word中创建表格

Geek_249eec

Java word 表格

训练营 | 如何成为一名开源社区贡献者?

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

小白必看——台式机选购指南

科技热闻

C# TreeView控件方法属性学习

IC00

C# 学习 程序员 上位机 10月月更

如何在 SAP Business Application Studio 里创建 SAP UI5 应用并部署到 BTP 平台上

汪子熙

云原生 云平台 SAP 10月月更

校招面试真题 | 和面试官聊的很 high,但就是拿不到 offer,怎么办?

测试人

虚拟集群vcluster 多租户实战演练

CTO技术共享

个人成长 集群管理 10月月更

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