K3s常见问题

常见问题定期更新,旨在回答用户最常问到的关于 K3s 的问题。

K3s 是否适合替代 k8s?

K3s 几乎可以胜任 k8s 的所有工作, 它只是一个更轻量级的版本。有关更多详细信息,请参见主要文档页面。

如何用自己的 Ingress 代替 Traefik?

只需用--disable traefik启动 K3s server,然后部署你需要的 ingress。

K3s 是否支持 Windows?

目前,K3s 本身不支持 Windows,但是我们对将来的想法持开放态度。

如何通过源码构建?

请参考 K3s BUILDING.md的说明。

K3s 的日志在哪里?

安装脚本会自动检测你的操作系统是 systemd 或 openrc 并启动服务。

当使用 openrc 运行时,日志将在/var/log/k3s.log中创建。

当使用 systemd 运行时,日志将在/var/log/syslog中创建,并使用journalctl -u k3s查看。

常见安装问题

执行官网提供的安装命令没反应?

执行官网提供的安装脚本安装 K3s,无返回:

解决方案:

  1. 使用国内安装脚本安装 k3s,详情参考快速入门指南
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
  1. 或采用离线安装方式安装 k3s
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh

注册 k3s 节点失败

报错:

level=error msg="Node password rejected, duplicate hostname or contents of '/etc/rancher/node/password' may not match server node-passwd entry, try enabling a unique node name with the --with-node-id flag"

原因分析:

根据日志提示大概的原因是两个 k3s 节点主机名重复,或者‘/etc/rancher/node/password 与 k3s server 的 node-passwd 不匹配照成。

节点注册到 k3s 集群,会在节点的/etc/rancher/node/password生成一串随机的 password。如果 agent 首次注册,master 节点会把 agent 发送的 node-name 和 node-passwd 解析出来存储到/var/lib/rancher/k3s/server/cred/node-passwd 中。如果 agent 是非首次注册,k3s master 会结合 node-name 和 node-passwd 进行比对,如果信息不一致会拒绝添加节点请求。

解决方案:

为什么会出现 passwd 不一致呢?正常来说如果用 k3s-agent-uninstall.sh 来清理安装过的 agent node,并不会删除 password 文件(/etc/rancher/node/password),那么问题很可能是 VM 重建或者手动操作删除的这个文件。因为 agent 上删除了 password,agent 再次注册时会重新生成 password,就导致了新的 password 和 k3s master 上原先存储的不一致。

  1. 手动在 agent 上创建 password,内容和 server 中存储保持一致
  2. 修改 server 中的原始内容,让 password 和 agent 上新生成的保持一致
  3. 可以试试 agent 注册时使用--with-node-id,这样 server 中认为这完全是新 node,不会用原始信息比对
  4. 如果是因为主机名冲突导致的报错,可以修改主机名之后从新注册集群

如何创建只带有 master 角色的节点?

默认情况下,k3s 启动 master 节点也同时具有 worker 角色,是可调度的,因此可以在它们上启动工作

解决方案

  1. 通过 --node-taint
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--node-taint k3s-controlplane=true:NoExecute" sh -

  1. 通过 --disable-agent
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--disable-agent" sh -

跨主机 pod 无法通信?

请参考k3s 网络要求检查主机网络或防火墙,查看 vxlan 对应的 UDP/8472 端口是否开放。

如何指定某个网卡添加 K3S 集群?

可以通过--advertise-address设置 apiserver 向集群成员发布的 IP 地址,详细说明参考K3s Server 配置参考

Demo:

主机eth0eth1
k3s110.0.2.15/24 (NAT)192.168.99.211/24 (Host-Only)
k3s210.0.2.15/24 (NAT)192.168.99.212/24 (Host-Only)

K3s1(master):

# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--advertise-address 192.168.99.211" sh –

K3s2(worker):

# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--node-ip 192.168.99.212" K3S_URL=https://192.168.99.211:6443 K3S_TOKEN=mynodetoken sh -

使用 netstat 无法查到 80 和 443 端口?

K3s 使用 traefik 作为默认的 ingress controller。启动之后是通过 iptables 转发 80/443 端口,所以用netstat无法查到对应端口,可以通过iptablesnmap等命令去确认端口是否开启。更多说明请参考k3s 功能扩展之 Helm、Traefik LB、ServiceLB 存储及 RootFS

为什么当 k3s 节点故障后,Pod 需要大于 5 分钟时间才能被重新调度?

参考Rancher2.x FAQ

可以参考下面这个示例调整tolerationSeconds时间:

kubectl create -f https://raw.githubusercontent.com/kingsd041/rancher-k3s/master/demo-busybox.yaml

如何使用 crictl 清理未使用的镜像

k3s crictl rmi --prune

K3s worker 节点的角色默认为none,如果修改?

可以通过kubectl label node ${node} node-role.kubernetes.io/worker=worker为节点增加 worker 角色。

Helm: Error: Kubernetes cluster unreachable

解决方案参考集群访问章节。

最后由 kingsd041更新 于