Windows 除錯技巧

節點級故障排除

  1. 我的 Pod 處於“ContainerCreating”狀態或反覆重啟

    請確保您的 pause 映象與您的 Windows 作業系統版本相容。請參閱 Pause 容器 以檢視最新/推薦的 pause 映象以及/或獲取更多資訊。

  2. 我的 Pod 顯示狀態為 ErrImgPullImagePullBackOff

    請確保您的 Pod 已排程到一個 相容 的 Windows 節點。

    有關如何為 Pod 指定相容節點的更多資訊,請參閱 本指南

網路故障排除

  1. 我的 Windows Pod 沒有網路連線

    如果您正在使用虛擬機器,請確保所有 VM 網路介面卡都已 **啟用** MAC 欺騙。

  2. 我的 Windows Pod 無法 ping 通外部資源

    Windows Pod 沒有為 ICMP 協議程式設計出站規則。但是,TCP/UDP 是支援的。在嘗試演示到叢集外部資源的連通性時,請將 ping <IP> 命令替換為相應的 curl <IP> 命令。

    如果問題仍然存在,那麼您在 cni.conf 中的網路配置很可能需要特別注意。您可以隨時編輯此靜態檔案。配置更新將應用於任何新的 Kubernetes 資源。

    Kubernetes 的一項網路要求(請參閱 Kubernetes 模型)是叢集內部通訊不應經過 NAT。為了滿足此要求,對於所有您不希望發生出站 NAT 的通訊,有一個 ExceptionList。但是,這也意味著您需要將您嘗試查詢的外部 IP 從 ExceptionList 中排除。只有這樣,才能正確地對源自您的 Windows Pod 的流量進行 SNAT,以便從外部世界接收響應。在這方面,您在 cni.conf 中的 ExceptionList 應該如下所示:

    "ExceptionList": [
                    "10.244.0.0/16",  # Cluster subnet
                    "10.96.0.0/12",   # Service subnet
                    "10.127.130.0/24" # Management (host) subnet
                ]
    
  3. 我的 Windows 節點無法訪問 NodePort 型別服務

    從節點本身本地訪問 NodePort 會失敗。這是一個已知的限制。NodePort 可以從其他節點或外部客戶端訪問。

  4. 容器的 vNICs 和 HNS 端點被刪除

    此問題可能是由於未將 hostname-override 引數傳遞給 kube-proxy 引起的。要解決此問題,使用者需要按如下方式將主機名傳遞給 kube-proxy:

    C:\k\kube-proxy.exe --hostname-override=$(hostname)
    
  5. 我的 Windows 節點無法透過服務 IP 訪問我的服務

    這是 Windows 上網路堆疊的一個已知限制。但是,Windows Pod 可以訪問 Service IP。

  6. 啟動 kubelet 時找不到網路介面卡

    Windows 網路堆疊需要一個虛擬介面卡才能使 Kubernetes 網路正常工作。如果在管理員 shell 中,以下命令均未返回任何結果,則表示虛擬網路建立(kubelet 工作所必需的先決條件)失敗了。

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

    在某些情況下,修改 start.ps1 指令碼中的 InterfaceName 引數是值得的,因為主機的網路介面卡不是“Ethernet”。否則,請檢視 start-kubelet.ps1 指令碼的輸出,以瞭解在建立虛擬網路期間是否有錯誤。

  7. DNS 解析無法正常工作

    請在此 部分 檢查 Windows 的 DNS 限制。

  8. kubectl port-forward 失敗並出現“unable to do port forwarding: wincat not found”

    Kubernetes 1.15 中透過將 wincat.exe 包含在 pause 基礎設施容器 mcr.microsoft.com/oss/kubernetes/pause:3.6 中實現了此功能。請確保使用受支援的 Kubernetes 版本。如果您想構建自己的 pause 基礎設施容器,請確保包含 wincat

  9. 我的 Kubernetes 安裝失敗,因為我的 Windows Server 節點位於代理後面

    如果您位於代理後面,則必須定義以下 PowerShell 環境變數:

    [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 時,我的節點在重新加入集群后出現問題

    每當一個已刪除的節點重新加入叢集時,flannelD 會嘗試為該節點分配一個新的 pod 子網。使用者應刪除以下路徑中的舊 pod 子網配置檔案:

    Remove-Item C:\k\SourceVip.json
    Remove-Item C:\k\SourceVipRequest.json
    
  2. Flanneld 卡在“Waiting for the Network to be created”

    關於此 問題 有大量報告;最可能的原因是 flannel 網路管理 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
    
  3. 由於缺少 /run/flannel/subnet.env,我的 Windows Pod 無法啟動

    這表明 Flannel 未正確啟動。您可以嘗試重啟 flanneld.exe,或者您可以從 Kubernetes 主節點上的 /run/flannel/subnet.env 手動複製檔案到 Windows 工作節點上的 C:\run\flannel\subnet.env,並修改 FLANNEL_SUBNET 行以使用不同的數字。例如,如果需要節點子網 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
    

進一步調查

如果這些步驟未能解決您的問題,您可以透過以下方式在 Kubernetes 中執行 Windows 容器獲得幫助:

最後修改時間:2023 年 12 月 24 日晚上 9:00 PST:修復錯別字 (d536e46dbd)