什么是 Kubernetes?
Kubernetes 是一个开源的容器编排平台,可以自动完成在部署、管理和扩展容器化应用过程中涉及的许多手动操作。
Kubernetes 可自动配置应用,并维护和跟踪资源分配情况。它是云原生计算基金会(CNCF)的一个项目,于 2014 年首次推出,如今已成为众多企业组织大规模运行分布式应用与服务时广泛采用的平台。
Kubernetes 的基本概念有哪些?
Kubernetes 是一个用于管理容器的平台,容器将应用的代码、配置及依赖项捆绑在一起,使其能够作为一个具有自身资源的独立进程运行。每个应用都会有其专属的一个或多个容器,而且这些容器被整合到 Kubernetes 容器集中。
Kubernetes 可以在裸机服务器、虚拟机、公共云提供商、私有云和混合云环境中运行。Kubernetes 的一大优势就是它可以在许多不同类型的基础架构上运行。
正如 Kubernetes 实施细节中所述,Kubernetes 旨在帮助用户遵循三项核心设计原则。Kubernetes 部署应具备以下特点:
- 安全可靠。它应遵循最新的安全最佳实践。
- 用户友好。它应能通过一些简单的命令进行操作。
- 可扩展。不应偏向于某一个提供商,而是能通过配置文件进行自定义。
红帽资源
Kubernetes 有哪些优势?
Kubernetes 将应用部署与扩展过程中诸多繁琐的工作自动化,并为云原生开发方法开辟了道路,既能节省时间,又能加快新软件推向市场的速度。其主要优势包括:
支持大型复杂环境:运行多个应用的生产环境需要在众多主机上部署大量容器,而且所有容器都要协同工作。Kubernetes 具备在大规模工作负载场景下进行容器部署所需的编排和管理能力。
可扩展性:Kubernetes 可根据需求自动扩展,提供应用所需的容量,同时还能节省资源和成本。
可移植性:Kubernetes 可以在您自己的数据中心本地运行,也可以在公共云以及公共云和私有云实例相结合的混合配置环境中运行。使用 Kubernetes,您可以在任何地方使用相同的命令。
一致的部署:Kubernetes 的部署在各类基础架构上保持一致。容器体现了不可变基础架构的理念,运行应用所需的所有依赖项和设置指令都与容器打包在一起。
分离且自动化的运维和开发:容器可节省开发人员的时间,助力实现快速迭代周期。同时,Kubernetes 也能让运维团队对系统的稳定性充满信心。
混合云策略支持:许多企业组织将本地数据中心与公共云或私有云解决方案相结合,并在多个云提供商之间平衡工作负载,以充分利用价格和服务水平的变化所带来的优势。Kubernetes 的一致性和可移植性可以为这些混合策略提供支持。
持续支持传统应用:Kubernetes 可以帮助您交付和管理容器化、传统和云原生应用,以及重构为微服务的应用。
管理复杂环境:容器中的微服务使得服务的编排(包括存储、网络和安全防护)变得更加容易,但同时也会显著增加环境中容器的数量,从而提升了复杂性。Kubernetes 将容器组合成容器集,帮助您对这些容器进行工作负载调度,并提供必要的服务,如网络和存储。
增强安全性:Kubernetes 安全防护实践能够帮助企业组织采取有效措施,提升 IT 安全性。管理员可以制定安全防护与治理策略,并按容器集或容器集组细分策略。开发团队可以在容器运行时识别安全问题,并在构建阶段进行修复,而不是在生产环境中进行更新或修补。基于角色的访问控制(RBAC)可以为用户和服务帐户分配特定的权限。Kubernetes 机密可以保护诸如加密密钥等敏感数据。
助力 DevOps:Kubernetes 能够为容器提供一致的基础架构基础,从而为 DevOps 方法提供支持,这种方法有助于促进开发团队与运维团队之间建立高效的协作关系。采用持续集成和持续交付/部署(CI/CD)则有助于简化和加速软件开发生命周期。DevSecOps 是在 DevOps 基础上的演进,将安全控制和漏洞管理提前到软件开发生命周期的更早阶段。
什么是 Kubernetes 集群?
有效的 Kubernetes 部署称为集群,也就是一组运行容器的主机。
管理员可以设置 Kubernetes 集群的预期状态,说明应运行哪些应用或其他工作负载、应使用哪些镜像、应提供哪些资源,以及其他配置详情。
您可以将 Kubernetes 集群可视化为两个部分:控制平面和一系列计算节点(通常为服务器或虚拟服务器)。
控制平面负责维护集群的预期状态,例如运行哪些应用以及使用哪些容器镜像。
与此同时,节点遵循控制平面的指令,承担运行应用和工作负载的实际任务。每个节点都是一个独立的 Linux® 环境,并且它既可以是物理机,也可以是虚拟机。一个 Kubernetes 集群至少需要一个计算节点,但通常会配备多个计算节点。
一个 Kubernetes 节点由多个容器集组成,每个容器集代表应用的一个实例。每个容器集都由一个容器(或一系列紧密耦合的容器)以及若干控制容器运行方式的选件组成。
众多 Kubernetes 服务协同合作,自动识别出最适合每个任务的节点,分配资源,并指派该节点中的容器集来完成所请求的工作。无论容器集在集群中移动到何处,甚至被替换,Kubernetes 都会自动将请求发送到正确的容器集。
为了掌控这一切,Kubernetes 提供了一个统一的应用编程接口(API),用于管理、创建和配置集群。
了解 Kubernetes 架构
让我们更深入地了解一下 Kubernetes 集群中发生的情况。
控制平面是集群的神经中枢,其中包含控制集群的组件,以及关于集群状态和配置的数据。这些核心的 Kubernetes 组件负责确保容器以足够的数量和必要的资源运行。
Kubernetes API(kube-apiserver)是 Kubernetes 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
Kubernetes 调度程序(kube-scheduler)会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。
控制器(kube-controller-manager)负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。
配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。
为了运行容器,每个节点都有一个容器运行时引擎。比如 Docker,但 Kubernetes 也支持其他符合开放容器计划要求的运行时,例如 rkt 和 CRI-O。
每个节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。Kubelet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。
每个节点中还包含 kube-proxy,这是一个用于优化 Kubernetes 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信,主要操作系统的数据包过滤层,或者自行转发流量。
除了管理运行应用的容器外,Kubernetes 还可以管理附加到集群的应用数据。Kubernetes 允许用户请求存储资源,而无需了解底层存储基础架构的详细信息。持久卷是集群(而非容器集)所特有的,因此其寿命可以超过容器集。
Kubernetes 所依赖的容器镜像存储于容器镜像仓库中。这个镜像仓库可以由您自己配置,也可以由第三方提供。
什么是 Knative 和无服务器 Kubernetes?
无服务器是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器。无服务器方案中仍然有服务器,但它们已从应用开发中抽离了出来。开发人员只需将代码打包到容器中即可进行部署。
部署之后,无服务器应用即可响应需求,并根据需要自动扩展或缩减。公共云提供商的无服务器产品通常通过一种事件驱动执行模型来按需计量。因此,当无服务器功能闲置时,不会产生费用。
Kubernetes 已成为运行无服务器环境的热门选择。然而,Kubernetes 本身并不足以原生运行无服务器应用。Knative 是一个开源社区项目,可以添加组件,从而在 Kubernetes 上部署、运行和管理无服务器应用。
您可以使用 Knative,通过将代码打包为容器镜像并交给系统来创建服务。代码只需在必要时运行,Knative 会自动启动和停止实例。
什么是 Kubernetes Operator?
Kubernetes Operator 是一种特定于应用的控制器,可扩展 Kubernetes API 的功能,来代表 Kubernetes 用户创建、配置和管理复杂应用的实例,以及添加其他应用功能。它基于基本 Kubernetes 资源和控制器概念构建,但又涵盖了特定于域或应用的知识,用于实现其所管理软件的整个生命周期的自动化。
可以构建一个 Kubernetes Operator 来执行几乎所有的 Kubernetes 操作:扩展复杂的应用,应用版本升级,甚至使用专用硬件管理计算集群中节点的内核模块。也有许多软件和工具以 Kubernetes Operator 形式部署,包括用于监控的 Prometheus Operator,以及用于实现搜索自动化的 Elastic Kubernetes Operator。
Kubernetes 与红帽 OpenShift 有何区别?
Kubernetes 本身是一款开源软件,可用于部署、管理和扩展容器。但要将其投入实际应用,需要付出大量努力。大多数企业组织都希望能够集成其他功能,如自动化、监控、日志分析、服务网格、无服务器和开发人员生产力工具。您可能还想要添加其他工具来辅助进行网络、入口、负载平衡、存储、监控、日志记录、多集群管理、持续集成和持续交付(CI/CD)等方面的工作。简而言之,对于大多数用例而言,仅凭 Kubernetes 本身是不够的。
许多软件供应商都提供他们自己的 Kubernetes 版本,包括自助式分发版、托管服务、安装程序和平台即服务(PaaS)产品。CNCF 拥有一份包含数十种经过认证的 Kubernetes 产品的清单。
红帽® OpenShift® 是 CNCF 认证的 Kubernetes 产品,但它的功能远不止于此。红帽 OpenShift 以 Kubernetes 为基础,构建了一个完整的平台,能够在混合云环境中以一致的方式交付云原生应用。
以 Kubernetes 为容器编排引擎,红帽 OpenShift 融入了 CNCF 开源生态系统中的众多功能,并且这些功能均经过红帽的测试、打包,并由其提供支持。红帽 OpenShift 既可以作为公共云服务,由 AWS、Microsoft Azure、Google 和 IBM 等主流云提供商提供,也可以作为自助式软件提供,可在数据中心、公共云及边缘环境中的各种裸金属和虚拟基础架构上运行。
什么是 OKD?
OKD 是一个打包了运行 Kubernetes 所需软件组件的社区项目。除了 Kubernetes 外,OKD 也提供关注开发和运维的工具,可帮助这些团队加快应用开发、高效地部署和扩展,并且维护长期生命周期。OKD 可协助开发人员在云上创建、测试和部署应用,而且支持多种编程语言,如 Go、Node.js、Ruby、Python、PHP、Perl 和 Java 等。
OKD 是红帽 OpenShift 的上游项目,针对持续应用开发与部署进行了优化。OKD 通常比 OpenShift 提前几个版本发布功能,因而既能让人率先体验社区更新,也承担着企业级用途试验田的作用。
OKD 与 OpenShift 的主要区别在于,红帽 OpenShift 经过红帽的验证与测试,并且提供订阅权益以满足企业运维需求。红帽 OpenShift 的订阅服务涵盖技术支持、安全响应团队、长期支持选项、经验证的第三方 Operator、认证的数据库和中间件等。
为什么选择红帽来打造应用平台?
红帽是开源容器技术(包括 Kubernetes)的领导者和积极构建者,我们创建的一些基本工具可以帮助您保护、简化和自动更新容器基础架构。
借助红帽 OpenShift 的可扩展性以及控制和编排功能,开发人员可以构建新的容器化应用、对其进行托管并在云端加以部署,从而轻松快速地将各种奇思妙想转变为新业务。如果您想要将 Kubernetes 工作负载部署或迁移到托管云服务,OpenShift 也可以用作 Amazon Web Services(AWS)、Microsoft Azure、Google Cloud、IBM Cloud 和其他提供商平台上的云原生服务。
以 OpenShift 为基础,您可以结合使用红帽高级集群管理和红帽 Ansible® 自动化平台,帮助您跨区域(包括公有云、本地和边缘环境)高效部署和管理多个 Kubernetes 集群。
红帽官方博客
获取有关我们的客户、合作伙伴和社区生态系统的最新信息。