K3s 常見問題

2022-08-24 11:00 更新

K3s 是否適合替代 k8s?

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

如何用自己的 Ingress 代替 Traefik?

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

K3s 是否支持 Windows?

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

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

請參考 K3s BUILDING.md的說明。

K3s 的日志在哪里?

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

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

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

常見安裝問題

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

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


解決方案:

  1. 使用國內(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

注冊 k3s 節(jié)點失敗

報錯:

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ù)日志提示大概的原因是兩個 k3s 節(jié)點主機名重復(fù),或者?/etc/rancher/node/password? 與 k3s server 的 node-passwd 不匹配造成。

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

解決方案:

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

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

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

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


解決方案

  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 網(wǎng)絡(luò)要求檢查主機網(wǎng)絡(luò)或防火墻,查看 vxlan 對應(yīng)的 UDP/8472 端口是否開放。

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

可以通過--advertise-address設(shè)置 apiserver 向集群成員發(fā)布的 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 轉(zhuǎn)發(fā) 80/443 端口,所以用?netstat?無法查到對應(yīng)端口,可以通過?iptables?,?nmap?等命令去確認端口是否開啟。更多說明請參考k3s 功能擴展之 Helm、Traefik LB、ServiceLB 存儲及 RootFS

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

這是因為下列默認 Kubernetes 設(shè)置共同產(chǎn)生的效果:

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

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

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

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

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

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

k3s crictl rmi --prune

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

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


Helm: Error: Kubernetes cluster unreachable


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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號