CloudMap
全部简历LinuxKubernetesPrometheusArgo CDPostgreSQLDocker其他

© 2026 云原生洞见 · Cloud Native Insights · 保留所有权利

文章目录

11 项
  • 1.目的
  • 2.前置条件
  • 3.操作步骤
  • 3.1 检查系统时间与防火墙
  • 3.2 永久关闭 Swap
  • 3.3 安装 K3s
  • 3.4 验证集群状态
  • 3.5 为普通用户配置 kubectl
  • 3.6 开启 kubectl 自动补全
  • 3.7 部署测试应用
  • 4.常见问题与排错
Kubernetes2026年2月16日

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 disable

3.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
# 应看到节点状态为 Ready

3.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-test

4.常见问题与排错

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。

最后更新:2026年5月27日← 更多「Kubernetes」文章