7.10. Windows コンテナーのワークロード関連の問題のトラブルシューティング

7.10.1. Windows Machine Config Operator がインストールされない

Windows Machine Config Operator (WMCO) のインストールプロセスを完了しているが、Operator が InstallWaiting フェーズのままである場合、問題はネットワークに関係する問題によって引き起こされている可能性があります。

WMCO では、OVN-Kubernetes を使用して OpenShift Container Platform クラスターをハイブリッドネットワークで設定する必要があります。WMCO はハイブリッドネットワークが利用可能でない状態でインストールプロセスを完了できません。これは、複数のオペレーティングシステム (OS) および OS バリアント上でノードを管理するために必要です。これは、クラスターのインストール時に完了する必要があります。

詳細は、ハイブリッドネットワークの設定 を参照してください。

7.10.2. Windows マシンがコンピュートノードにならない理由の調査

Windows マシンがコンピュートノードにならない理由には、各種の理由があります。この問題を調査する最適な方法として、Windows Machine Config Operator (WMCO) ログを収集することができます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。

手順

  • 以下のコマンドを実行して WMCO ログを収集します。

    $ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator

7.10.3. Windows ノードへのアクセス

Windows ノードは oc debug node コマンドを使用してアクセスできません。このコマンドでは、ノードで特権付き Pod を実行する必要があります。これは Windows ではまだサポートされていません。代わりとして Windows ノードは、セキュアシェル (SSH) または Remote Desktop Protocol (RDP) を使用してアクセスできます。どちらの方法にも SSH bastion が必要です。

7.10.3.1. SSH を使用した Windows ノードへのアクセス

セキュアシェル (SSH) を使用して Windows ノードにアクセスできます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。
  • cloud-private-key シークレットで使用されるキーおよび ssh-agent に対してクラスターを作成する際に使用されるキーを追加している。セキュリティー上の理由から、キーは使用後は ssh-agent から削除するようにしてください。
  • ssh-bastion Pod を使用して Windows ノードに接続している。

手順

  • 以下のコマンドを実行して Windows ノードにアクセスします。

    $ ssh -t -o StrictHostKeyChecking=no -o ProxyCommand='ssh -A -o StrictHostKeyChecking=no \
        -o ServerAliveInterval=30 -W %h:%p core@$(oc get service --all-namespaces -l run=ssh-bastion \
        -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")' <username>@<windows_node_internal_ip> 1 2
    1
    Amazon Web Services (AWS) の Administrator、または Microsoft Azure の capi などのクラウドプロバイダーのユーザー名を指定します。
    2
    以下のコマンドを実行して検出可能な、ノードの内部 IP アドレスを指定します。
    $ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}

7.10.3.2. RDP を使用した Windows ノードへのアクセス

Remote Desktop Protocol (RDP) を使用して Windows ノードにアクセスできます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。
  • cloud-private-key シークレットで使用されるキーおよび ssh-agent に対してクラスターを作成する際に使用されるキーを追加している。セキュリティー上の理由から、キーは使用後は ssh-agent から削除するようにしてください。
  • ssh-bastion Pod を使用して Windows ノードに接続している。

手順

  1. 以下のコマンドを実行して SSH トンネルを設定します。

    $ ssh -L 2020:<windows_node_internal_ip>:3389 \ 1
        core@$(oc get service --all-namespaces -l run=ssh-bastion -o go-template="{{ with (index (index .items 0).status.loadBalancer.ingress 0) }}{{ or .hostname .ip }}{{end}}")
    1
    以下のコマンドを実行して検出可能な、ノードの内部 IP アドレスを指定します。
    $ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
  2. 生成されるシェル内で Windows ノードに対して SSH を実行し、以下のコマンドを実行してユーザーのパスワードを作成します。

    C:\> net user <username> * 1
    1
    AWS の Administrator、または Azure の capi などのクラウドプロバイダーのユーザー名を指定します。

RDP クライアントを使用して、localhost:2020 で Windows ノードにリモートでアクセスできるようになりました。

7.10.4. Windows コンテナーの Kubernetes ノードログの収集

Windows コンテナーロギングは Linux コンテナーロギングとは異なる仕方で機能します。Windows ワークロードの Kubernetes ノードログは、デフォルトで C:\var\logs ディレクトリーにストリーミングされます。したがって、そのディレクトリーから Windows ノードのログを収集する必要があります。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。

手順

  1. C:\var\logs のすべてのディレクトリー下でログを表示するには、以下のコマンドを実行します。

    $ oc adm node-logs -l kubernetes.io/os=windows --path= \
        /ip-10-0-138-252.us-east-2.compute.internal containers \
        /ip-10-0-138-252.us-east-2.compute.internal hybrid-overlay \
        /ip-10-0-138-252.us-east-2.compute.internal kube-proxy \
        /ip-10-0-138-252.us-east-2.compute.internal kubelet \
        /ip-10-0-138-252.us-east-2.compute.internal pods
  2. 同じコマンドを使用してディレクトリー内のファイルをリスト表示し、個別のログファイルを表示できるようになりました。たとえば、kubelet ログを表示するには、以下のコマンドを実行します。

    $ oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log

7.10.5. Windows アプリケーションイベントログの収集

kubelet logs エンドポイントの Get-WinEvent shim は、Windows マシンからアプリケーションイベントログを収集するために使用できます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。

手順

  • Windows マシンのイベントログですべてのアプリケーションロギングのログを表示するには、以下を実行します。

    $ oc adm node-logs -l kubernetes.io/os=windows --path=journal

    同じコマンドが oc adm must-gather でログを収集する際に実行されます。

    イベントログの他の Windows アプリケーションログは、それぞれのサービスを -u フラグで指定して収集することもできます。たとえば、以下のコマンドを実行して docker ランタイムサービスのログを収集できます。

    $ oc adm node-logs -l kubernetes.io/os=windows --path=journal -u docker

7.10.6. Windows コンテナー用の Docker ログの収集

Windows Docker サービスはログを標準出力 (stdout) にストリーミングせず、Windows のイベントログにログを記録します。Docker イベントログを表示して、Windows Docker サービスが原因と予想される問題を調査できます。

前提条件

  • Operator Lifecycle Manager (OLM) を使用して Windows Machine Config Operator (WMCO) をインストールしている。
  • Windows マシンセットを作成している。

手順

  1. Windows ノードに SSH を実行し、PowerShell と入力します。

    C:\> powershell
  2. 以下のコマンドを実行して Docker ログを表示します。

    C:\> Get-EventLog -LogName Application -Source Docker

7.10.7. 関連情報