Kubernetes Windows調(diào)試提示

2022-05-30 16:13 更新

節(jié)點級故障排除

  1. 我的 Pod 卡在“Container Creating”或一遍又一遍地重新啟動
  2. 確保您的pause image與您的 Windows 操作系統(tǒng)版本兼容。

    Note: 如果使用 containerd 作為容器運行時,則暫停圖像在 config.toml 配置文件的 ?plugins.plugins.cri.sandbox_image? 字段中指定。

  3. 我的 pod 顯示狀態(tài)為ErrImgPull或ImagePullBackOff
  4. 確保您的 Pod 被安排到兼容的Windows 節(jié)點。

網(wǎng)絡(luò)故障排除

  1. 我的 Windows Pod 沒有網(wǎng)絡(luò)連接
  2. 如果您使用的是虛擬機,請確保在所有 VM 網(wǎng)絡(luò)適配器上啟用MAC spoofing。

  3. 我的 Windows Pod 無法 ping 外部資源
  4. Windows Pod 沒有為 ICMP 協(xié)議編程的出站規(guī)則。但是,支持 TCP/UDP。在嘗試演示與集群外部資源的連接時,請?使用相應(yīng)的?curl <IP>?命令替換ping <IP>?。

    如果您仍然遇到問題,很可能您在 cni.conf中的網(wǎng)絡(luò)配置 值得特別注意。您可以隨時編輯此靜態(tài)文件。配置更新將適用于任何新的 Kubernetes 資源。

    Kubernetes 網(wǎng)絡(luò)要求之一(請參閱Kubernetes 模型)是在內(nèi)部沒有 NAT 的情況下進行集群通信。為了滿足這一要求, 對于您不希望發(fā)生出站 NAT 的所有通信,都有一個ExceptionList 。但是,這也意味著您需要從?ExceptionList?. 只有這樣,來自您的 Windows pod 的流量才會被正確 SNAT 以接收來自外部世界的響應(yīng)。在這方面,您在 ?cni.conf? 中的 ?ExceptionList ?應(yīng)如下所示:

    "ExceptionList": [
                    "10.244.0.0/16",  # Cluster subnet
                    "10.96.0.0/12",   # Service subnet
                    "10.127.130.0/24" # Management (host) subnet
                ]
  5. 我的 Windows 節(jié)點無法訪問 ?NodePort ?類型的服務(wù)
  6. 從節(jié)點本身訪問本地 NodePort 失敗。 這是一個已知的限制。 NodePort 訪問可從其他節(jié)點或外部客戶端進行。

  7. 正在刪除容器的 vNIC 和 HNS 端點
  8. 當沒有將 ?hostname-override? 參數(shù)傳遞給 kube-proxy 時,可能會導(dǎo)致此問題。 要解決它,用戶需要將主機名傳遞給 kube-proxy,如下所示:

    C:\k\kube-proxy.exe --hostname-override=$(hostname)
    
  9. 我的 Windows 節(jié)點無法使用服務(wù) IP 訪問我的服務(wù)
  10. 這是 Windows 上網(wǎng)絡(luò)堆棧的已知限制。 但是,Windows Pod 可以訪問服務(wù) IP。

  11. 啟動kubelet時找不到網(wǎng)卡
  12. Windows 網(wǎng)絡(luò)堆棧需要一個虛擬適配器才能使 Kubernetes 網(wǎng)絡(luò)工作。 如果以下命令未返回任何結(jié)果(在管理 shell 中),則虛擬網(wǎng)絡(luò)創(chuàng)建(kubelet 工作的必要先決條件)失?。?/p>

    Get-HnsNetwork | ? Name -ieq "cbr0"
    Get-NetAdapter | ? Name -Like "vEthernet (Ethernet*"

    在主機的網(wǎng)絡(luò)適配器不是“以太網(wǎng)”的情況下,通常值得修改 ?start.ps1? 腳本的 InterfaceName 參數(shù)。 否則,請查閱 ?start-kubelet.ps1? 腳本的輸出以查看虛擬網(wǎng)絡(luò)創(chuàng)建過程中是否有錯誤。

  13. DNS 解析無法正常工作
  14. 在本節(jié)中檢查 Windows 的 DNS 限制。

  15. ?kubectl port-forward?失敗并顯示“無法進行端口轉(zhuǎn)發(fā):未找到 wincat”
  16. 這是在 Kubernetes 1.15 中通過將 ?wincat.exe? 包含在暫?;A(chǔ)架構(gòu)容器 ?mcr.microsoft.com/oss/kubernetes/pause:3.6? 中實現(xiàn)的。 請務(wù)必使用受支持的 Kubernetes 版本。 如果您想構(gòu)建自己的暫停基礎(chǔ)架構(gòu)容器,請確保包含 wincat。

  17. 我的 Kubernetes 安裝失敗,因為我的 Windows Server 節(jié)點位于代理后面
  18. 如果您在代理后面,則必須定義以下 PowerShell 環(huán)境變量:

    [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine)
    [Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.example.com:443/", [EnvironmentVariableTarget]::Machine)

Flannel 故障排除

  1. 使用 Flannel,我的節(jié)點在重新加入集群后出現(xiàn)問題
  2. 每當以前刪除的節(jié)點重新加入集群時,flannelD 都會嘗試為該節(jié)點分配一個新的 pod 子網(wǎng)。 用戶應(yīng)刪除以下路徑中的舊 pod 子網(wǎng)配置文件:

    Remove-Item C:\k\SourceVip.json
    Remove-Item C:\k\SourceVipRequest.json
  3. Flanneld 卡在“Waiting for the Network to be created”中
  4. 有很多關(guān)于這個問題的報告; 很可能是設(shè)置 flannel 網(wǎng)絡(luò)的管理 IP 的時間問題。 一種解決方法是重新啟動 ?start.ps1? 或手動重新啟動它,如下所示:

    [Environment]::SetEnvironmentVariable("NODE_NAME", "<Windows_Worker_Hostname>")
    C:\flannel\flanneld.exe --kubeconfig-file=c:\k\config --iface=<Windows_Worker_Node_IP> --ip-masq=1 --kube-subnet-mgr=1
  5. 由于缺少 ?/run/flannel/subnet.env?,我的 Windows Pod 無法啟動
  6. 這表明 Flannel 沒有正確啟動。 您可以嘗試重新啟動 ?flanneld.exe?,也可以手動將文件從 Kubernetes 主節(jié)點上的 ?/run/flannel/subnet.env? 復(fù)制到 Windows 工作節(jié)點上的 ?C:\run\flannel\subnet.env? 并修改 ?FLANNEL_SUBNET? 行到不同的數(shù)字。 例如,如果需要節(jié)點子網(wǎng) 10.244.4.1/24:

    FLANNEL_NETWORK=10.244.0.0/16
    FLANNEL_SUBNET=10.244.4.1/24
    FLANNEL_MTU=1500
    FLANNEL_IPMASQ=true

進一步的調(diào)查

如果這些步驟不能解決您的問題,您可以通過以下方式獲得在 Kubernetes 的 Windows 節(jié)點上運行 Windows 容器的幫助:


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號