跳至主要内容

什么是 Kubernetes?示例入门指南

全面了解 Kubernetes,以及它如何助力您的数据工程工作流。
Austin Chia
Austin Chia

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

如果您了解云计算的崛起,肯定听说过 Kubernetes。在现代应用开发中,它是管理各类基础设施架构的关键工具,值得学习。

在这篇入门文章中,我们将概述 Kubernetes 及其组件,并提供一份在本地实施的完整教程。若您希望通过动手实践来配合本教程,请查看我们的Kubernetes 入门课程。

什么是 Kubernetes?

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩缩和管理容器化应用。它最初由 Google 开发,如今已成为大规模运行容器的事实标准。

它屏蔽了管理单个容器的复杂性,让开发者可以专注于构建和部署应用。

为什么使用 Kubernetes?

以下是使用 Kubernetes 的一些关键优势:

  • 容器编排:自动在集群中分发和调度容器。
  • 可扩展性与自愈:简化水平扩展(复制容器)与垂直扩展(调整资源分配),并具备自愈能力。
  • 高可用性:即使部分节点故障,也能确保容器(以及您的服务)保持可用。
  • 可移植性:对底层基础设施进行抽象,便于在本地和不同云服务商上运行。
  • 高效的资源利用:根据资源使用情况调整容器规模,优化资源分配并降低成本。

Kubernetes 在多种场景中都很有用,例如:

  • DevOps:自动化容器化应用的部署、扩缩与管理。
  • 微服务:将大型单体应用拆分为更小、可管理的服务,提高敏捷性与可扩展性。
  • 大数据:通过容器简化复杂大数据系统的部署与管理。
  • 边缘计算:在边缘设备上运行 Kubernetes,将数据处理与分析更贴近数据产生处,降低延迟并提升性能。
  • 持续交付:与 Jenkins 和 GitLab 等工具集成,构建自动化的持续交付流水线。
  • 机器学习:为训练与部署机器学习模型提供可扩展平台,以处理大规模数据集和复杂计算。

Kubernetes 的关键概念

要理解 Kubernetes 的工作方式,您需要对其关键概念有良好把握。

主要包括 4 个概念:

  1. 集群(Clusters)
  2. Pod
  3. 命名空间(Namespaces)
  4. Operator

我们将在下文进一步介绍。

集群

Kubernetes 集群由一组节点(node)组成,即运行 Kubernetes 软件的独立机器。集群充当控制平面,用于管理应用和服务。

在典型部署中,集群包含一个主节点和多个工作节点。主节点负责协调集群中的所有活动,而工作节点负责运行与管理容器。

Pod

Pod 是 Kubernetes 中最小的部署单元。它可以包含一个或多个容器,以及共享的存储资源和网络设置。

每个 Pod 都有自己唯一的 IP 地址,并可通过该地址与同一集群中的其他 Pod 通信。这使应用不同组件之间的通信更加高效。

Pod 可以是单容器或多容器,每种都有其使用场景。

  • 单容器 Pod:最常见的类型,其中仅运行一个容器。适用于只需一个容器的简单应用或微服务。
  • 多容器 Pod:多个容器共址并一起运行。适用于需要容器间通信与共享资源的复杂应用。

命名空间

命名空间提供在单个集群内对资源进行逻辑分区的方式。它有助于更好地组织与管理资源,并实现更严格的安全控制。

命名空间还可用于管理不同环境,如开发、预生产和生产。这可确保资源相互隔离,不受其他环境变更的影响。

要查看集群中的命名空间,您可以使用以下命令:

kubectl get namespaces

要在命名空间之间切换,请使用以下命令

kubectl config set-context --current --namespace <namespace name>

Operator

Operator 是用于帮助自动化管理 Kubernetes 资源的软件扩展。它们使用自定义控制器和 API 扩展,更高效地自动处理复杂任务。

一些常见的 Operator 包括:

  • 用于监控的 Prometheus
  • 用于管理 etcd 集群的 etcd operator

使用 Operator 可以大幅简化集群内应用与资源的管理。凭借自动化任务与高级功能,它们在 Kubernetes 用户中日益流行。

Kubernetes 的核心组件

在大多数 Kubernetes 环境中,都有一组核心组件。

kubernetes core components

来源:Kubernetes

以下是各组件及其作用:

  1. API Server:充当所有 Kubernetes 资源的集中管理点。它接收来自用户和其他组件的请求,并执行策略以管理集群。
  2. Controller Manager:通过持续监控并协调集群对象的变更来维护集群的期望状态。
  3. etcd:分布式键值存储,是 Kubernetes 的主要数据存储。它保存所有集群数据,确保数据一致性与可用性。
  4. kubelet:运行在集群中每个节点上的代理,负责管理容器,确保其按指定配置运行。
  5. Kube Proxy:运行在每个节点上,负责将网络流量路由至正确的容器。

Kubernetes 的工作原理

如前所述,Kubernetes 会在集群间自动化容器化应用的部署、扩缩与管理。无需人工干预,即可确保高可用、高效的资源使用与自愈能力。

Kubernetes 不再管理单个容器,而是将它们分组为 Pod,并分布到各个工作节点上;这些节点与控制平面通信,以保持系统的期望状态。

简而言之,Kubernetes 的工作方式如下:

  1. 定义应用部署:在 YAML 文件中指定期望状态,包括副本数、资源限制和网络规则。
  2. 调度工作负载:调度器根据可用资源将 Pod 分配到工作节点。
  3. 管理集群状态:控制器管理器确保系统维持正确数量的 Pod,并替换故障实例。
  4. 处理网络:通过 Service 与 Ingress 控制器管理服务间通信与外部访问。
  5. 扩缩与自愈:根据需求调整运行中的 Pod 数量,并自动重启失败的容器。

通过处理基础设施复杂性,Kubernetes 让团队专注于构建应用而非管理部署,对于各行业可扩展、具韧性的工作负载至关重要。

常见术语与概念

以下是您需要了解的一些关键术语及其定义:

  • YAML 清单(manifest):用于定义应用或基础设施期望状态的配置文件。可用于在 Kubernetes 中创建、更新和删除资源。
  • StatefulSet 与 Deployment:两类用于管理 Pod 生命周期的控制器。Deployment 通常用于无状态应用,StatefulSet 用于有状态应用。
  • Service:为在集群内访问应用提供稳定的 IP 地址与 DNS 名称,同时实现不同 Pod 之间的通信。
  • ConfigMap:用于以键值对形式存储配置数据,供应用访问。
  • Secret:与 ConfigMap 类似,用于存储密码或 API 密钥等敏感信息。

开始使用 Kubernetes

初次接触 Kubernetes 可能会感到困难,尤其是在理解各种术语与概念方面。但一旦掌握这些基本概念,使用该平台将变得轻松许多。

我们先来看看与 Kubernetes 搭配使用的一些工具。

适合初学者的工具

对于 Kubernetes 初学者而言,直接将应用部署到云端可能负担较重。因此,您可以借助一些常用工具在本地进行部署。

以下是两款最常用的工具:

1. Minikube

Minikube 是轻量级的 Kubernetes 实现,可在单台主机上运行。它通常在您的笔记本或工作站的虚拟机(VM)中运行单节点集群。

使用理由:

  • 易于搭建与销毁。
  • 非常适合本地开发与概念验证。
  • 与完整集群相比资源占用更少。

如何安装 Minikube(以 Windows 为例):

# 通过 Windows 包管理器安装
winget install Kubernetes.minikube

您应能看到如下安装信息。如有提示,请使用“Y”同意条款与条件。

installing kubernetes

接着,使用以下 start 命令在 minikube 上启动一个简单的集群:

# 启动单节点集群
minikube start

要检查集群节点是否成功启动,请运行 get 命令:

# 验证集群是否在运行
kubectl get nodes

注意:您需要在本地安装 kubectl API 客户端(许多情况下 Minikube 会自动安装)。

2. Kind(Kubernetes in Docker)

Kind 是 Kubernetes in Docker 的缩写。它使用 Docker 容器作为 Kubernetes 集群中的“节点”,提供简单的、基于容器的本地集群环境。

使用理由:

  • 在许多场景下启动速度比 Minikube 更快。
  • 易于同时启动多个测试集群,适用于 CI/CD 流水线。
  • 开销更低,常用于自动化测试环境。

如何安装 Kind(以 Windows 为例):

# 通过 Windows 包管理器安装 Kind
winget install Kubernetes.kind

安装完成后,您可以使用 create cluster 命令创建一个简单集群并为其命名。

# 创建基础集群
kind create cluster --name example-cluster

要检查 Kubernetes kind 集群是否已启动,请使用以下 get 命令。

# 查看正在运行的集群
kind get clusters

您还可以通过 kubectl 界面与集群交互:

# 使用 kubectl 与 Kind 集群交互
kubectl get nodes

注意:请确保已安装并运行 Docker。

云服务商(EKS、GKE、AKS)

在云端运行 Kubernetes 时,您可以选择以下云服务商:

1. Amazon EKS(Elastic Kubernetes Service)

Amazon EKS 是一项托管服务,可让您在 AWS 上轻松运行 Kubernetes,而无需自行管理控制平面或工作节点。它与其他 AWS 服务集成,提供负载均衡、存储、自动扩缩与监控等功能。

其他功能包括:

  • 与其他 AWS 服务集成(如 IAM、CloudWatch、ECR)。
  • 平台内置可扩展性与高可用性。

2. Google GKE(Google Kubernetes Engine)

Google GKE 是在 Google Cloud Platform 上运行 Kubernetes 的全托管服务。它提供自动扩缩、自愈能力,并与其他 Google Cloud 服务集成。

其他功能包括:

  • 与 GCP 服务深度集成,如 Cloud Logging、Cloud Monitoring 和 Container Registry。
  • 提供 autopilot 模式,可自动管理集群基础设施。

3. Azure AKS(Azure Kubernetes Service)

Azure AKS 提供与 Azure 存储、网络与负载均衡等服务完全集成的无服务器 Kubernetes 集群。它还内置支持 Helm 与 Prometheus 等 DevOps 工具。

其他功能包括:

  • 与 Azure Active Directory、Azure Monitor、Container Registry 等集成。
  • 通过 Azure Container Instances 提供无服务器 Kubernetes(虚拟节点)。

学习 Kubernetes 的资源

第一次学习 Kubernetes 可能会感到不知所措,但有许多资源可帮助您入门。

以下是一些推荐资源:

Kubernetes 部署示例

要在 Kubernetes 中运行应用,您需要遵循一套结构化流程,包括搭建集群、部署容器化应用、将其暴露为服务,并按需扩缩。

我们已在Kubernetes 教程中详细介绍了这一过程,下面是高层次概览:

搭建 Kubernetes 集群

使用 Minikube 创建本地集群用于测试和开发。安装 Minikube 并通过以下命令启动集群:

minikube start --driver=docker
验证您的集群正在运行:
kubectl get nodes

部署应用

在Deployment YAML 文件中定义应用的期望状态。例如,部署一个Nginx Web 服务器如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello-container
        image: nginx:latest
        ports:
        - containerPort: 80

使用以下命令应用部署:

kubectl apply -f hello-deployment.yaml

将应用暴露为服务

为使应用可访问,使用以下命令创建一个Service:

kubectl expose deployment hello-deployment --type=NodePort --port=80 --name=hello-service

获取外部 URL 并在浏览器中打开应用:

minikube service hello-service

扩缩与监控应用

Kubernetes 允许您轻松扩缩应用。要增加副本数:

kubectl scale deployment hello-deployment --replicas=3

查看正在运行的 Pod:

kubectl get pods

查看日志进行调试:

kubectl logs -f <pod-name>

以下是一些可进一步探索的高级项目示例:

  • 在容器中运行流处理作业(例如在 Kubernetes 上运行 Spark、Kafka)。
  • 使用持久卷(Persistent Volumes)来挂载外部存储方案,如 AWS EBS、Azure Disks 或 NFS。
  • 部署更复杂的应用(例如带数据库的多层微服务)。
  • 探索高级特性,如 Ingress 控制器、服务网格(如 Istio)、Helm 图表用于包管理。

结语

Kubernetes 是一款功能强大的平台,可在大规模下部署与管理容器化应用,对于需要弹性、可靠数据处理环境的数据工程师而言至关重要。

如果您有兴趣进一步了解 Kubernetes,我们的Kubernetes 入门课程是一个绝佳的起点。

Kubernetes 常见问题解答

Kubernetes 和 Docker 是一样的吗?

不是。Kubernetes 是容器编排工具,而 Docker 是容器化平台。它们协同工作以管理与部署容器,但用途不同。

使用 Kubernetes 有哪些好处?

Kubernetes 便于管理与部署容器,可提升应用的可扩展性与可用性,并支持自动更新与回滚。

Kubernetes 可以在任何类型的环境中使用吗?

是的,Kubernetes 可用于本地数据中心和云环境。它具有很强的通用性,能适配多种基础设施架构。

学习使用 Kubernetes 是否困难?

虽然存在一定的学习曲线,但网上有大量资源可用,例如 DataCamp 和 Kubernetes 官方的入门指南。

Kubernetes 的架构是什么样的?

Kubernetes 采用客户端-服务器架构,由主节点控制集群,工作节点运行应用工作负载,从而实现对整个系统的高效通信与管理。

Austin Chia

作者

Austin Chia

我是 Austin,一名博主和科技作者,曾在医疗领域担任数据科学家与数据分析师,拥有多年的从业经验。我以生物学背景开启技术之路,如今通过我的科技博客帮助他人完成同样的转型。我对技术的热情促使我为数十家 SaaS 公司撰写内容,分享经验、启发他人。

主题