Windows 偵錯提示

節點層級疑難排解

  1. 我的 Pod 卡在「容器建立中」或不斷重新啟動

    請確保您的暫停映像檔與您的 Windows OS 版本相容。請參閱暫停容器以查看最新的/建議的暫停映像檔和/或取得更多資訊。

  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 的情況下進行。為了符合此需求,有一個 ExceptionList,用於所有您不希望進行對外 NAT 的通訊。然而,這也表示您需要從 ExceptionList 中排除您嘗試查詢的外部 IP。唯有如此,來自您 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. 容器的 vNIC 和 HNS 端點正在被刪除

    hostname-override 參數未傳遞給 kube-proxy 時,可能會導致此問題。為了解決這個問題,使用者需要將主機名稱傳遞給 kube-proxy,如下所示

    C:\k\kube-proxy.exe --hostname-override=$(hostname)
    
  5. 我的 Windows 節點無法使用服務 IP 存取我的服務

    這是 Windows 上網路堆疊的一個已知限制。然而,Windows Pod 可以存取服務 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 中實作,方法是在暫停基礎架構容器 mcr.microsoft.com/oss/kubernetes/pause:3.6 中包含 wincat.exe。請務必使用支援的 Kubernetes 版本。如果您想要建立自己的暫停基礎架構容器,請務必包含 wincat

  9. 我的 Kubernetes 安裝失敗,因為我的 Windows Server 節點位於 Proxy 後方

    如果您位於 Proxy 後方,則必須定義以下 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. 我的 Windows Pod 無法啟動,因為缺少 /run/flannel/subnet.env

    這表示 Flannel 未正確啟動。您可以嘗試重新啟動 flanneld.exe,或者您可以從 Kubernetes master 上的 /run/flannel/subnet.env 手動複製檔案到 Windows worker 節點上的 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 節點上執行 Windows 容器的協助

上次修改時間為 2023 年 12 月 24 日下午 9:00 PST:修正錯字 (d536e46dbd)