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
$ oc logs -f deployment/windows-machine-config-operator -n openshift-windows-machine-config-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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>
$ 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 Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
$ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 \ 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}}")
$ 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}}")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 노드의 내부 IP 주소를 지정합니다. 이 IP 주소는 다음 명령을 실행하여 검색할 수 있습니다.
oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
$ oc get nodes <node_name> -o jsonpath={.status.addresses[?\(@.type==\"InternalIP\"\)].address}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 결과 쉘 내에서 SSH를 통해 Windows 노드에 연결하고 다음 명령을 실행하여 사용자 암호를 만듭니다.
net user <username> *
C:\> net user <username> *
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
의 모든 디렉터리에 있는 로그를 보려면 다음 명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 명령을 사용하여 디렉터리의 파일을 나열하고 개별 로그 파일을 볼 수 있습니다. 예를 들어 kubelet 로그를 보려면 다음 명령을 실행합니다.
oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log
$ oc adm node-logs -l kubernetes.io/os=windows --path=/kubelet/kubelet.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 node-logs -l kubernetes.io/os=windows --path=journal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm must-gather
로 로그를 수집할 때와 같은 명령이 실행됩니다.-u
플래그를 사용하여 각 서비스를 지정하면 이벤트 로그의 다른 Windows 애플리케이션 로그도 수집할 수 있습니다. 예를 들어 다음 명령을 실행하면 Docker 런타임 서비스에 대한 로그를 수집할 수 있습니다.oc adm node-logs -l kubernetes.io/os=windows --path=journal -u docker
$ oc adm node-logs -l kubernetes.io/os=windows --path=journal -u docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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로 이동합니다.
powershell
C:\> powershell
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 Docker 로그를 확인합니다.
Get-EventLog -LogName Application -Source Docker
C:\> Get-EventLog -LogName Application -Source Docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow