Kubernetes 定义
Kubernetes 是一种开源软件,可自动部署、管理和扩展容器化应用程序。它可编排虚拟机群集,调度容器,并提供自我修复、负载均衡和跨环境可移植性。
Kubernetes 是一种开源软件,可自动部署、管理和扩展容器化应用程序。它可编排虚拟机群集,调度容器,并提供自我修复、负载均衡和跨环境可移植性。
Kubernetes 是 DevOps 用于跨群集部署、管理和扩展容器的开源软件。Docker 是另一种开源技术,它是通常与 Kubernetes 结合使用的默认容器文件格式。
容器将应用及其依赖项和配置打包在一起,以便它能在不同环境中一致运行。随着应用程序的演变,你可能会在许多服务器上运行许多容器,而手动协调所有这些会变得很复杂。Kubernetes 通过开源 API 和一个控制系统来解决这种复杂性,该系统决定哪些内容应在何处运行,并保持其运行。
Kubernetes 会编排虚拟机群集,并根据可用计算资源和每个容器的资源需求调度容器运行。
Kubernetes 管理服务发现和负载均衡,因此即使 Pod 随时间变化,流量也能路由到正确的 Pod。
Kubernetes 会根据计算利用率和你设置的期望状态扩展工作负载。
Kubernetes 会检查资源运行状况,并在出现问题时重启或复制容器。它会重启或替换失败的容器,并在工作负载准备好之前阻止流量。
Kubernetes 支持对运行中的应用程序使用部署模式,包括基于你描述的期望状态的自动推出和回滚。
Kubernetes 为密码或令牌等敏感信息提供机密和配置管理。
Kubernetes 可以根据其存储编排模型装载你选择的存储系统(例如,本地存储或公共云选项)。
Kubernetes 围绕 API 对象构建 - 这些对象是你声明和管理的资源。示例如下:
Pod:运行一个或多个容器的基本单元。
服务:一种用于公开应用并将流量路由到变化的 Pod 的稳定方式。
部署:一种描述期望的应用状态并随时间更新它的方式(通常与推出和回滚相关)。
节点:群集中运行 Pod 的机器。
控制平面:管理群集状态和调度决策的组件。
你为应用程序声明预期状态(应运行什么、多少副本、资源需求)。
控制平面通过 Kubernetes API 和后备存储记录并执行该请求。
调度器会将 Pod 放置到资源充足的节点上。
节点组件运行工作负载。
控制器会持续协调,使实际状态与期望状态一致 - 根据需要扩展、替换和更新工作负载。
Kubernetes 群集通常分为两部分:管理群集的控制平面和运行工作负载的工作器节点。
这些组件管理群集的整体状态:
kube-apiserver:公开 Kubernetes HTTP API(请求的前门)。
etcd:用于群集数据的一致、高可用键值存储。
kube-scheduler:查找需要放置的 Pod 并将其分配给节点。
kube-controller-manager:运行将实际状态协调到期望状态的控制器。
cloud-controller-manager(可选):将 Kubernetes 连接到特定于云提供商的控制逻辑。
每个工作器节点都运行维护 Pod 和网络规则的软件:
kubelet:确保 Pod 在节点上运行,包括它们的容器。
kube-proxy(可选):维护网络规则以支持服务。
container runtime:在节点上运行容器。
Kubernetes 不直接在抽象层面调度单个容器。它会将一个或多个容器分组到一个 Pod 中,而 Pod 会成为基本操作单元。然后,Pod 根据你定义的期望状态纵向扩展或缩减。
在实践中,这意味着:
你描述想要运行的应用。
Kubernetes 将 Pod 调度到具有可用计算的机器上。
控制器使群集朝着你要求的状态移动。
Pod 可以来来去去,因此 Kubernetes 提供基元;基元是指你组合起来描述和在群集上运行应用的基本构建块,用于提供访问工作负载的稳定方式。
每个 Pod 获得自己的群集范围 IP 地址,并且在 Kubernetes 网络模型中, Pod 无需网络地址转换 (NAT) 就能跨节点通信。
服务 API 为一组后端 Pod 提供稳定的 IP 地址或主机名,即使各个 Pod 随时间变化。
Kubernetes 会维护终结点切片对象,以跟踪当前支持服务的 Pod。
为了将服务公开给群集外的客户端,Kubernetes 支持网关 API(以及作为其前身的入口)。
某些环境可使用 LoadBalancer 服务类型将服务对外公开。
Kubernetes 群集通常包括扩展核心组件之外功能的附加载项。示例包括:
DNS,用于群集范围的名称解析。
Web UI(仪表板),用于群集管理。
容器资源监视,用于指标收集。
群集级日志记录,用于集中收集日志。
Kubernetes 在机器群集上运行容器化应用程序,并使它们保持在你描述的状态。它通过将工作放在正确的机器上、将流量路由到正确的位置以及监视故障和变化来实现这一点。
大多数 Kubernetes 工作负载始于声明的“期望状态”(应运行什么、多少副本以及如何公开它们)。Kubernetes 围绕声明式配置和自动化构建。
Kubernetes 根据可用计算资源和每个容器的需求将容器调度到群集中的机器上。容器在 Pod 内运行,这是 Kubernetes 放置在机器上的单元。
控制器监视群集,并使用 API 服务器进行更改努力,使当前状态更接近期望状态。
调度是“这应在哪里运行?” 的决策。
Kubernetes 将容器分组到 Pod 中,然后将这些 Pod 放置在机器上。
kube-scheduler 查找尚未分配的 Pod,并为它们选择一个节点。
在每个节点上,kubelet 确保 Pod 正在运行(包括它们的容器)。
容器和 Pod 可以被创建、移动或替换,因此应用程序需要稳定的方式来找到彼此。
Kubernetes 管理服务发现并使用负载均衡,以便即使 Pod 随时间变化,流量也能路由。
服务 API 为由一个或多个 Pod 支持的服务提供稳定的 IP 地址或主机名,Kubernetes 通过 EndpointSlice 对象跟踪这些支持的 Pod。
当服务后面的 Pod 发生变化时,服务路由会调整,确保流量继续到达当前后端。
Kubernetes 可以将工作负载扩展到你设置的状态,包括基于计算利用率的扩展。
常见的扩缩容思路包括:
增加副本(增加 Pod)来处理更高的需求。
当需求下降时减少副本。
资源跟踪,让放置决策反映 CPU 和内存需求。
这与“期望状态”模型相关联:你指定目标,控制器持续努力实现它。
Kubernetes 包括旨在维持工作负载正常和可用性的自我修复行为。具体包括:
重启失败的容器(容器级重启)。
替换失败的 Pod,以保持请求的副本数量(副本替换)。
当节点不可用时重新调度工作负载。
从服务终结点移除失败的 Pod,这样流量只流向正常的 Pod(服务的负载均衡)。
自我修复会检查容器的运行状况,并在出现问题时重启或复制它们。
关键绩效指标(KPI,或称指标)用于了解群集运行状况和工作负载行为。
Kubernetes 系统组件发出对仪表板和警报有用的指标(Prometheus 格式)。
指标通常在组件的 /metrics HTTP 终结点上可用,包括 kube-apiserver、kube-scheduler、kubelet、kube-proxy 和 kube-controller-manager 等组件。
群集正常运行信号(组件级指标和错误模式)
工作负载稳定性(例如,频繁重启或替换)
容量压力(资源分配与需求,与扩展决策相关)
监视能让团队更全面地了解群集资源、Kubernetes API、容器和日志,从而缩短问题和修复之间的反馈循环。
当团队需要一种一致的方式在多台机器上运行大量容器,同时让平台处理流量路由、扩展和恢复时,通常会选择 Kubernetes。
Kubernetes 可以扩展工作负载,即根据需求变化增大或收缩它们以达到目标状态,并可基于计算利用率进行扩展。
具有可变流量的 Web 应用(活动、季节性高峰):随着负载变化调整副本。
批处理或事件驱动处理:为突发添加容量,然后缩减。
微服务:扩展特定服务,而不扩展整个应用程序。
Kubernetes 支持自动装箱,即根据 CPU 和内存需求将容器放置在节点上,以更好地利用可用资源。它还跟踪资源分配,因为它管理工作负载。
多团队的共享群集:通过将工作负载放置在有资源的地方来减少浪费的容量。
混合工作负载群集(服务加作业):无需手动放置即可保持节点忙碌。
Kubernetes 可以通过 DNS 或 IP 地址公开工作负载,还可分发网络流量以保持部署稳定。它还会管理服务发现,并在工作负载变化时纳入负载均衡。
微服务通信:服务通过稳定名称找到彼此,而 Pod 会不断变化。
稳定终结点后的内部 API:仅将流量路由到当前后端。
Kubernetes 旨在替换失败的容器,在节点不可用时重新调度工作负载,并保持期望状态。示例包括容器重启、副本替换,以及从服务终结点移除运行不正常的 Pod,使流量只流向运行正常的 Pod。
始终在线的服务:无需人工干预即可重启或替换失败的实例。
节点频繁变动的群集:当节点宕机时重新调度工作负载。
服务背后的服务:停止将流量路由到运行不正常的 Pod。
Kubernetes 支持自动推出和回滚。由你描述期望状态,Kubernetes 以受控速率朝着该目标推进实际状态。
频繁的应用程序更新:逐步推出更改,然后在需要时还原。
发布多个服务的团队:保持跨应用的发布机制一致。
容器化应用与基础结构分离,Kubernetes 帮助跨本地、无服务器、混合云和多云环境将它们从本地机器移动到生产环境,同时保持跨环境的一致性。
开发/测试/生产一致性:在不同环境中保持相同的打包和调度模型。
混合部署:在本地运行系统的部分组件,使用相同的编排方法在云中运行其他部分。
Kubernetes 提供了一种通用的方式来运行容器化工作负载,支持声明式配置和机器学习自动化,并得到庞大且不断增长的工具和社区支持。
随着团队构建由许多服务、短生命周期工作负载和频繁更新组成的系统,Kubernetes 仍然是一个实用的基础,因为它专注于可重复的操作:
跨环境的一致操作(容器与依赖项一起打包,在不同环境中以相同方式运行)。
广泛、活跃的生态系统,具有广泛可用的服务、支持和工具。
通过社区构建的加载项、插件和一致性程序的可扩展性,该程序保持核心 API 跨版本一致。
如果你正在构建或运行工作负载,Azure Kubernetes 服务 (AKS) 可帮助你部署和管理容器化应用程序,同时由 Azure 管理控制平面。