Windows 컨테이너 문제 (Windows Containers Issues)
컨테이너화된 Windows 애플리케이션 모니터링에서 알려진 문제와 미해결 이슈에 대해 알려드릴게요. Windows 컨테이너 배포 시 제한되는 기능과 설정을 미리 파악하면 꽤 유용해요.
출처: 문서
본문
이 페이지는 컨테이너화된 Windows 애플리케이션 모니터링(Containerized Windows Applications Monitoring)의 알려진 문제와 미해결 이슈를 설명해요.
일반적인 문제 (Common issues)
컨테이너화된 Windows 애플리케이션 모니터링에는 Datadog Agent 7.19+가 필요해요.
지원되는 OS 버전은 다음과 같아요:
- Windows Server 2019 (LTSC / 1809)
- Windows Server 2019 1909 (Agent 7.39까지, 더 이상 Microsoft에서 지원하지 않음)
- Windows Server 2019 2004 또는 20H1 (Agent 7.39까지, 더 이상 Microsoft에서 지원하지 않음)
- Windows Server 2019 20H2 (Agent 7.33~7.39, 더 이상 Microsoft에서 지원하지 않음)
- Windows Server 2022 LTSC (Agent >=7.34)
Hyper-V 격리 모드는 지원되지 않아요.
디스크, IO, 네트워크에 대한 호스트 메트릭은 비활성화돼 있어요. Windows Server에서 지원하지 않으므로 Agent 체크도 기본적으로 비활성화돼요.
Docker 문제 (Docker issues)
라이브 프로세스가 컨테이너에 나타나지 않아요(Datadog Agent 제외).
Kubernetes 문제 (Kubernetes issues)
라이브 프로세스가 컨테이너에 나타나지 않아요(Datadog Agent 제외).
혼합 클러스터 (Linux + Windows)
혼합 클러스터에 Datadog Agent를 배포하는 권장 방법은 서로 다른 targetSystem으로 Helm 차트를 두 번 설치하는 거예요.
Datadog Agent는 nodeSelector를 사용해 targetSystem에 따라 Linux 또는 Windows 노드를 자동으로 선택해요.
하지만 기본으로 설치되는 Kube State Metrics는 그렇지 않아서, Kube State Metrics가 Windows 노드에 스케줄링되지 못하는 상황이 생길 수 있어요.
이 문제를 피하려면 세 가지 옵션이 있어요:
-
Windows 노드에 테인트(taint)를 적용해요. Windows에서 Agent는 항상
node.kubernetes.io/os=windows:NoSchedule테인트를 허용해요. -
Datadog Helm 차트
values.yaml로 Kube State Metrics 노드 셀렉터를 설정해요:kube-state-metrics: nodeSelector: beta.kubernetes.io/os: linux // Kubernetes < 1.14 kubernetes.io/os: linux // Kubernetes >= 1.14 -
datadog.kubeStateMetricsEnabled를false로 설정해 Kube State Metrics를 직접 별도로 배포해요.
참고: 두 개의 Datadog 설치(하나는 targetSystem: linux, 다른 하나는 targetSystem: windows)를 사용할 때, Kube State Metrics를 두 번 배포하지 않도록 두 번째 설치에는 datadog.kubeStateMetricsEnabled를 false로 설정해야 해요.
Windows 배포에서는 일부 메트릭을 사용할 수 없어요. 사용 가능한 메트릭을 참고하세요.
Datadog Cluster Agent를 사용한 혼합 클러스터
Cluster Agent v1.18+부터는 Datadog Cluster Agent가 혼합 클러스터 구성을 지원해요.
Windows 노드에 배포된 Agent와 Cluster Agent 간 통신을 구성하려면 다음 values.yaml 파일을 사용하세요.
targetSystem: windows
existingClusterAgent:
join: true
serviceName: "<EXISTING_DCA_SERVICE_NAME>" # from the first Datadog Helm chart
tokenSecretName: "<EXISTING_DCA_SECRET_NAME>" # from the first Datadog Helm chart
# Disable datadogMetrics deployment since it should have been already deployed with the first chart.
datadog-crds:
crds:
datadogMetrics: false
# Disable kube-state-metrics deployment
datadog:
kubeStateMetricsEnabled: false
Windows 배포의 제한된 구성 옵션
DatadogAgent리소스만으로 Windows 노드에 Agent를 배포하는 것은 지원되지 않아요.
Datadog Operator v1.30.0부터 혼합 노드(Windows 및 Linux) 클러스터에서 Windows 노드 지원이 가능해요. 사용하려면 DatadogAgent 리소스와 함께 Windows를 대상으로 하는 DatadogAgentProfile을 추가하세요. DatadogAgentProfile을 사용하지 않는다면 Helm 차트를 사용해 Windows 노드에 Agent를 배포하세요.
Windows에서는 일부 구성 옵션을 사용할 수 없어요. 다음은 지원되지 않는 옵션 목록이에요:
| 파라미터 | 이유 |
|---|---|
datadog.dogstatsd.useHostPID |
Windows 컨테이너에서 Host PID 미지원 |
datadog.dogstatsd.useSocketVolume |
Windows에서 Unix 소켓 미지원 |
datadog.dogstatsd.socketPath |
Windows에서 Unix 소켓 미지원 |
datadog.processAgent.processCollection |
호스트/다른 컨테이너 프로세스 접근 불가 |
datadog.systemProbe.seccomp |
Windows에서 System probe 미지원 |
datadog.systemProbe.seccompRoot |
Windows에서 System probe 미지원 |
datadog.systemProbe.debugPort |
Windows에서 System probe 미지원 |
datadog.systemProbe.enableConntrack |
Windows에서 System probe 미지원 |
datadog.systemProbe.bpfDebug |
Windows에서 System probe 미지원 |
datadog.systemProbe.apparmor |
Windows에서 System probe 미지원 |
agents.useHostNetwork |
Windows 컨테이너에서 호스트 네트워크 미지원 |
APM 또는 DogStatsD용 HostPort
HostPort는 Kubernetes에서 기본 OS 버전과 CNI 플러그인에 따라 부분적으로 지원돼요. HostPort가 작동하기 위한 요구 사항은 다음과 같아요:
- Windows Server 버전이 1909 이상
- CNI 플러그인이
portMappings기능을 지원
현재 최소 두 개의 CNI 플러그인이 이 기능을 지원해요:
- 공식
win-bridge플러그인(버전 >= 0.8.6) - GKE에서 사용 - Azure CNI 플러그인 - AKS에서 사용
설정이 이 요구 사항을 충족하지 않으면 APM과 DogStatsD는 Tracer와 Agent 사이에 pod-to-pod 네트워킹이 구성된 경우에만 동작해요.
Kubelet 체크
Kubernetes 버전에 따라 일부 Kubelet 메트릭을 사용할 수 없거나(Kubelet 체크가 타임아웃될 수도 있어요), 최적의 환경을 위해 Datadog Agent v7.19.2+와 함께 다음 중 하나를 사용하세요:
- Kubelet v1.16.13+ (GKE에서는 v1.16.11+)
- Kubelet v1.17.9+ (GKE에서는 v1.17.6+)
- Kubelet v1.18.6+
- Kubelet v1.19+
Windows 배포의 제한된 메트릭
Windows 컨테이너에는 다음 kubernetes.* 메트릭을 사용할 수 있어요:
kubernetes.cpu.usage.totalkubernetes.containers.restartskubernetes.containers.runningkubernetes.cpu.capacitykubernetes.ephemeral_storage.usagekubernetes.kubelet.container.log_filesystem.used_byteskubernetes.kubelet.network_plugin.latency.countkubernetes.kubelet.network_plugin.latency.quantilekubernetes.kubelet.network_plugin.latency.sumkubernetes.kubelet.runtime.errorskubernetes.kubelet.runtime.operationskubernetes.memory.capacitykubernetes.pods.runningkubernetes.rest.client.latency.countkubernetes.rest.client.latency.sumkubernetes.rest.client.requestskubernetes.network.tx_byteskubernetes.network.rx_byteskubernetes.cpu.usage.totalkubernetes.memory.working_setkubernetes.filesystem.usagekubernetes.filesystem.usage_pct