Kubernetes – 节点

Kubernetes 节点是实际工作发生的工作器或主机。每个 Kubernetes 节点都有执行 Pod 所需的服务,并由控制平面控制。每个 Kubernetes 节点可以有多个 Pod,Pod 内有容器运行。每个节点中有 3 个进程用于调度和管理这些 Pod。  

  1. Container runtime需要容器运行时来运行在 pod 内部 pod 上运行的应用程序容器。示例-> Docker。
  2. kubelet: kubelet 与容器运行时以及 Node 交互。它是负责启动包含容器的 pod 的进程。
  3. kube-proxy:负责将请求从Kubernetes 服务转发到pod 的进程。它具有智能逻辑,可以将请求转发到工作节点中的正确 pod。

Kubernetes

Kubernetes是一个开源容器管理工具,可自动执行容器部署、容器扩展、降级和容器负载平衡(也称为容器编排工具)。它用 Golang 编写,拥有庞大的社区,因为它最初由 Google 开发,后来捐赠给 CNCF(云原生计算基金会)。Kubernetes 可以将“n”个容器分组为一个逻辑单元,以便轻松管理和部署它们。它可以与所有云供应商(即公共、混合和本地)完美配合。

什么是 Kubernetes 节点?

Kubernetes Pod 如何工作?

Pod 是 Kubernetes 中存在的最小单元。它类似于 C 或 C++ 语言中的令牌。特定 Pod 可以有一个或多个应用程序。Pod 的性质是短暂的,这意味着在任何情况下,如果 Pod 发生故障,Kubernetes 都可以自动创建该 Pod 的新副本/重复并继续操作。Pod 可以根据需求包含一个或多个容器。容器甚至可以是 Docker 容器。Kubernetes 中的 Pod 提供环境依赖项,包括持久存储卷,这意味着它是永久性的,并且可用于所述集群中的所有 Pod,甚至在 Pod 内运行容器所需的配置数据。

 

Kubernetes 节点如何工作?

节点的主要工作是为包含容器的 pod 提供便利。根据分配给它们的角色,节点分为两种:工作节点和主节点。主节点负责工作节点,节点负责 pod。根据项目要求,工作节点没有特定的限制,您可以拥有 n 个节点,并且建议至少拥有两个主节点,以防一个主节点发生故障,另一个将负责管理工作节点。

 

Kubernetes 节点名称唯一性

在 kubernetes 集群中,两个节点不应该有相同的名称,当集群中的对象被修改时,这将导致集群不一致。Kubernetes 集群假定具有相同名称的节点将具有相同的标签、相同的状态和卷。如果实例被更新,那么具有相同名称的节点将很难找到您当前谈论的节点。

对于具有相同节点名称有一些假设,例如,如果您在每个节点中运行单个 pod,那么多个 pod 具有相同的名称就不会成为问题。

Kubernetes 节点未就绪

要查看 kubernetes 集群中可用的节点数,您可以使用以下命令。

kubectl get nodes

上述命令还将显示以下内容

Kubenrets 节点状态

  • Ready节点运行正常,调度程序可以在该节点中调度 Pod。
  • NotReady:节点尚未准备好运行 Pod。发生这种情况的原因有很多,其中一些是网络问题、Pod 故障或 kubelet 错误。
  • Unknow如果节点未响应调度程序来调度 Pod。如果主节点无法与该节点通信,则状态将显示为未知。

Kubernetes 节点的自注册

集群中已经可用的节点或将要新建的节点应该在 API 服务器中注册,这样主服务器将开始识别 kubernetes 集群中可用的节点。

与其手动操作,不如自动化,这也是一种首选方式。默认情况下,kubernetes 集群中将启用此自注册,kubelet 将负责自动注册。

Kubernets 节点自注册的不同选项

  1. 访问 Kubeconfig 文件: 我们可以向 kubelet 提供 kubeconfig 文件的路径,以便它可以通过 API 服务器进行身份验证。
  2. 设置标志 True:“–register-nodes”默认值为 true,当设置为 true 时,kubelet 将联系 API 服务器并将所有信息发送到新添加的节点,API 服务器在 kubernetes 集群中创建节点对象,kubernetes 调度程序将使用节点对象在节点上调度 pod。

还有其他一些选项,但以上是最常用的选项。

手动 Kubernetes 节点管理

kubernetes 中的手动节点管理是指手动注册节点,而无需任何节点的自我注册,可以使用某些命令来手动管理节点,如下所示。

  1. kubectl create node.
  2. kubectl delete node.
  3. kubectl create node.
  4. kubectl delete node.

在 kubernetes 集群中创建对象之前,您应该在 yaml 文件中提及节点名称、标签和污点。要了解有关 kubectl 的更多命令,请参阅Kubernetes – Kubectl 命令。要控制特定节点上的 pod 调度,您可以使用污点和容忍度或包含 pod 的标签来调度特定节点上的 pod。

 

Kubernetes 节点状态

要查看节点的状态和其他信息,请使用 kubectl:

$ kubectl describe node <node-name>

 

 一个健康的节点由下面的JSON结构描述:

"conditions": [
 {
   "type": "Ready",
   "status": "True",
   "reason": "KubeletReady",
   "message": "kubelet is posting ready status",
   "lastHeartbeatTime": <last heartbeat time>,
   "lastTransitionTime": <last transition time>
 }
]

Kubernetes 节点控制器

为了监控集群中的节点,Kubernetes 有一组服务可以根据元数据监控数据。名称。如果 –register-node 标志为 true,Kubernetes 会自动注册该节点。

–register-node = true

要手动实现,您需要设置

–register-node = false

资源容量跟踪

当将节点自注册到 Kubernetes API 时,节点对象将跟踪有关节点资源容量的信息。节点报告容量意味着节点中有多少个 CPU、多少内存可用。

 

以下是注册时将跟踪的节点资源:

  1. CPU
  2. Memory记忆
  3. Ephemeral storage临时存储
  4. Persistent storage持久存储

如果节点没有足够的容量来容纳 pod,那么调度程序会确保 pod 不会在该特定节点上进行调度。

Kubernetes 节点拓扑

在 kubernetes 中,一些 pod 相互依赖,就像 statefullset 应用程序一样,在这种情况下,我们需要确保两个 pod 将部署在同一个节点上,在这种情况下您可以使用节点拓扑。

您可以为 pod 分配标签,这将有助于将所有同名的 pod 调度到某个节点,这对于性能相关的 pod 很有帮助。

节点拓扑的示例 YAML 文件

apiVersion: v1

kind: Pod

metadata:

name: my-pod

spec:

containers:

– name: my-container

image: nginx

nodeSelector:

topology.kubernetes.io/zone: us-east-1a

节点优雅关闭

节点可以通过两种方式关闭,一种是优雅关闭,另一种是强制关闭。优雅关闭节点将给节点中运行的 pod 留出时间保存其状态,之后它们将优雅地终止,并发出关闭通知,而不是突然关闭。

如果节点上运行的 pod 在宽限期后不会终止,则它们将被强制终止,并且如果 pod 没有响应,它们将自动终止。

优雅终止节点的好处

  1. 没有数据丢失。
  2. 在终止之前留出时间来保存 pod 的状态。

非正常节点关闭处理

在特定节点上运行的 Pod 将被终止,而不会正常关闭。节点上运行的kubelet CLI将不会向在该 Pod 中运行的 Pod 发出任何通知,因此 Pod 将没有时间存储数据,也无法保留 Pod 的状态。

在 kubernets 集群中,非优雅终止被认为是一个最大的问题,因为包含状态完整应用程序的 pod 将没有时间来保留状态,并且 pod 将自动处于终止状态,这意味着控制器不会在运行良好的节点中创建新的 pod。

Kubernetes 节点与 Kubernetes Pod

节点

Pod

Kubernetes 节点将允许一个或多个 pod 在其上运行。

Kubernetes pods将包含一个或多个计划在节点上运行的容器。

Node 可以表示一个允许您运行 kubernetes 的虚拟机。

Pod 将用于在节点上运行容器。

CPU、内存和存储等资源将由节点提供

pod 将使用来自节点的所有资源。

如果您在任何云上使用 kubernetes,那么节点将由云本身负责,或者 kubernetes 将负责节点。

节点将负责 kubernetes pod。

 

管理 Kubernetes 节点

管理 Kubernetes 节点涉及许多任务,从部署新节点到管理现有节点,这有助于维护应用程序对最终用户的高可用性,以下是管理 Kubernetes 节点的全面概述。

 
  • 配置和部署 Kubernetes 节点。
  • 维护和更新 Kubernetes 节点。
  • 扩展 Kubernetes 节点以提高性能和可用性。

优化 Kubernetes 节点性能

通过优化集群节点使用的资源,可以提高 Kubernetes 集群的性能。如果资源利用率很高,性能就会慢慢下降。在调度策略和优化容器运行时参数时,你需要更加小心,这样可以大大提高 Kubernetes 集群的速度。

资源利用优化

  • 集装箱包装。
  • 资源请求和限制。
  • 驱逐政策。
  • 资源监控。

调度策略

  • 节点亲和性和反亲和性。
  • 工作负载感知调度。
  • 动态调度。

容器运行时调优

  • 容器运行时配置。
  • 图像优化。
  • 容器运行时更​​新。
  • 运行时内存管理。

保护 Kubernetes 节点

为了阻止未经授权的访问、漏洞和潜在攻击,您需要保护您的 kubernetes 集群和容器化应用程序,您可以借助 kubernetes 提供的以下服务来保护 kubernetes 集群。

  • 节点强化和漏洞管理。
  • 网络安全和访问控制。
  • 容器运行时和安全注意事项。

 

posted @ 2024-06-05 03:09  wongchaofan  阅读(13)  评论(0编辑  收藏  举报