在容器化应用迅速发展的今天,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"
按顺序,这些选项的含义:
- 禁用 AppArmor
- 允许容器的 cgroup 访问所有设备
- 防止丢弃容器的任何功能
- 在容器中/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 部署变得简单、高效!