什么是 Kubernetes?Kubernetes 也称为 K8s,是一个开源容器编排平台,可自动部署和管理容器化应用。它帮助团队在多台服务器上运行应用、替换故障工作负载,并在需求变化时扩展服务。
如果您的网站在一台服务器上就能稳定运行,可能不需要 Kubernetes。但如果应用包含多个服务、需要频繁更新,或对可用性要求较高,Kubernetes 可以简化运维工作。
下面来看看 Kubernetes 的工作原理、适用场景,以及运行它需要具备哪些条件。
Kubernetes 如何工作?
Kubernetes 管理集群:由多台物理机或虚拟机组成、为应用提供资源的系统。您不必逐一指定每台服务器要启动哪个容器,只需描述期望的状态,Kubernetes 就会设法维持这一状态。
以下是您会接触到的主要组件:
- 控制平面:协调集群、处理请求,并决定工作负载应在哪些节点上运行。
- 节点:为应用提供 CPU、内存及其他资源的服务器。
- Pod:Kubernetes 中最小的可部署单元,通常包含一个容器,但也可以包含多个。
- Deployment:定义并维持所需的应用副本数量,同时管理滚动更新。
- Service:为不断变化的 Pod 集合提供稳定的网络访问方式。
假设您的网店需要三个后端副本来处理客户请求。您可以配置一个包含三个副本的 Deployment,Kubernetes 会将 Pod 调度到容量充足的节点上。如果某个 Pod 发生故障,Kubernetes 会设法将其替换。
这种方式称为声明式管理:您指定需要运行什么,而不必手动管理每个容器。
Kubernetes 的主要优势
1. 自动故障恢复
Kubernetes 可以重启发生故障的容器、替换运行状况异常的 Pod,并在节点故障时重新调度符合条件的工作负载。这减少了人工干预,但能否恢复取决于可用资源和配置是否正确。
2. 灵活扩缩容
您可以手动增加应用副本,也可以配置 Pod 水平自动扩缩器(HPA),根据 CPU 利用率等指标调整副本数量。自动扩缩副本需要正常运行的指标采集系统和足够的集群容量;Kubernetes 本身不会凭空增加服务器资源。
3. 更平稳的应用更新
Deployment 支持滚动更新,让新版本的应用逐步替换旧副本。如果更新引发问题,Kubernetes 也支持回滚到较早的 Deployment 修订版本。
4. 服务发现与资源管理
即使 Pod 发生变化,Kubernetes Service 也能为应用提供稳定的通信方式。CPU 和内存请求还可以帮助调度器将工作负载安排到合适的节点上。
Kubernetes 有哪些用途?
对于需要跨多台服务器协调运行的应用,Kubernetes 尤其有用。常见场景包括:
- 电商平台:在繁忙时段保持多个店面或 API 副本可用。
- SaaS 产品:管理多个面向客户的服务,并频繁部署更新。
- 微服务:通过一致的网络和部署规则,协调独立部署的服务。
- 后台处理:在运行应用服务的同时执行定时作业和处理任务。
Kubernetes 并非只适用于大型企业,但规模较小的项目应权衡这些优势与运行集群所需的投入。
Kubernetes 与 Docker 有什么区别?
Docker 和 Kubernetes 承担不同的任务。Docker 帮助构建和运行容器;Kubernetes 负责对容器化工作负载进行编排。您可以使用 Docker 构建应用镜像,再通过 containerd 等兼容的容器运行时将该镜像部署到 Kubernetes。
如果您想从更基础的内容开始了解容器,请参阅我们的《什么是 Docker?》指南。如果您正在 Docker Compose 和 Kubernetes 之间做选择,请阅读我们的《Docker 与 Kubernetes 对比》。
可以在 VPS 上运行 Kubernetes 吗?
可以。只要具备足够的资源、管理权限和兼容的网络配置,Kubernetes 就可以在 Linux 虚拟专用服务器上运行。您可以在一台 VPS 上搭建单节点学习环境,也可以将多台服务器组成集群。
单节点配置适合测试,但无法防范底层服务器故障。需要高可用性的生产环境通常需要多个节点、合适的网络配置、持久化存储、监控,以及具备容错能力的控制平面。
Zynoo 的Linux VPS 托管服务为自行管理的环境提供 root 权限;如果集群节点需要独享硬件,也可以选择独立服务器。
请注意,安装 Kubernetes、配置集群网络和维护软件,与租用服务器是不同的工作。不要认为 VPS 套餐默认包含托管式 Kubernetes 服务。
什么时候应该使用 Kubernetes?
如果您的应用需要多个服务器节点、多个服务副本,或频繁进行协调部署,可以考虑使用 Kubernetes。当手动恢复故障和扩缩容变得难以管理时,它也很有用。
对于小型网站、个人项目,或在一台 VPS 上稳定运行的少量服务,您很可能不需要 Kubernetes。在这些情况下,Docker Compose 的运维可能更简单、成本也更低。
Kubernetes 的主要缺点是复杂:集群升级、安全权限、网络、存储和监控都需要投入精力。虽然 Kubernetes 软件是开源的,但基础设施和管理工作并不是免费的。
如何开始使用 Kubernetes
学习时,可以先使用 Minikube 或 kind 等工具搭建本地集群。按照Kubernetes 官方教程部署示例应用,并了解 Pod、Deployment 和 Service。
集群运行起来且kubectl配置完成后,您可以使用以下命令查看集群节点:
kubectl get nodes
迁移到生产环境之前,请规划好备份、访问控制、监控和网络配置,并考虑节点不可用时的应对措施。
常见问题
Kubernetes 是开源软件,因此无需支付 Kubernetes 许可费。但您仍需支付服务器、存储和网络费用,也可能需要为托管服务或技术管理付费。
不是。您也可以将它用于较小的工作负载,但这并不意味着一定要这样做。当集群级管理能解决实际问题时,它的优势才最为明显。
可以。Kubernetes 能运行使用 Docker 构建的兼容容器镜像。它通常使用 containerd 或 CRI-O 等容器运行时,而不是直接使用 Docker Engine。
不能。多个副本、正确配置的健康检查和具备容错能力的基础设施可以提高可用性,但无法消除所有可能的故障。
总结
Kubernetes 让跨服务器管理容器化应用变得更加可控。它可以处理工作负载调度、故障恢复、扩缩容和有序更新,但也会带来额外的基础设施和运维责任。
对于只使用一台服务器的项目,先从简单的方案开始。当您的应用确实需要集群级自动化时,Kubernetes 就是一个切实可行的下一步选择。