如果您了解云计算的崛起,肯定听说过 Kubernetes。在现代应用开发中,它是管理各类基础设施架构的关键工具,值得学习。
在这篇入门文章中,我们将概述 Kubernetes 及其组件,并提供一份在本地实施的完整教程。若您希望通过动手实践来配合本教程,请查看我们的Kubernetes 入门课程。
什么是 Kubernetes?
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩缩和管理容器化应用。它最初由 Google 开发,如今已成为大规模运行容器的事实标准。
它屏蔽了管理单个容器的复杂性,让开发者可以专注于构建和部署应用。
为什么使用 Kubernetes?
以下是使用 Kubernetes 的一些关键优势:
- 容器编排:自动在集群中分发和调度容器。
- 可扩展性与自愈:简化水平扩展(复制容器)与垂直扩展(调整资源分配),并具备自愈能力。
- 高可用性:即使部分节点故障,也能确保容器(以及您的服务)保持可用。
- 可移植性:对底层基础设施进行抽象,便于在本地和不同云服务商上运行。
- 高效的资源利用:根据资源使用情况调整容器规模,优化资源分配并降低成本。
Kubernetes 在多种场景中都很有用,例如:
- DevOps:自动化容器化应用的部署、扩缩与管理。
- 微服务:将大型单体应用拆分为更小、可管理的服务,提高敏捷性与可扩展性。
- 大数据:通过容器简化复杂大数据系统的部署与管理。
- 边缘计算:在边缘设备上运行 Kubernetes,将数据处理与分析更贴近数据产生处,降低延迟并提升性能。
- 持续交付:与 Jenkins 和 GitLab 等工具集成,构建自动化的持续交付流水线。
- 机器学习:为训练与部署机器学习模型提供可扩展平台,以处理大规模数据集和复杂计算。
Kubernetes 的关键概念
要理解 Kubernetes 的工作方式,您需要对其关键概念有良好把握。
主要包括 4 个概念:
- 集群(Clusters)
- Pod
- 命名空间(Namespaces)
- 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 包括:
使用 Operator 可以大幅简化集群内应用与资源的管理。凭借自动化任务与高级功能,它们在 Kubernetes 用户中日益流行。
Kubernetes 的核心组件
在大多数 Kubernetes 环境中,都有一组核心组件。

来源:Kubernetes
以下是各组件及其作用:
- API Server:充当所有 Kubernetes 资源的集中管理点。它接收来自用户和其他组件的请求,并执行策略以管理集群。
- Controller Manager:通过持续监控并协调集群对象的变更来维护集群的期望状态。
- etcd:分布式键值存储,是 Kubernetes 的主要数据存储。它保存所有集群数据,确保数据一致性与可用性。
- kubelet:运行在集群中每个节点上的代理,负责管理容器,确保其按指定配置运行。
- Kube Proxy:运行在每个节点上,负责将网络流量路由至正确的容器。
Kubernetes 的工作原理
如前所述,Kubernetes 会在集群间自动化容器化应用的部署、扩缩与管理。无需人工干预,即可确保高可用、高效的资源使用与自愈能力。
Kubernetes 不再管理单个容器,而是将它们分组为 Pod,并分布到各个工作节点上;这些节点与控制平面通信,以保持系统的期望状态。
简而言之,Kubernetes 的工作方式如下:
- 定义应用部署:在 YAML 文件中指定期望状态,包括副本数、资源限制和网络规则。
- 调度工作负载:调度器根据可用资源将 Pod 分配到工作节点。
- 管理集群状态:控制器管理器确保系统维持正确数量的 Pod,并替换故障实例。
- 处理网络:通过 Service 与 Ingress 控制器管理服务间通信与外部访问。
- 扩缩与自愈:根据需求调整运行中的 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 为例):
winget install Kubernetes.minikube技术支持
您应能看到如下安装信息。如有提示,请使用“Y”同意条款与条件。

接着,使用以下 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 为例):
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 及其组件,并提供一份在本地实施的完整教程。若您希望通过动手实践来配合本教程,请查看我们的Kubernetes 入门课程。
什么是 Kubernetes?
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩缩和管理容器化应用。它最初由 Google 开发,如今已成为大规模运行容器的事实标准。
它屏蔽了管理单个容器的复杂性,让开发者可以专注于构建和部署应用。
为什么使用 Kubernetes?
以下是使用 Kubernetes 的一些关键优势:
Kubernetes 在多种场景中都很有用,例如:
Kubernetes 的关键概念
要理解 Kubernetes 的工作方式,您需要对其关键概念有良好把握。
主要包括 4 个概念:
我们将在下文进一步介绍。
集群
Kubernetes 集群由一组节点(node)组成,即运行 Kubernetes 软件的独立机器。集群充当控制平面,用于管理应用和服务。
在典型部署中,集群包含一个主节点和多个工作节点。主节点负责协调集群中的所有活动,而工作节点负责运行与管理容器。
Pod
Pod 是 Kubernetes 中最小的部署单元。它可以包含一个或多个容器,以及共享的存储资源和网络设置。
每个 Pod 都有自己唯一的 IP 地址,并可通过该地址与同一集群中的其他 Pod 通信。这使应用不同组件之间的通信更加高效。
Pod 可以是单容器或多容器,每种都有其使用场景。
命名空间
命名空间提供在单个集群内对资源进行逻辑分区的方式。它有助于更好地组织与管理资源,并实现更严格的安全控制。
命名空间还可用于管理不同环境,如开发、预生产和生产。这可确保资源相互隔离,不受其他环境变更的影响。
要查看集群中的命名空间,您可以使用以下命令:
要在命名空间之间切换,请使用以下命令
Operator
Operator 是用于帮助自动化管理 Kubernetes 资源的软件扩展。它们使用自定义控制器和 API 扩展,更高效地自动处理复杂任务。
一些常见的 Operator 包括:
使用 Operator 可以大幅简化集群内应用与资源的管理。凭借自动化任务与高级功能,它们在 Kubernetes 用户中日益流行。
Kubernetes 的核心组件
在大多数 Kubernetes 环境中,都有一组核心组件。
来源:Kubernetes
以下是各组件及其作用:
Kubernetes 的工作原理
如前所述,Kubernetes 会在集群间自动化容器化应用的部署、扩缩与管理。无需人工干预,即可确保高可用、高效的资源使用与自愈能力。
Kubernetes 不再管理单个容器,而是将它们分组为 Pod,并分布到各个工作节点上;这些节点与控制平面通信,以保持系统的期望状态。
简而言之,Kubernetes 的工作方式如下:
通过处理基础设施复杂性,Kubernetes 让团队专注于构建应用而非管理部署,对于各行业可扩展、具韧性的工作负载至关重要。
常见术语与概念
以下是您需要了解的一些关键术语及其定义:
开始使用 Kubernetes
初次接触 Kubernetes 可能会感到困难,尤其是在理解各种术语与概念方面。但一旦掌握这些基本概念,使用该平台将变得轻松许多。
我们先来看看与 Kubernetes 搭配使用的一些工具。
适合初学者的工具
对于 Kubernetes 初学者而言,直接将应用部署到云端可能负担较重。因此,您可以借助一些常用工具在本地进行部署。
以下是两款最常用的工具:
1. Minikube
Minikube 是轻量级的 Kubernetes 实现,可在单台主机上运行。它通常在您的笔记本或工作站的虚拟机(VM)中运行单节点集群。
使用理由:
如何安装 Minikube(以 Windows 为例):
您应能看到如下安装信息。如有提示,请使用“Y”同意条款与条件。
接着,使用以下
start命令在 minikube 上启动一个简单的集群:要检查集群节点是否成功启动,请运行
get命令:注意:您需要在本地安装
kubectlAPI 客户端(许多情况下 Minikube 会自动安装)。2. Kind(Kubernetes in Docker)
Kind 是 Kubernetes in Docker 的缩写。它使用 Docker 容器作为 Kubernetes 集群中的“节点”,提供简单的、基于容器的本地集群环境。
使用理由:
如何安装 Kind(以 Windows 为例):
安装完成后,您可以使用
create cluster命令创建一个简单集群并为其命名。要检查 Kubernetes kind 集群是否已启动,请使用以下
get命令。您还可以通过
kubectl界面与集群交互:注意:请确保已安装并运行 Docker。
云服务商(EKS、GKE、AKS)
在云端运行 Kubernetes 时,您可以选择以下云服务商:
1. Amazon EKS(Elastic Kubernetes Service)
Amazon EKS 是一项托管服务,可让您在 AWS 上轻松运行 Kubernetes,而无需自行管理控制平面或工作节点。它与其他 AWS 服务集成,提供负载均衡、存储、自动扩缩与监控等功能。
其他功能包括:
2. Google GKE(Google Kubernetes Engine)
Google GKE 是在 Google Cloud Platform 上运行 Kubernetes 的全托管服务。它提供自动扩缩、自愈能力,并与其他 Google Cloud 服务集成。
其他功能包括:
3. Azure AKS(Azure Kubernetes Service)
Azure AKS 提供与 Azure 存储、网络与负载均衡等服务完全集成的无服务器 Kubernetes 集群。它还内置支持 Helm 与 Prometheus 等 DevOps 工具。
其他功能包括:
学习 Kubernetes 的资源
第一次学习 Kubernetes 可能会感到不知所措,但有许多资源可帮助您入门。
以下是一些推荐资源:
Kubernetes 部署示例
要在 Kubernetes 中运行应用,您需要遵循一套结构化流程,包括搭建集群、部署容器化应用、将其暴露为服务,并按需扩缩。
我们已在Kubernetes 教程中详细介绍了这一过程,下面是高层次概览:
搭建 Kubernetes 集群
使用 Minikube 创建本地集群用于测试和开发。安装 Minikube 并通过以下命令启动集群:
部署应用
在Deployment YAML 文件中定义应用的期望状态。例如,部署一个Nginx Web 服务器如下所示:
使用以下命令应用部署:
将应用暴露为服务
为使应用可访问,使用以下命令创建一个Service:
获取外部 URL 并在浏览器中打开应用:
扩缩与监控应用
Kubernetes 允许您轻松扩缩应用。要增加副本数:
查看正在运行的 Pod:
查看日志进行调试:
以下是一些可进一步探索的高级项目示例:
结语
Kubernetes 是一款功能强大的平台,可在大规模下部署与管理容器化应用,对于需要弹性、可靠数据处理环境的数据工程师而言至关重要。
如果您有兴趣进一步了解 Kubernetes,我们的Kubernetes 入门课程是一个绝佳的起点。