想要在 Ubuntu 上安装 Kubernetes,却不想从零开始配置复杂的集群?K3s 是一个轻量级 Kubernetes 发行版,能简化安装过程,对于在 VPS 上学习 Kubernetes 的开发者来说是一个实用的选择。
本指南将介绍如何使用 K3s 在 Ubuntu 24.04 上安装 Kubernetes、创建单节点集群、部署 Nginx 应用,并验证一切是否正常运行。
您无需安装 Docker,也无需单独配置容器运行时。
什么是 K3s?为什么要使用它?
K3s 是一个获得 CNCF 认证的轻量级 Kubernetes 发行版,旨在降低 Kubernetes 安装和运维的复杂度。
它将容器运行时和集群网络等必要组件集成在一起,简化了安装过程。
与使用 kubeadm 安装传统 Kubernetes 的方式不同,K3s 会自动完成大部分初始配置。
单节点 K3s 安装后就是一个可用的 Kubernetes 集群,适合用于开发、测试和学习。
如果您还不熟悉 Pod 和 Deployment 等 Kubernetes 概念,请先阅读我们的《什么是 Kubernetes?》指南。

前提条件
开始之前,您需要准备:
- 一台运行 Ubuntu 24.04 LTS 的服务器。
- 具有 sudo 权限的 SSH 访问账号。
- 至少 2 个 CPU 核心和 2 GB 内存。
- 最好配备 4 GB 或更多内存,以获得更顺畅的学习体验。
- 足够的 SSD 存储空间,以及用于下载容器镜像的互联网连接。
K3s 官方列出的服务器节点最低配置要求是 2 个 CPU 核心和 2 GB 内存。实际工作负载可能需要更高的配置。
安全提示:保持 SSH 可访问,并限制对 6443 端口上的 Kubernetes API 的访问。本教程无需向公网开放该端口。如果您使用 UFW 或其他防火墙,请在安装前查阅 K3s 官方网络要求。
第 1 步:更新 Ubuntu 服务器
通过 SSH 连接到 Ubuntu 服务器,并更新软件包信息:
sudo apt update
sudo apt upgrade -y
检查 Ubuntu 版本:
lsb_release -a
您应该会看到 Ubuntu 24.04 LTS。
如果系统更新要求重启,请重启服务器,然后通过 SSH 重新连接。
K3s 会安装自带的容器运行时,因此无需安装 Docker Engine。
第 2 步:使用 K3s 在 Ubuntu 上安装 Kubernetes
K3s 提供官方安装脚本。
标准安装命令如下:
curl -sfL https://get.k3s.io | sh -
此命令会下载并运行 K3s 安装程序。运行前请查阅官方安装说明并检查安装程序,尤其是在生产服务器上操作时。
安装过程会将 K3s 配置为 systemd 服务,并安装 Kubernetes 管理工具。
安装完成后,检查服务状态:
sudo systemctl status k3s
查找以下内容:
Active: active (running)
按 q 退出状态显示界面。
如果服务正在运行,说明 Kubernetes 已成功启动。
第 3 步:验证 Kubernetes 集群
K3s 自带用于管理 Kubernetes 资源的 kubectl 命令行工具。
运行:
sudo k3s kubectl get nodes
集群初始化后,您会看到类似以下的输出:
NAME STATUS ROLES AGE VERSION
ubuntu-vps Ready control-plane,master 2m v1.xx.x+k3s1
您的主机名和 Kubernetes 版本会有所不同。
关键是 Ready 状态,它表示 Kubernetes 认为该节点已准备好运行工作负载。
接下来,检查系统 Pod:
sudo k3s kubectl get pods -A
此命令会列出所有命名空间中的 Pod,包括 Kubernetes 系统服务的 Pod。
某些组件可能需要一点时间才能完成初始化。如果它们仍在启动,请稍后再次检查。
现在,您已使用 K3s 在 Ubuntu 上安装 Kubernetes,集群已准备好运行容器化应用。接下来部署 Nginx,确认一切是否正常运行。
第 4 步:部署第一个应用
集群运行后,我们来部署一个简单的 Nginx Web 服务器。
创建一个 Deployment:
sudo k3s kubectl create deployment demo-nginx --image=nginx:stable
Kubernetes 会创建一个用于管理 Nginx 容器的 Deployment。
检查部署进度:
sudo k3s kubectl get deployments
等待 Deployment 显示有一个可用副本。
您也可以查看对应的 Pod:
sudo k3s kubectl get pods
最终,Pod 应显示 Running 状态,且其中的容器已就绪。
如果看到 ContainerCreating,可能是容器镜像仍在下载。
第 5 步:创建 Kubernetes Service
Kubernetes Service 为应用提供稳定的网络访问端点,即使其 Pod 被替换,该端点也保持不变。
在集群内部开放 Nginx Deployment:
sudo k3s kubectl expose deployment demo-nginx --type=ClusterIP --port=80
检查 Service:
sudo k3s kubectl get services
您应该会看到一个名为 demo-nginx 的 Service,具有 ClusterIP 地址和 80 端口。
ClusterIP 类型让应用可以在 Kubernetes 集群内部访问,但不会将 Nginx 直接暴露到公网。
第 6 步:测试 Nginx 应用
我们将使用 Kubernetes 端口转发来测试应用,无需配置公网负载均衡器。
运行:
sudo k3s kubectl port-forward service/demo-nginx 8080:80
保持此 SSH 会话处于打开状态。
该命令会将服务器环回接口上的 8080 端口转发到 Nginx Service 的 80 端口。
通过第二个 SSH 会话连接到同一台服务器,然后运行:
curl http://127.0.0.1:8080
您应该会收到包含 Nginx 默认欢迎页面的 HTML。
成功!您已使用 K3s 在 Ubuntu 上安装 Kubernetes、部署容器化应用,并通过 Kubernetes Service 访问该应用。
在第一个会话中按 Ctrl+C 停止端口转发。
此测试仅验证本地访问。要将应用公开发布,还需要配置网络、DNS、TLS 和安全措施。
常见的 K3s 安装问题
K3s 服务无法启动
检查服务日志:
sudo journalctl -u k3s -n 50
查找权限问题、网络问题或组件启动失败的记录。
Kubernetes 节点显示 NotReady
检查节点详情:
sudo k3s kubectl describe node
排查报告的节点状况、系统资源使用情况和网络问题。
Nginx Pod 未运行
检查 Pod:
sudo k3s kubectl get pods
然后查看 Deployment 的事件:
sudo k3s kubectl describe deployment demo-nginx
镜像下载失败、资源不足或集群网络问题都可能导致 Pod 无法启动。
端口转发不起作用
确保 Nginx Pod 已就绪,且 Service 已创建。
请注意,从第二个 SSH 会话测试应用期间,端口转发命令必须持续运行。
运行 K3s 需要 Docker 吗?
不需要。K3s 内置 containerd,这是一种用于运行 Kubernetes 工作负载的容器运行时。
无需在 K3s 服务器上安装 Docker Engine,您就可以部署兼容的容器镜像,包括使用 Docker 构建的镜像。
如果您刚接触容器化,我们的《Docker 入门指南》介绍了容器和镜像的工作原理。
接下来该做什么?
您的单节点集群适合用来探索 Kubernetes 概念,但它并不会自动成为可用于生产环境的高可用集群。
部署业务关键应用前,请规划以下事项:
- 集群访问控制和安全更新。
- 持久化存储和备份流程。
- 监控和资源限制。
- 使用 HTTPS 安全地对外开放应用。
- 节点或服务器故障后的恢复措施。
请记住,单节点集群仍依赖一台物理机或虚拟机。Kubernetes 无法消除这一单点故障。
常见问题
K3s 是经过认证的 Kubernetes 发行版。它实现了 Kubernetes 的功能,同时简化了安装过程并降低了运维开销。
可以。只要 Linux VPS 具备足够的 CPU、内存和存储资源,并提供管理员权限,就可以运行 K3s。
K3s 可以用于生产环境,但可靠性取决于集群架构、容量、网络、安全措施和备份配置。
可以。K3s 提供卸载脚本,但卸载可能会删除集群资源和本地工作负载数据。卸载前请备份所有重要内容。
总结
现在,您已经掌握如何使用 K3s 在 Ubuntu 上安装 Kubernetes、验证单节点集群并部署 Nginx 应用。
借助 K3s,您已搭建一个可运行的单节点 Kubernetes 环境,部署了 Nginx,通过 Service 提供访问入口,并使用端口转发验证了应用。
随着经验的积累,您可以进一步探索 Deployment、扩缩容、配置和集群管理。