반응형
이 글은 Kubernetes 공식 문서인
- windows/intro
- windows/user-guide
를 기준으로 Windows 지원을 기능 단위로 비교하고,
Windows 파드가 실제로 어떻게 스케줄링되는지를 기술적으로 정리한다.
1. Kubernetes Windows 지원 기능 비교
클러스터 구성 요소
| 구성 요소 | Linux | Windows |
| Control Plane | ✅ 지원 | ❌ 미지원 |
| Worker Node | ✅ 지원 | ✅ 지원 |
| 혼합 클러스터 | – | ✅ 가능 |
- Windows는 Worker Node 전용
- Control Plane 컴포넌트(kube-apiserver, etcd 등)는 Linux 필수
컨테이너 런타임
| 항목 | Linux | Windows |
| containerd | ✅ | ✅ |
| Docker | ❌ (deprecated) | ❌ |
| 격리 방식 | cgroups + namespaces | Process isolation |
| Hyper-V container | – | ❌ |
파드 기능 지원 여부
| 기능 | Linux | Windows |
| privileged container | ✅ | ❌ |
| hostNetwork | ✅ | ❌ |
| hostPID / hostIPC | ✅ | ❌ |
| initContainer | ✅ | ⚠️ 제한 |
| DaemonSet | ✅ | ⚠️ 제한 |
| CSI Volume | ✅ | ⚠️ 일부 |
| ConfigMap / Secret | ✅ | ✅ |
2. Windows 파드 스케줄링 구조
기본 전제
- Kubernetes 스케줄러는 OS를 자동 판별하지 않는다
- Windows 컨테이너 이미지를 Linux 노드에 스케줄링할 수 있음
- 결과: 즉시 파드 실패
👉 명시적 스케줄링 설정이 필수
3. OS 기반 스케줄링 방식
1️⃣ Node Label (기본)
모든 노드는 기본적으로 OS 라벨을 가진다.
kubernetes.io/os=linux kubernetes.io/os=windows
2️⃣ nodeSelector (필수)
Windows 파드를 Windows 노드에만 스케줄링
apiVersion: v1 kind: Pod spec: nodeSelector: kubernetes.io/os: windows
- 가장 단순
- 실무에서 필수 수준
3️⃣ Taints & Tolerations (권장)
Windows 노드에 taint 적용
kubectl taint nodes win-node os=windows:NoSchedule
Windows 파드에 toleration 추가
tolerations: - key: "os" operator: "Equal" value: "windows" effect: "NoSchedule"
| 효과 |
| Linux 파드의 Windows 노드 오배치 방지 |
| Windows 전용 워크로드 격리 |
4. Windows 버전 기반 스케줄링
문제
- Windows 컨테이너는 커널 빌드 번호 종속
- 노드 OS 빌드 ≠ 컨테이너 이미지 빌드 → 실행 실패
해결: Node Label + Selector
노드에 버전 라벨
kubectl label node win-node windows-build=10.0.17763
파드에서 명시
nodeSelector: kubernetes.io/os: windows windows-build: "10.0.17763"
5. RuntimeClass (보조적)
runtimeClassName: windows
- 런타임 구분용
- 스케줄링 결정에는 영향 없음
- nodeSelector 대체 불가
6. 스케줄링 흐름 요약
Pod 생성 ├─ nodeSelector 확인 │ ├─ OS=windows ? │ └─ build version 일치 ? ├─ toleration 존재 여부 └─ 조건 충족 노드에만 바인딩
7. 실무 권장 스케줄링 패턴
| 항목목 | 권장 |
| nodeSelector | ✅ 필수 |
| taints/tolerations | ✅ 강력 권장 |
| OS 버전 라벨링 | ✅ 필수 |
| RuntimeClass | ⚠️ 보조 |
| 자동 스케줄링 의존 | ❌ 금지 |
8. 정리
- Kubernetes의 Windows 지원은 기능적으로 제한적
- 스케줄러는 Windows를 자동 인식하지 않음
- 모든 Windows 파드는 명시적 스케줄링 설정 필요
- OS + 버전 단위 스케줄링이 안정성의 핵심
반응형
'K8S' 카테고리의 다른 글
| Kubernetes AWS ALB/NLB 구성 yaml (0) | 2026.01.26 |
|---|---|
| Kubernetes hostNetwork & externalTrafficPolicy - AWS ALB, NLB 에서 사용하는가? (0) | 2026.01.26 |
| 쿠버네티스 캐스케이딩 삭제(Cascading Deletion) (0) | 2026.01.22 |
| Kubernetes는 가상화 도구인가? (0) | 2026.01.22 |
| Kubernetes에서 Stateful 앱에 Blue-Green 배포를 적용할 수 있을까? (0) | 2026.01.19 |
댓글