发布于 2026-01-06 0 阅读
0

Kubernetes:入门指南

Kubernetes:入门指南

Kubernetes 是一种容器编排工具,通常与 Docker 配合使用。当我们需要扩展容器规模时,就会用到 Kubernetes。

既然有了 Docker,为什么还需要 Kubernetes?

Docker 虽然允许我们创建和管理容器,但它也存在一些局限性。Kubernetes 通过提供更高级的功能来应对这些局限性,从而大规模地编排和管理容器化应用程序。其中一些功能包括:

  • 自动扩展: Kubernetes 可以根据流量或资源使用情况自动扩展或缩减应用程序。Docker 本身并不原生支持这种级别的动态扩展。
  • 自愈:如果任何一个容器发生故障,Kubernetes 将重启该容器。Docker 本身并不提供对此功能的开箱即用支持。
  • 自动部署和回滚:如果当前更新导致应用程序出现任何问题,Kubernetes 会自动回滚到之前的稳定版本。
  • 持久存储管理:它提供了许多高级存储管理功能,其中一项功能是卷快照,它允许我们捕获卷在特定时间点的状态,使其可用于备份和数据恢复。
  • 负载均衡:随着应用程序扩展到多个容器,Kubernetes 会自动平衡这些容器之间的流量,确保没有单个容器过载。

Kubernetes架构图

Kubernetes 的核心在于“集群游戏”。编排主要关乎如何管理集群,也就是容器如何在集群中运行以及运行在何处。

什么是集群?

集群是由多台机器(物理机或虚拟机)组成的,它们协同工作以运行容器化应用程序。集群由节点和控制面板构成。

节点分为两种类型:

  • 主节点:主节点负责扩展、更新和分配工作负载到工作节点。它负责将传入的工作负载均匀地分配到可用的工作节点上。
  • 工作节点:这是我们的应用程序容器运行所在的节点。

控制平面
由以下组件构成。

  • API 服务器:API 服务器公开 Kubernetes API,是所有命令和查询的入口点。我们使用 kubectl(一个命令行工具)与 API 服务器通信。
  • 控制器管理器:通过运行管理集群不同方面的控制器(例如,复制、节点状态),确保集群保持所需的状态。
  • 调度器:根据资源可用性和其他约束条件,将新创建的 Pod 分配给工作节点。
  • etcd:一个分布式键值存储系统,用于保存集群的状态和配置数据。
    有时,当我们想到高扩展性应用程序的服务器时,实际上是 Kubernetes 集群使系统具备可扩展性。该集群能够自动扩展或缩减应用程序,均匀分配工作负载,确保高可用性,通过替换故障容器实现自我修复,并管理无缝更新和回滚。

  • Kubectl是一个命令行工具,用于与主节点通信并管理所有管理任务。

  • Kube-proxy是一个网络代理,用于在每个节点上运行网络规则。它还可以配置为在节点上应用特定的网络规则集。

  • 容器运行时负责运行容器。它管理容器的生命周期(创建容器、停止容器、拉取镜像等)。

每个节点内部包含多个 Pod,每个 Pod 内部又运行着多个容器。

什么是 Pod?
Pod 是 Kubernetes 中最小的可部署单元,它是由一个或多个容器组成的逻辑组。
这些容器共享相同的网络命名空间、IP 地址和存储卷,从而使它们能够高效地相互通信。

这些 Pod 通过服务进行访问
服务:它充当一个稳定的访问点(具有稳定的 IP 地址和端口),即使底层 Pod 是动态创建或销毁的,也能将流量路由到正确的 Pod。

与节点相关的一些关键组件包括:

  • kubelet:kubelet 同时与容器运行时和节点交互。它是负责启动包含容器的 pod 的进程。
  • 容器运行时:需要容器运行时才能运行在 pod 内部的 pod 上运行的应用程序容器。
  • Kube-proxy:它是一个负责将请求从服务转发到 pod 的进程。

所有请求或管理任务都在控制平面中执行。Kubernetes
API 服务器是 Kubernetes 集群的中央管理实体,它充当整个集群的唯一通信点,并对外暴露 Kubernetes API。所有组件,例如 kubectl、其他控制平面组件,甚至节点本身,都与 API 服务器通信以管理和控制集群。

kube API 服务器接收来自 kubectl、CI/CD 工具和一些 SDK 的访问请求。

总而言之,Kubernetes 是一个容器编排平台,它能够扩展容器化应用程序的规模,确保容器的自愈能力,管理容器的部署和回滚,并提供持久存储管理,包括卷快照。它通过自动化容器管理的这些关键环节,帮助构建一个强大而可靠的系统。

文章来源:https://dev.to/niharikaa/kubernetes-a-beginners-guide-jn1