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,无返回:
解决方案:
- 使用国内安装脚本安装 k3s,详情参考快速入门指南
- 或采用离线安装方式安装 k3s
#
注册 k3s 节点失败报错:
原因分析:
根据日志提示大概的原因是两个 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 上原先存储的不一致。
- 手动在 agent 上创建 password,内容和 server 中存储保持一致
- 修改 server 中的原始内容,让 password 和 agent 上新生成的保持一致
- 可以试试 agent 注册时使用--with-node-id,这样 server 中认为这完全是新 node,不会用原始信息比对
- 如果是因为主机名冲突导致的报错,可以修改主机名之后从新注册集群
#
如何创建只带有 master 角色的节点?默认情况下,k3s 启动 master 节点也同时具有 worker 角色,是可调度的,因此可以在它们上启动工作
解决方案
- 通过 --node-taint
- 通过 --disable-agent
#
跨主机 pod 无法通信?请参考k3s 网络要求检查主机网络或防火墙,查看 vxlan 对应的 UDP/8472 端口是否开放。
#
如何指定某个网卡添加 K3S 集群?可以通过--advertise-address
设置 apiserver 向集群成员发布的 IP 地址,详细说明参考K3s Server 配置参考
Demo:
主机 | eth0 | eth1 |
---|---|---|
k3s1 | 10.0.2.15/24 (NAT) | 192.168.99.211/24 (Host-Only) |
k3s2 | 10.0.2.15/24 (NAT) | 192.168.99.212/24 (Host-Only) |
K3s1(master):
K3s2(worker):
#
使用 netstat 无法查到 80 和 443 端口?K3s 使用 traefik 作为默认的 ingress controller。启动之后是通过 iptables 转发 80/443 端口,所以用netstat
无法查到对应端口,可以通过iptables
,nmap
等命令去确认端口是否开启。更多说明请参考k3s 功能扩展之 Helm、Traefik LB、ServiceLB 存储及 RootFS
#
为什么当 k3s 节点故障后,Pod 需要大于 5 分钟时间才能被重新调度?可以参考下面这个示例调整tolerationSeconds
时间:
#
如何使用 crictl 清理未使用的镜像none
,如果修改?#
K3s worker 节点的角色默认为可以通过kubectl label node ${node} node-role.kubernetes.io/worker=worker
为节点增加 worker 角色。
#
Helm: Error: Kubernetes cluster unreachable解决方案参考集群访问章节。