K3s 常见问题

2022-08-24 11:00 更新

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 https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
  2. 或采用离线安装方式安装 k3s
  3. 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
  2. curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--node-taint k3s-controlplane=true:NoExecute" sh -


  3. 通过 --disable-agent
  4. curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.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:

主机 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):

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

K3s2(worker):

# curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.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​无法查到对应端口,可以通过​iptables​,​nmap​等命令去确认端口是否开启。更多说明请参考k3s 功能扩展之 Helm、Traefik LB、ServiceLB 存储及 RootFS

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

这是因为下列默认 Kubernetes 设置共同产生的效果:

  • kubelet
    • node-status-update-frequency​:设置 kubelet 上报节点信息给 master 的频率。(默认 10s)
  • kube-controller-manager
    • node-monitor-period​:NodeController 中 NodeStatus 的同步周期(默认 5s)
    • node-monitor-grace-period​:节点被认定为不健康前,节点不作响应的总的时间。(默认 40s)
    • pod-eviction-timeout​:优雅删除故障节点上容器的周期。(默认 5m0s)

在 Kubernetes v1.13 版本中,​TaintBasedEvictions​特性是默认开启的。

  • kube-apiserver (Kubernetes v1.13 版本及以后)
    • default-not-ready-toleration-seconds​: 表示 notReady:NoExecute 容忍的容忍时间。notReady:NoExecute 被默认添加到没有该容忍的所有 Pod。
    • default-unreachable-toleration-seconds​: 表示 unreachable:NoExecute 容忍的容忍时间。unreachable:NoExecute 被默认添加到没有该容忍的所有 Pod。

可以参考下面这个示例调整​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


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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号