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 バリアント上でノードを管理するために必要です。これは、クラスターのインストール時に完了する必要があります。
詳細は、Configuring hybrid networking を参照してください。
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
$ 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 ノードに接続している。
手順
以下のコマンドを実行して 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}
生成されるシェル内で 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 マシンセットを作成している。
手順
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
同じコマンドを使用してディレクトリー内のファイルを一覧表示し、個別のログファイルを表示できるようになりました。たとえば、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 マシンセットを作成している。
手順
Windows ノードに SSH を実行し、PowerShell と入力します。
C:\> powershell
以下のコマンドを実行して Docker ログを表示します。
C:\> Get-EventLog -LogName Application -Source Docker