Kubernetes:它是什么,它是如何工作的,以及它为何能改变游戏规则
介绍
Kubernetes于 2014 年 6 月 7 日首次发布,并迅速确立了其作为容器编排事实上的行业标准的地位。根据红帽公司发布的《2022 年企业开源状况报告》,在接受调查的 1296 位 IT 领导者中,70% 的人表示他们的组织正在使用 Kubernetes。
预计这一数字还会进一步上升,因为近三分之一的受访 IT 领导者表示,他们计划在未来 12 个月内大幅增加容器的使用,而且到目前为止,该特定工具的下载量已超过一百万次。
但 Kubernetes 究竟是什么?它是如何工作的?以及你为什么要关注它?在本文中,我将尝试解答这些问题——以及更多!
什么是Kubernetes?
Kubernetes 是一个开源的 容器管理系统。它最初由谷歌工程师开发,旨在帮助他们管理大规模容器化应用程序,此后已成为生产环境中运行容器最流行的解决方案。
Kubernetes 是一个用于运行容器化应用程序的平台。它的设计目的是为了简化这些应用程序的部署、扩展和管理——这些应用程序通常由多个容器组成,这些容器协同工作以提供诸如 Web 服务或数据处理等功能。
Kubernetes 可以被视为一个用于大规模管理容器化应用程序的分布式系统。Kubernetes 集群由一个或多个主节点组成,这些主节点控制着工作节点,工作节点通过HTTP或gRPC协议发送 API 请求,代表客户端运行任务。
主节点负责管理和调度构成每个应用程序的容器。集群提供用于监控、日志记录、诊断以及配置应用程序的 API。
Kubernetes 是否构建于其他开源项目之上?
是的,Kubernetes 实际上依赖于许多其他自由开源软件包。它的基础是Docker 容器运行时和CoreOS Linux 发行版,并且利用其他开源项目来实现其许多组件,例如用于分布式键值存储的etcd 。该工具的核心和控制平面均使用Go编程语言编写,使其成为一个完全基于 Go 的应用程序。Kubernetes 本身就是一个开源项目,并已被用作其他开源项目的构建模块。
Kubernetes 最初由 Google 开发,并于 2015 年捐赠给了云原生计算基金会(CNCF)。Red Hat接手维护了 Kubernetes 1.10 到 1.13 版本,随后发布了 1.14 版本,标志着 Kubernetes 成为一个完全由社区拥有的项目,开启了新的篇章。如今,它由遍布全球的开发者和用户社区共同维护。
Kubernetes 的工作原理是什么?
Kubernetes 用于自动化部署、扩展和管理容器化应用程序。它支持多种平台和基础设施提供商。
Kubernetes 主要提供两项功能:
- 管理容器集群的一种方式。
- 将数据从一个地方传输到另一个地方(例如从数据库传输到应用程序)的方法
Kubernetes 还提供了许多功能,使容器集群的管理更加便捷。它内置了用户界面,让您可以在一个位置集中管理所有资源。此外,它还具备自动恢复和自愈能力,因此如果某个节点出现故障(例如宕机),Kubernetes 会在问题解决后自动重启该节点。
不仅如此,它还具有高度可配置性。您可以使用它来部署任何类型的应用程序,从 Web 服务器到数据库。它支持多种不同的云环境,包括Google Cloud Platform (GCP)、Amazon Web Services (AWS) 和Microsoft Azure。
什么是容器?为什么要使用容器?
在深入探讨 Kubernetes 之前,我们先来谈谈容器……
容器是一种将应用程序打包并在可移植且隔离的环境中运行的方法。无论底层基础架构如何,容器都能确保应用程序以一致且可预测的方式运行。这使得应用程序的开发、测试和部署更加便捷,也使得在同一主机上运行多个应用程序而不会相互干扰。
容器技术近年来之所以流行,是因为它相比传统部署方式具有诸多优势。例如:
- 轻量级:容器是运行在机器上的单个进程,仅包含运行所需的库、配置文件和其他依赖项。这意味着容器可以快速启动,因为无需进行虚拟机(VM) 的初始设置,而虚拟机的初始设置可能需要一些时间,具体取决于虚拟机的大小。
- 可移植性:容器可以轻松地从一个环境迁移到另一个环境,因为它们的整个运行时状态都包含在每个容器中。容器还在应用程序代码和底层操作系统内核之间提供了一个额外的抽象层,使得应用程序更容易在服务器之间迁移,同时保持与容器内所有依赖项的兼容性——您无需担心应用程序软件栈与您选择的任何服务器之间的不兼容性!
- 隔离:为了使同一主机上的各个容器彼此隔离,它们运行在不同的命名空间中——这意味着即使两个或多个进程共享一个位于各自命名空间之外的 IP 地址,它们也未必能够访问彼此的文件或端口!这种方法可以减少端口冲突,因为网络服务无需在主机上打开特定的端口,操作系统也无需知道将发往特定应用程序的数据发送到哪里……
容器提供的隔离级别取决于容器运行时和容器的具体配置。某些容器运行时(例如 Docker)默认提供高隔离级别,而其他运行时则可能提供较为有限的隔离。然而,总的来说,容器的设计旨在提供一定程度的隔离,以确保它们能够独立且可靠地运行。这使得构建和管理包含多个不同应用程序的复杂基础架构变得更加容易,所有这些应用程序都可以在同一主机上运行。由于容器彼此隔离,因此您还可以在同一硬件上运行多个容器,且开销极小。
容器与虚拟机相比有何优势?
容器比虚拟机 (VM) 更轻量级,因为无需运行完整的操作系统。容器也更易于移植,因为它们通常由Dockerfile或其他源代码创建,可以轻松地在机器上移动。
容器比虚拟机更高效,因为它们允许你通过网络传输适量的数据。这对于微服务尤其重要,因为微服务需要共享资源,但由于不同用户的需求不同(例如数据库大小不同),往往无法实现资源共享。
容器比虚拟机更具可扩展性,因为可以根据需要更容易地增加其大小;只需在使用 Kubernetes 的复制控制器功能集将新容器部署到现有主机时分配更多资源(RAM)和/或 CPU 周期即可,该功能集正是为此目的而内置的!
容器在某种程度上比虚拟机更安全,因为它们在运行过程中出错的可能性很小。例如,每个容器实例都可以启动新进程,同时还能使用自己的 IP 地址处理来自容器外部程序的请求。这与虚拟机内部的处理方式截然不同,在虚拟机中,运行在同一主机上的进程会共享资源。
借助容器,您可以实现真正的云可移植性。
容器确实能够提供高度的可移植性,并允许应用程序轻松地在不同环境之间迁移。这是使用容器的关键优势之一,因为它使组织能够以一致且可预测的方式开发和部署应用程序,而无需考虑底层基础架构。
容器通过将应用程序及其依赖项打包成一个自包含的单元,从而实现了这种可移植性。该单元可以快速迁移到任何具有必要容器运行时的主机上运行。这意味着应用程序可以在一个系统上进行开发和测试,然后无需任何更改或修改即可在另一个系统上投入生产环境运行。
此外,容器的设计本身就具有可移植性,可以在各种基础设施上运行,从本地数据中心到公有云。这使得组织能够为其应用程序选择最佳环境,并在需要时快速地在不同环境之间迁移应用程序。
容器技术的兴起正在推动 Kubernetes 的普及。
容器技术的兴起确实在推动 Kubernetes 的普及方面发挥了重要作用。Kubernetes 是一个容器编排平台,这意味着它旨在管理和部署集群中大量的容器。
随着容器的广泛应用,对大规模管理和部署容器的有效方法的需求日益增长。这促使 Kubernetes 和其他容器编排平台的出现,它们提供了管理和部署大量容器所需的工具和功能。
此外,Kubernetes 的设计旨在与容器无缝协作,并提供一致且可预测的方式来运行和管理容器化应用程序。这使其成为使用容器并寻求强大而灵活的应用程序管理和部署平台的组织的理想选择。
构成 Kubernetes 的主要组件
Kubernetes 目前由 Google、Red Hat、大型企业以及专家开发者社区共同维护。Kubernetes 为任何云端或本地基础设施提供高度可扩展的容器管理解决方案。该平台由以下几个主要组件构成:
-
Kubernetes Master:它是 Kubernetes 集群的中央控制平面,负责管理集群并协调节点活动。Master 包含多个组件,例如 API 服务器(用于公开 Kubernetes API 并允许其他组件与集群交互)、调度器(用于确定每个应用程序的运行位置)以及控制器管理器(用于提供各种集群级功能,例如复制和自愈)。
-
Kubernetes 节点:节点是 Kubernetes 集群中的工作机器。它们运行由主节点管理的应用程序和工作负载。每个节点都包含 Kubernetes 运行时环境,该环境负责运行容器并提供必要的资源和隔离。节点与主节点通信以接收指令并报告其工作负载的状态。
-
Kubernetes 控制面板:一个灵活的用户界面,提供集群资源的图形化视图,并允许用户管理和控制工作负载。
Kubernetes 的其他关键组件包括 etcd 分布式键值存储,用于存储集群的配置和状态;kubelet ,它是运行在每个节点上并管理容器的主要代理;以及kubectl命令行界面,用于与集群交互并管理其应用程序。
Kubernetes 带来的颠覆性影响
Kubernetes 对应用程序的开发、部署和管理方式有着诸多颠覆性的影响。Kubernetes 的一些关键影响包括:
- 更高的敏捷性和速度:Kubernetes 提供了一个强大而灵活的平台来运行和管理应用程序,使组织能够快速轻松地部署和更新应用程序。这可以减少开发和部署应用程序所需的时间和精力,并使组织能够更快地响应不断变化的业务需求。
- 增强可扩展性和可靠性:Kubernetes 包含自愈和自动扩缩容等功能,有助于确保应用程序始终可用并以所需容量运行。这可以提高应用程序的可靠性和性能,并帮助组织应对流量或工作负载的突然增长。
- 降低运维成本:Kubernetes 提供了一种一致且集中的方式来管理和部署集群中的应用程序。这可以简化应用程序运行和管理的运维复杂性,并帮助企业减少维护应用程序所需的时间和精力。
- 更强的可移植性和灵活性:Kubernetes 的设计宗旨就是可移植,并可在各种基础设施上运行,从本地数据中心到公有云。这能让企业在应用程序运行位置上拥有更大的灵活性和选择权,并简化应用程序在不同环境之间的迁移。总而言之,Kubernetes 有潜力显著改变应用程序的开发、部署和管理方式,并为企业在敏捷性、可扩展性、可靠性和简易性方面带来诸多优势。
这些技能对于软件工程师和其他IT专业人员来说变得越来越重要。
由于 Kubernetes 和容器技术的广泛应用以及它们在创建、部署和维护应用程序方面带来的诸多优势,它们对于软件开发人员和其他 IT 专业人员的重要性日益凸显。掌握 Kubernetes 和容器技术变得越来越重要,原因包括:
-
Kubernetes 可以帮助您管理容器化应用程序。它可以帮助您运行和扩展应用程序,并且可以帮助您以低成本实现这些目标。
-
它基于这样的理念:应用程序应该被构建成小型、独立的单元(容器),而不是大型的单体程序。在容器化环境中,你无需关注单个机器;相反,你只需关注如何在可能成千上万台机器上运行应用程序和服务。
-
Kubernetes 还提供内置工具,用于管理跨数千台机器的应用程序和服务。例如:您可以通过在清单文件中定义标签来创建应用程序所依赖的容器组(称为“ Pod ”);然后,Kubernetes 会尽可能将它们放入同一个 Pod 中,以确保它们在需要时始终协同运行。*您的 Pod 还可以分布在多个主机上,以实现自动高可用性或负载均衡*。如果某个主机发生故障或由于硬件问题或网络连接问题而变得不可用,Kubernetes 会自动将该主机上运行的所有 Pod 迁移到另一台机器上,以确保它们能够不间断地继续运行。
Kubernetes 可以帮助进行编排和部署。
Kubernetes 可以通过多种方式帮助进行编排和部署。Kubernetes 可以协助完成这些任务的一些关键方式包括:
- 自动化部署和更新:Kubernetes 提供了一种声明式的应用程序部署方法,这意味着用户只需定义应用程序的预期状态,Kubernetes 就会确保应用程序按预期运行。这简化了应用程序的部署和更新,因为用户无需担心启动或关闭应用程序的具体步骤。
- 滚动更新和回滚:Kubernetes 允许用户执行滚动更新和回滚,这意味着他们可以以可控的方式增量更新应用程序。这有助于降低部署期间出现停机或其他问题的风险,并在出现问题时更容易恢复。
- 自愈和自动扩缩容:Kubernetes 包含自愈和自动扩缩容等功能,有助于确保应用程序始终运行且可用。如果容器或应用程序发生故障,Kubernetes 会自动替换它;如果工作负载增加,Kubernetes 会自动扩缩容应用程序以满足需求。这可以提高应用程序的可靠性和性能,并有助于降低管理应用程序的运维开销。
- 调度和资源管理:Kubernetes 提供了一套强大的调度和资源管理系统,用户可以指定应用程序的需求和约束条件,而 Kubernetes 则负责处理应用程序运行和管理的细节。这可以简化大规模应用程序的部署和管理,并有助于优化集群中的资源利用率。
总体而言,Kubernetes 旨在为编排和部署提供诸多好处,并帮助组织更高效、更可靠地开发、部署和管理应用程序。
从零开始配置 Kubernetes(简要指南)
要从头开始设置和安装 Kubernetes,您需要完成以下步骤:
- 在您的计算机上安装Linux 操作系统(强烈推荐),或者使用提供 Linux 环境的云服务提供商。
- 安装Docker(显然),它用于在 Kubernetes 上运行容器。
- 安装容器运行时环境,例如Containerd或CRI-O,以管理系统上的容器。
- 安装并配置Kubernetes主节点。主节点负责管理集群和调度工作负载。
- 安装并配置一个或多个工作节点,这些机器将运行您的应用程序和服务。
- 使用Kubernetes 命令行工具kubectl在集群上部署和管理应用程序。
- 可选:安装Kubernetes 控制面板或Helm chart,它提供了一个基于 Web 的界面,用于管理集群和部署应用程序。
有关如何完成每个步骤的更详细说明,请参阅 Kubernetes文档。最好先阅读“入门指南”,其中提供了设置简单 Kubernetes 集群的分步说明。
谷歌、亚马逊和微软都在大力支持 Kubernetes。
Kubernetes 已经存在多年,但直到最近才作为云原生应用管理工具而流行起来。它也成为厂商在竞争激烈的云市场中脱颖而出、赢得竞争优势的一种方式。没错,谷歌、亚马逊和微软都在以各种方式支持 Kubernetes。
-
Google 是 Kubernetes 的原创者,并持续为该项目做出重要贡献。Google 通过其Google Kubernetes Engine (GKE) 提供 Kubernetes 即服务,使用户能够在 Google Cloud Platform 上轻松创建和管理 Kubernetes 集群。Google 还为在其云平台上使用 Kubernetes 提供支持和工具,并提供 Kubernetes 的培训和认证。
-
亚马逊也是 Kubernetes 的重要支持者。亚马逊通过其Amazon Elastic Container Service for Kubernetes (EKS)提供 Kubernetes 即服务,使用户能够在 Amazon Web Services (AWS) 云平台上创建和管理 Kubernetes 集群。亚马逊还提供在其云平台上使用 Kubernetes 的工具和支持,并提供 Kubernetes 的培训和认证。
-
微软也支持 Kubernetes。微软通过其Azure Kubernetes 服务(AKS)提供 Kubernetes 即服务,使用户能够在 Microsoft Azure 云平台上创建和管理 Kubernetes 集群。此外,微软还提供在其云平台上使用 Kubernetes 的工具和支持,并提供 Kubernetes 的培训和认证。
总而言之,Kubernetes 是一款强大的工具,能够极大地简化在云端部署和管理容器化应用程序的过程。它具有颠覆性意义,因为它使开发人员能够以更高效、更经济的方式构建、部署和管理应用程序,而无需担心底层基础设施。
结论
希望这篇文章能帮助你了解 Kubernetes 是什么,以及它为何是一项重要的技术。我已经介绍了 Kubernetes 的所有基本概念(并非全部,只是简要概述)及其关键特性——现在是时候让你亲自尝试一下了。从这里开始!
深入了解 Kubernetes👇
文章来源:https://dev.to/pramit_marattha/kubernetes-what-it-is-how-it-works-and-why-its-a-game-changer-15pg








