第 1 章 Kubernetes 概述

Kubernetes 是由 Google 开发的开源容器编排工具。您可以使用 Kubernetes 运行和管理基于容器的工作负载。最常见的 Kubernetes 用例是部署一系列互联微服务,以云原生方式构建应用。您可以创建 Kubernetes 集群,跨越内部部署、公共云、私有云或混合云中的主机。

传统上,应用程序部署在单一操作系统之上。通过虚拟化,您可以将物理主机分成几个虚拟主机。在共享资源中使用虚拟实例并非是实现运行效率和可扩展性的最佳选择。因为虚拟机 (VM) 和物理主机一样会消耗尽可能多的资源,因此为虚拟机提供资源(如 CPU、RAM 和存储)的成本会比较高。另外,您可能会看到,因为使用共享资源,导致虚拟实例中运行的应用程序的性能下降。

图 1.1. 用于类部署的容器技术的演进

247 OpenShift Kubernetes 概述

要解决这个问题,您可以使用容器化技术,在一个容器化环境中隔离应用程序。与虚拟机类似,容器具有自己的文件系统、vCPU、内存、进程空间、依赖项等。容器与底层基础架构分离,可跨云和操作系统分布移植。与一个功能齐全的操作系统相比,容器是一个更加轻量的系统,它会在操作系统上隔离进程。虚拟机的启动速度较慢,它是物理硬件的抽象概念。虚拟机在一台机器上运行,由一个虚拟机监控程序(hypervisor)处理。

您可以使用 Kubernetes 执行以下操作:

  • 共享资源
  • 在多个主机间编排容器
  • 安装新的硬件配置
  • 运行健康检查和自我修复应用程序
  • 扩展容器化应用程序

1.1. Kubernetes 组件

表 1.1. Kubernetes 组件

组件用途

kube-proxy

在集群的每个节点上运行,并维护 Kubernetes 资源之间的网络流量。

kube-controller-manager

监管集群的状态。

kube-scheduler

将 pod 分配给节点。

etcd

存储集群数据。

kube-apiserver

验证并配置 API 对象的数据。

kubelet

在节点上运行并读取容器清单。确保定义的容器已启动且正在运行。

kubectl

您可以定义如何运行工作负载。使用 kubectl 命令与 kube-apiserver 进行交互。

节点

节点是 Kubernetes 集群中的物理机器或虚拟机。控制平面(control plane)管理每个节点,并在 Kubernetes 集群中的节点之间调度 pod。

容器运行时

容器运行时在主机操作系统上运行容器。您必须在每个节点上安装容器运行时,以便 pod 能够在该节点上运行。

持久性存储

即便在设备关闭后也存储数据。Kubernetes 使用持久性卷来存储应用程序数据。

container-registry

存储和访问容器镜像。

Pod

pod 是 Kubernetes 中的最小逻辑单元。pod 包含一个或多个在 worker 节点上运行的容器。