K3s 单节点集群部署
1.目的
在腾讯云 Ubuntu 云服务器上快速部署一套单节点 K3s 集群,并为普通用户配置好 kubectl 管理工具。
2.前置条件
已拥有一台腾讯云 CVM 实例,操作系统为 Ubuntu 22.04 LTS。
已通过 SSH 以普通用户(具备
sudo权限)登录。腾讯云安全组已放通以下入站端口(或测试阶段暂时放通所有):
6443(Kubernetes API Server)
10250(kubelet 通信)
8472(Flannel VXLAN,如使用默认 CNI)
确保系统时间与 NTP 同步(时间偏差过大会导致证书异常)。
3.操作步骤
3.1 检查系统时间与防火墙
# 确认时间同步
timedatectl status | grep "System clock synchronized"
# 应输出 yes,若为 no,执行 sudo timedatectl set-ntp true
# 如果系统启用了 ufw 防火墙,为简化部署可临时关闭(生产环境请按需配置规则)
sudo ufw status
# 若状态为 active,执行 sudo ufw disable3.2 永久关闭 Swap
K3s 强制要求关闭交换分区,否则 kubelet 会拒绝启动。
# 临时关闭
sudo swapoff -a
# 永久关闭(注释 /etc/fstab 中带 swap 的行)
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 验证
free -h | grep Swap # 应显示 0B
swapon --show # 应无任何输出
# 重启使 fstab 修改生效(重启后 swap 将不再自动挂载)
sudo reboot注意:执行 reboot 后当前 SSH 会断开,请等待约 1~2 分钟后重新连接。
3.3 安装 K3s
重新登录服务器后,执行一键安装命令(国内加速)
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -此脚本会自动完成:
下载 K3s 二进制至
/usr/local/bin/k3s创建 systemd 服务单元
/etc/systemd/system/k3s.service启动单节点集群(Server 角色)
生成集群配置文件
/etc/rancher/k3s/k3s.yaml自动安装 containerd 作为容器运行时
3.4 验证集群状态
# 检查 K3s 服务状态
sudo systemctl status k3s
# 应显示 active (running)
# 检查节点是否就绪
sudo k3s kubectl get nodes
# 应看到节点状态为 Ready3.5 为普通用户配置 kubectl
通过以下几步,让你无需 sudo 即可管理集群,同时确保 kubectl 命令可用。
# 5.1 创建 .kube 目录并复制集群配置文件
mkdir -p $HOME/.kube
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 5.2 让 kubectl 命令可用(使用 K3s 内置的 kubectl)
echo "alias kubectl='k3s kubectl'" >> ~/.bashrc
source ~/.bashrc
# 5.3 测试
kubectl version --short
kubectl get nodes提示:若将来需要从本机外部访问集群,请将 ~/.kube/config 中的 server: https://127.0.0.1:6443 替换为云服务器的公网 IP,并确保安全组放通 6443 端口。
3.6 开启 kubectl 自动补全
大幅提升日常操作效率。
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc重新登录后,输入 kubectl g 并按 Tab 键即可自动补全
3.7 部署测试应用
kubectl create deployment nginx-test --image=nginx:latest
kubectl expose deployment nginx-test --port=80 --type=ClusterIP
kubectl get pods,svc测试完成后可删除:
kubectl delete deployment nginx-test
kubectl delete service nginx-test4.常见问题与排错
kubectl get nodes 提示 connection refused
现象:执行
kubectl get nodes时返回连接被拒绝的错误。可能原因:k3s 服务未启动,或服务器安全组/防火墙未放行 API Server 端口(默认为 6443)。
解决方式:检查 k3s 服务状态
sudo systemctl status k3s,并确认云平台安全组规则或本地防火墙已放行相应端口。
节点状态为 NotReady
现象:
kubectl get nodes输出中节点状态显示为NotReady。可能原因:容器网络接口(CNI)未就绪,或系统未关闭 swap(kubelet 要求关闭 swap)。
解决方式:执行
free -h确认 Swap 分区大小为 0;若不为 0,需永久禁用。同时查看kube-system命名空间下相关 Pod 的日志,排查 CNI 插件故障。
kubectl 命令报 command not found
现象:终端执行
kubectl提示命令未找到。可能原因:未设置别名,且系统中未独立安装 kubectl 工具。
解决方式:参照文档步骤 3.5 进行安装,或通过 Snap 快速安装:
sudo snap install kubectl --classic。