在 LXC 容器中跑 K3s?这套方案又轻又稳

K3s + LXC = 高效、低耗、易部署的容器编排方案

Posted by Ksd on July 10, 2025

在容器化应用迅速发展的今天,Kubernetes 已成为主流的容器编排解决方案。然而,它复杂的架构和较高的资源需求,往往让边缘计算或小型环境部署面临不小挑战。

K3s 的出现,正是为了解决这一痛点。它是一个轻量级的 Kubernetes 发行版,安装简单、资源占用低,特别适合边缘场景。

当我们将 K3s 与强大开源虚拟化平台 Proxmox 结合使用时,就构建出了一个高性价比、可扩展的 Kubernetes 部署方案。

本文将详细介绍如何在 Proxmox LXC 容器中部署 K3s,帮助你高效开启 Kubernetes 实践之路。

什么是 K3s?

K3s 是一个专为资源受限环境设计的轻量级 Kubernetes 发行版,具备完整的 Kubernetes 兼容性,同时去除了一些不必要的组件,部署更快、使用更简单。

适用于边缘计算、IoT 设备、小型生产环境和开发测试等场景。

K3s 的核心优势:

  • 轻量简洁:二进制体积小,依赖少
  • 部署快速:一条命令即可启动 Kubernetes
  • 资源占用低:最低可运行在 512MB 内存设备上

认识 Proxmox LXC 容器

Proxmox 是一个支持 KVM 虚拟机和 LXC 容器的开源虚拟化平台,LXC(Linux Containers)是一种操作系统级虚拟化技术。

为什么选择 LXC 容器?

  • 更高效:相比完整虚拟机,占用资源更少
  • 更隔离:提供安全、独立的运行环境
  • 更灵活:在 Proxmox 中便于扩容和管理

通过使用 LXC 容器运行 K3s,可以在不牺牲性能的前提下实现更高的资源利用率。

为什么要将 K3s 与 Proxmox 容器结合?

将 K3s 部署在 Proxmox 容器中,可以充分发挥两者的轻量与高效特性。这一组合非常适合:

  • 对 Kubernetes 感兴趣的 Homelab 爱好者
  • 资源有限的边缘计算场景
  • 预算有限的中小型企业

在 Proxmox 容器中安装 K3s

Step 1:创建 LXC 容器

在 Proxmox 用户界面中,单击 “创建 CT”。填写 LXC 容器的详细信息。确保取消选中“无特权的容器”复选框:

选择模板,本例使用 Ubuntu 20.04:

磁盘、CPU、内存,网络根据实际情况设置,并在最后一页,确认你的设置,然后单击“完成”。Proxmox 将创建容器:

Step 2:修改 pve 主机配置

现在,我们需要进行一些底层调整,赋予容器适当的权限。你需要通过 root 用户 ​ SSH 连接到 Proxmox 主机,在/etc/pve/lxc 目录中,你将找到名为 XXX.conf 的文件,其中 XXX 是我们刚刚创建的容器的 ID 号。修改该文件并添加以下几行:

lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.mount.auto: "proc:rw sys:rw"

按顺序,这些选项的含义:

  1. 禁用 AppArmor
  2. 允许容器的 cgroup 访问所有设备
  3. 防止丢弃容器的任何功能
  4. 在容器中/proc 以/sys 读写方式挂载。

Step 3:启动 LXC 容器,并修改容器配置

LXC 容器中需要确保 /dev/kmsg 存在。Kubelet 会使用它来实现一些日志记录功能,默认情况下它在容器中是不存在的。

cat <<EOF > /etc/rc.local
#!/bin/sh -e

if [ !  -e /dev/kmsg ]; then
    ln -s /dev/console /dev/kmsg 
fi
mount --make-rshared /
EOF

添加可自行权限并重启容器:

chmod +x /etc/rc.local
reboot

Step 4:准备容器环境

在容器中执行以下命令,安装依赖:

apt install -y curl

个别 lxc 模版缺少 iptables openssh-server,需要手动安装

Step 5:安装 K3s

通过安装脚本一键安装:

curl -sfL https://get.k3s.io | sh -

安装完成后,验证节点状态:

root@k3s-demo:~# kubectl get nodes
NAME       STATUS   ROLES                  AGE     VERSION
k3s-demo   Ready    control-plane,master   6m13s   v1.32.6+k3s1

Step 6:配置本地 kubectl

将 K3s 的 kubeconfig 文件复制到本地机器:

scp root@<容器IP>:/etc/rancher/k3s/k3s.yaml ~/.kube/config

修改文件中的 IP 地址为容器的实际地址。然后测试连接:

kubectl get pods --all-namespaces

Step 7:部署测试应用

部署一个简单的 Nginx 服务:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

查询服务端口,访问应用:

kubectl get services

常见问题排查

  • 网络不可达:检查容器网络配置是否正确
  • K3s 启动失败:使用 journalctl -u k3s 查看日志
  • kubectl 无法连接:确认 kubeconfig 文件路径和权限无误

总结

将 K3s 部署在 Proxmox 容器中,是一种轻量、灵活、经济的 Kubernetes 实践方式。无论你是个人爱好者,还是中小企业探索容器化落地,这一方案都值得一试。

拥抱边缘计算,从这一套组合方案开始,让 Kubernetes 部署变得简单、高效!