K3s 常見問題

2022-08-24 11:00 更新

K3s 是否適合替代 k8s?

K3s 幾乎可以勝任 k8s 的所有工作, 它只是一個(gè)更輕量級(jí)的版本。有關(guān)更多詳細(xì)信息,請(qǐng)參見主要文檔頁(yè)面。

如何用自己的 Ingress 代替 Traefik?

只需用?--disable traefik?啟動(dòng) K3s server,然后部署你需要的 ingress。

K3s 是否支持 Windows?

目前,K3s 本身不支持 Windows,但是我們對(duì)將來的想法持開放態(tài)度。

如何通過源碼構(gòu)建?

請(qǐng)參考 K3s BUILDING.md的說明。

K3s 的日志在哪里?

安裝腳本會(huì)自動(dòng)檢測(cè)你的操作系統(tǒng)是 systemd 或 openrc 并啟動(dòng)服務(wù)。

當(dāng)使用 openrc 運(yùn)行時(shí),日志將在?/var/log/k3s.log?中創(chuàng)建。

當(dāng)使用 systemd 運(yùn)行時(shí),日志將在?/var/log/syslog?中創(chuàng)建,并使用?journalctl -u k3s?查看。

常見安裝問題

執(zhí)行官網(wǎng)提供的安裝命令沒反應(yīng)?

執(zhí)行官網(wǎng)提供的安裝腳本安裝 K3s,無(wú)返回:


解決方案:

  1. 使用國(guó)內(nèi)安裝腳本安裝 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

注冊(cè) k3s 節(jié)點(diǎn)失敗

報(bào)錯(cuò):

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"

原因分析:

根據(jù)日志提示大概的原因是兩個(gè) k3s 節(jié)點(diǎn)主機(jī)名重復(fù),或者?/etc/rancher/node/password? 與 k3s server 的 node-passwd 不匹配造成。

節(jié)點(diǎn)注冊(cè)到 k3s 集群,會(huì)在節(jié)點(diǎn)的?/etc/rancher/node/password?生成一串隨機(jī)的 password。如果 agent 首次注冊(cè),master 節(jié)點(diǎn)會(huì)把 agent 發(fā)送的 node-name 和 node-passwd 解析出來存儲(chǔ)到/var/lib/rancher/k3s/server/cred/node-passwd 中。如果 agent 是非首次注冊(cè),k3s master 會(huì)結(jié)合 node-name 和 node-passwd 進(jìn)行比對(duì),如果信息不一致會(huì)拒絕添加節(jié)點(diǎn)請(qǐng)求。

解決方案:

為什么會(huì)出現(xiàn) passwd 不一致呢?正常來說如果用 k3s-agent-uninstall.sh 來清理安裝過的 agent node,并不會(huì)刪除 password 文件(/etc/rancher/node/password),那么問題很可能是 VM 重建或者手動(dòng)操作刪除的這個(gè)文件。因?yàn)?nbsp;agent 上刪除了 password,agent 再次注冊(cè)時(shí)會(huì)重新生成 password,就導(dǎo)致了新的 password 和 k3s master 上原先存儲(chǔ)的不一致。

  1. 手動(dòng)在 agent 上創(chuàng)建 password,內(nèi)容和 server 中存儲(chǔ)保持一致
  2. 修改 server 中的原始內(nèi)容,讓 password 和 agent 上新生成的保持一致
  3. 可以試試 agent 注冊(cè)時(shí)使用--with-node-id,這樣 server 中認(rèn)為這完全是新 node,不會(huì)用原始信息比對(duì)
  4. 如果是因?yàn)橹鳈C(jī)名沖突導(dǎo)致的報(bào)錯(cuò),可以修改主機(jī)名之后從新注冊(cè)集群

如何創(chuàng)建只帶有 master 角色的節(jié)點(diǎn)?

默認(rèn)情況下,k3s 啟動(dòng) master 節(jié)點(diǎn)也同時(shí)具有 worker 角色,是可調(diào)度的,因此可以在它們上啟動(dòng)工作


解決方案

  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 -


跨主機(jī) pod 無(wú)法通信?

請(qǐng)參考k3s 網(wǎng)絡(luò)要求檢查主機(jī)網(wǎng)絡(luò)或防火墻,查看 vxlan 對(duì)應(yīng)的 UDP/8472 端口是否開放。

如何指定某個(gè)網(wǎng)卡添加 K3S 集群?

可以通過--advertise-address設(shè)置 apiserver 向集群成員發(fā)布的 IP 地址,詳細(xì)說明參考K3s Server 配置參考

Demo:

主機(jī) 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 無(wú)法查到 80 和 443 端口?

K3s 使用 traefik 作為默認(rèn)的 ingress controller。啟動(dòng)之后是通過 iptables 轉(zhuǎn)發(fā) 80/443 端口,所以用?netstat?無(wú)法查到對(duì)應(yīng)端口,可以通過?iptables?,?nmap?等命令去確認(rèn)端口是否開啟。更多說明請(qǐng)參考k3s 功能擴(kuò)展之 Helm、Traefik LB、ServiceLB 存儲(chǔ)及 RootFS

為什么當(dāng) k3s 節(jié)點(diǎn)故障后,Pod 需要大于 5 分鐘時(shí)間才能被重新調(diào)度?

這是因?yàn)橄铝心J(rèn) Kubernetes 設(shè)置共同產(chǎn)生的效果:

  • kubelet
    • ?node-status-update-frequency?:設(shè)置 kubelet 上報(bào)節(jié)點(diǎn)信息給 master 的頻率。(默認(rèn) 10s)
  • kube-controller-manager
    • ?node-monitor-period?:NodeController 中 NodeStatus 的同步周期(默認(rèn) 5s)
    • ?node-monitor-grace-period?:節(jié)點(diǎn)被認(rèn)定為不健康前,節(jié)點(diǎn)不作響應(yīng)的總的時(shí)間。(默認(rèn) 40s)
    • ?pod-eviction-timeout?:優(yōu)雅刪除故障節(jié)點(diǎn)上容器的周期。(默認(rèn) 5m0s)

在 Kubernetes v1.13 版本中,?TaintBasedEvictions?特性是默認(rèn)開啟的。

  • kube-apiserver (Kubernetes v1.13 版本及以后)
    • ?default-not-ready-toleration-seconds?: 表示 notReady:NoExecute 容忍的容忍時(shí)間。notReady:NoExecute 被默認(rèn)添加到?jīng)]有該容忍的所有 Pod。
    • ?default-unreachable-toleration-seconds?: 表示 unreachable:NoExecute 容忍的容忍時(shí)間。unreachable:NoExecute 被默認(rèn)添加到?jīng)]有該容忍的所有 Pod。

可以參考下面這個(gè)示例調(diào)整?tolerationSeconds?時(shí)間:

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

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

k3s crictl rmi --prune

K3s worker 節(jié)點(diǎn)的角色默認(rèn)為?none?,如何修改?

可以通過?kubectl label node ${node} node-role.kubernetes.io/worker=worker?為節(jié)點(diǎn)增加 worker 角色。


Helm: Error: Kubernetes cluster unreachable


解決方案參考集群訪問章節(jié)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)