什么是 Kubernetes?

Kubernetes 通常被称为“面向云技术的操作系统”。它是一个开源平台,专用于管理容器化应用和服务集群,早在 2014 年由 Google 工程师 Joe Beda、Brendan Burns 和 Craig McLuckie 开发,随后开源并迅速成为了一个欣欣向荣的云原生生态系统。如今,Kubernetes(在古希腊语中意为“舵手”或“飞行员”)由隶属于 Linux 基金会的 云原生计算基金会 (CNCF) 管理。

Kubernetes 不仅是首个从 CNCF 毕业的项目,还是历史上增长最快的开源项目之一。目前,Kubernetes 拥有超过 2300 位贡献者,已经得到了各种不同规模企业的广泛采用,包括 50% 的财富 100 强企业。

Kubernetes 基础知识 — 关键术语

首先了解一些与 Kubernetes 相关的关键术语。Kubernetes Standardized Glossary 页面上提供了更加详尽的列表。您也可以查看 Kubernetes 速查表,其中包含常用 kubectl 命令和标志的列表。

集群

集群由一系列称为节点的机器构成,可用于运行由 Kubernetes 管理的容器化应用。

节点

节点是一个虚拟机或物理机。一个集群由一个主节点和多个工作节点组成。

云技术容器

云技术容器包含软件及其依赖关系的映像。

Pod

在 Kubernetes 集群上运行的单一容器或一组容器。

部署

用于管理由 pod 表示的复制应用的对象。Pod 部署在集群的节点上。

副本集

确保同时运行指定数量的 pod 副本。

服务

描述如何访问由一组 Pod 表示的应用。描述如何访问由一组 Pod 表示的应用。服务通常描述端口和负载均衡器,并且可用于控制对集群的内部和外部访问。

什么是 KubeCon?

KubeCon 是面向 Kubernetes 开发人员和用户的年度盛会。2015 年,第一届 KubeCon 吸引了 500 名与会者。现在,KubeCon 已发展成为了云原生社区的一项重要活动。2019 年,美国加利福尼亚州圣地亚哥 KubeCon 吸引了 12000 名开发人员和站点可靠性工程师,共同庆祝欣欣向荣的 Kubernetes 云技术编排平台的开源生态系统。

什么是 Kubernetes 容器?

随着开发人员越来越多地为各种具有不同的云技术、测试环境、便携式计算机、设备、操作系统和平台的计算环境部署软件,确保软件可靠运行已成为一项至关重要的任务。而这正是容器的用武之地:将应用与应用的整个运行时环境捆绑在一起。在这一意义上,容器就是一种虚拟化形式,它们可提供一个包含适当的库、依赖关系和操作系统的“气泡”,在“气泡”中运行应用。区别在于,容器仅包含应用所需的资源,比虚拟机小。

Kubernetes 与 Docker 对比

Linux 容器早在 2008 年就已存在,但直到 2013 年 Docker 容器推出,才开始引起大范围的关注。而随着越来越多的人开始部署容器化应用(包含运行所需的一切要素),一个新的问题凸显了出来,那就是如何管理数千个容器。对此,Kubernetes 可以自动化编排容器生命周期,将容器分布在整个托管基础设施中;可以按需扩展或收缩资源;可以供应、调度、删除容器,监视容器运行状况。

Kubernetes 包含哪些组件?

关键组件包括集群、节点和控制平面。其中,集群包含节点,节点托管 pod(pod 包含所部署应用的要素),且每个节点包含至少一个工作机。控制平面则负责管理集群中的节点和 pod,通常跨多个计算机,以实现高可用性。

什么是 Kubernetes?

控制平面包含以下要素:

  • Kubernetes API 服务器:提供用于控制 Kubernetes 的编程接口 (API)
  • etcd:面向集群数据的键值存储
  • Kubernetes 调度器:将新 pod 匹配至可用节点
  • Kubernetes-controller-manager:运行多个进程,从而管理节点故障、控制复制、通过端点加入服务和 pod,以及控制账户和访问令牌
  • Cloud-controller-manager:围绕特定基础设施路由和负载均衡等方面,管理来自特定云技术提供商的 API

节点包含以下要素:

  • kubelet:一个负责检查容器是否在 pod 中运行的代理
  • Kubernetes 网络代理:维护网络规则
  • Docker、容器或其他类型的容器运行时

Kubernetes 可提供哪些优势?

使用容器,您可以确保自己的应用与应用运行所需的一切要素捆绑在一起。而在使用容器(通常包含微服务)时,您可以通过 Kubernetes 来自动管理和分发容器。

借助 Kubernetes,企业可以:

自动扩展 按需进行部署扩展或收缩。
发现服务 通过 DNS 或 IP 地址查找容器化服务。
平衡负载 通过分配网络流量来稳定部署。
管理存储 选择本地存储或云端存储。
控制版本 选择待运行的容器类型,以及待通过新映像或容器资源替换哪些容器。
确保安全 安全更新特定容器映像的相关密码、OAuth 令牌和 SSH 密钥。

使用 Kubernetes 将面临哪些挑战?

尽管 Kubernetes 具有高度的可组合性,支持任意类型的应用,但有时它却很难理解和使用。正如许多 CNCF 成员所说,对于特定工作负载,Kubernetes 并不始终是最佳方案。也正是因为这一原因,在 Kubernetes 生态系统中,很多企业为解决特定工作负载问题创建了许多云原生工具。

由于 Kubernetes 部署的是容器而不是源代码,也不会构建应用,您需要使用更多其他工具来处理日志、中间件、监视、配置、CI/CD 和许多其他生产活动。换言之,Kubernetes 是可扩展的,事实也证明它适用于从喷气式飞机到机器学习的广泛使用场景。事实上,包括 Oracle、Google、Amazon Web Services 等在内的云技术提供商已开始使用 Kubernetes 的可扩展性来构建托管式 Kubernetes 服务,以此来降低复杂性,提高开发人员效率。

什么是托管式 Kubernetes?

云原生和 Kubernetes 改变了 AgroScout 支持农民的方式。

Oracle Cloud Infrastructure Container Engine for Kubernetes 是一项开发人员友好的托管式服务,专用于将容器化应用部署到 OCI。如果您的开发团队希望可靠地构建、部署和管理云原生应用,那么请使用 Container Engine for Kubernetes。您只需指定应用所需的计算资源,随后 Container Engine for Kubernetes 就将在现有云基础设施租户中供应这些资源。

即使您不使用 Oracle Cloud Infrastructure 上的托管式 Kubernetes 服务,Container Engine for Kubernetes 也能依托 Oracle Cloud Infrastructure 的控制力、安全性和可预测性能,助您轻松运行高可用集群。此外,Container Engine for Kubernetes 同时支持使用裸机和虚拟机作为节点,而且还通过了 CNCF 认证。最后,您无需任何额外操作就能获得所有 Kubernetes 更新并轻松与 CNCF 生态系统保持兼容。


Kubernetes 生态系统和社区

Oracle 是云原生计算基金会 (CNCF) 的铂金会员。该基金会是一个开源社区,为数十个具有不同成熟度水平的软件开发项目提供支持。事实证明,基金会所有已毕业项目(Kubernetes、PrometheusEnvoyCoreDNScontainerdFluentdJaegerVitessTUFHelm)在云原生开发的各个方面都发挥了巨大价值。

如何开始使用 Kubernetes?

Kubernetes 拥有一个庞大的生态系统,可为自身相关项目提供强大支持。不过使用 Kubernetes 不是一件简单的事,仅仅只满足于解决简单问题可能陷入“不可知的兔子洞”。虽然如此,您可以先从简单问题入手,随后按需进阶,了解高级概念。了解如何:

  • 使用 Docker 和 Kubernetes 设置本地开发环境
  • 使用 Helidon 创建一个简单的 Java 微服务
  • 使用 Docker 将微服务构建到容器映像中
  • 在本地 Kubernetes 集群上部署微服务
  • 在集群上扩展和收缩微服务

面向开发人员的 Kubernetes

渴望开展首个 Kubernetes 项目的开发人员可以查看我们的开发人员门户,他们可以在其中学习如何在 Kubernetes 上构建第一个 Arm 应用或使用 Cloud Shell 部署 Kubernetes 集群。


基于 OCI 的 Kubernetes 简介 (8:32)

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国 。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。