7.10. Windows 컨테이너 워크로드 문제 해결
7.10.1. Windows Machine Config Operator가 설치되지 않음
WMCO(Windows Machine Config Operator) 설치 프로세스를 완료했지만 Operator가 InstallWaiting
단계에서 멈춘 경우 네트워킹 문제로 인해 문제가 발생한 것일 수 있습니다.
WMCO를 사용하려면 OVN-Kubernetes를 사용하는 하이브리드 네트워킹으로 OpenShift Container Platform 클러스터를 구성해야 합니다. WMCO는 사용 가능한 하이브리드 네트워킹이 없으면 설치 프로세스를 완료할 수 없습니다. 이는 다중 운영 체제(OS) 및 OS 변형에서 노드를 관리하는 데 필요합니다. 클러스터를 설치하는 동안 완료해야 합니다.
자세한 내용은 하이브리드 네트워킹 구성을 참조하십시오.
7.10.2. Windows 머신이 컴퓨팅 노드가 되지 않는 이유 조사
Windows 머신이 컴퓨팅 노드가 되지 않는 데에는 다양한 이유가 있습니다. 이 문제를 조사하는 가장 좋은 방법은 WMCO(Windows Machine Config Operator) 로그를 수집하는 것입니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- Windows 머신 세트를 생성했습니다.
절차
다음 명령을 실행하여 WMCO 로그를 수집합니다.
$ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator
7.10.3. Windows 노드에 액세스
oc debug node
명령을 사용하여 Windows 노드에 액세스할 수 없습니다. 이 명령을 사용하려면 노드에서 권한 있는 Pod를 실행해야 하는데, 이 기능은 아직 Windows에서 지원되지 않습니다. 대신 SSH(Secure Shell) 또는 RDP(Remote Desktop Protocol)를 사용하여 Windows 노드에 액세스할 수 있습니다. 두 방법 모두 SSH bastion이 필요합니다.
7.10.3.1. SSH를 사용하여 Windows 노드에 액세스
SSH(Secure Shell)를 사용하여 Windows 노드에 액세스할 수 있습니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- 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 노드에 액세스
RDP(Remote Desktop Protocol)를 사용하여 Windows 노드에 액세스할 수 있습니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- 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 주소를 지정합니다. 이 IP 주소는 다음 명령을 실행하여 검색할 수 있습니다.
$ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
결과 쉘 내에서 SSH를 통해 Windows 노드에 연결하고 다음 명령을 실행하여 사용자 암호를 만듭니다.
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 노드 로그를 수집해야 합니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- 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 머신에서 애플리케이션 이벤트 로그를 수집할 수 있습니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- Windows 머신 세트를 생성했습니다.
프로세스
Windows 머신의 이벤트 로그에 로깅하는 모든 애플리케이션의 로그를 보려면 다음을 실행합니다.
$ oc adm node-logs -l kubernetes.io/os=windows --path=journal
oc adm must-gather
로 로그를 수집할 때와 같은 명령이 실행됩니다.-u
플래그를 사용하여 각 서비스를 지정하면 이벤트 로그의 다른 Windows 애플리케이션 로그도 수집할 수 있습니다. 예를 들어 다음 명령을 실행하면 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 서비스로 발생할 수 있는 문제를 조사할 수 있습니다.
사전 요구 사항
- OLM(Operator Lifecycle Manager)을 사용하여 WMCO(Windows Machine Config Operator)를 설치했습니다.
- Windows 머신 세트를 생성했습니다.
프로세스
Windows 노드에 SSH로 연결하고 PowerShell로 이동합니다.
C:\> powershell
다음 명령을 실행하여 Docker 로그를 확인합니다.
C:\> Get-EventLog -LogName Application -Source Docker