기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
이기종 워크로드 실행
Kubernetes는 동일한 클러스터에 Linux 노드와 Windows 노드를 혼합할 수 있는 이기종 클러스터를 지원합니다. 해당 클러스터 내에서 Linux에서 실행되는 포드와 Windows에서 실행되는 포드가 혼합되어 있을 수 있습니다. 동일한 클러스터에서 여러 버전의 Windows를 실행할 수도 있습니다. 그러나이 결정을 내릴 때 고려해야 할 몇 가지 요인(아래 참조)이 있습니다.
노드PODs 할당 모범 사례
Linux 및 Windows 워크로드를 각각의 OS별 노드에 유지하려면 노드 선택기와 테인트/내결함의 조합을 사용해야 합니다. 이기종 환경에서 워크로드를 예약하는 주요 목표는 기존 Linux 워크로드와의 호환성 저하를 방지하는 것입니다.
OS별 워크로드가 적절한 컨테이너 호스트에 도달하도록 보장
사용자는 nodeSelectors. 오늘날 모든 Kubernetes 노드에는 다음과 같은 기본 레이블이 있습니다.
kubernetes.io/os = [windows|linux] kubernetes.io/arch = [amd64|arm64|...]
포드 사양에와 같은 nodeSelector가 포함되지 않은 경우 모든 호스트"kubernetes.io/os": windows
, Windows 또는 Linux에서 포드를 예약할 수 있습니다. Windows 컨테이너는 Windows에서만 실행할 수 있고 Linux 컨테이너는 Linux에서만 실행할 수 있으므로 이는 문제가 될 수 있습니다.
엔터프라이즈 환경에서는 Linux 컨테이너에 대한 많은 수의 기존 배포와 Helm 차트와 같은 off-the-shelf품 구성의 에코시스템을 사용하는 것이 드문 일이 아닙니다. 이러한 상황에서는 배포의 nodeSelectors. 대안은 테인트를 사용하는 것입니다.
예: --register-with-taints='os=windows:NoSchedule'
EKS를 사용하는 경우 eksctl은 clusterConfig를 통해 테인트를 적용하는 방법을 제공합니다.
NodeGroups: - name: windows-ng amiFamily: WindowsServer2022FullContainer ... labels: nodeclass: windows2022 taints: os: "windows:NoSchedule"
모든 Windows 노드에 테인트를 추가하면 스케줄러는 테인트를 허용하지 않는 한 해당 노드에서 포드를 예약하지 않습니다. 포드 매니페스트 예제:
nodeSelector: kubernetes.io/os: windows tolerations: - key: "os" operator: "Equal" value: "windows" effect: "NoSchedule"
동일한 클러스터에서 여러 Windows 빌드 처리
각 포드에서 사용하는 Windows 컨테이너 기본 이미지는 노드와 동일한 커널 빌드 버전과 일치해야 합니다. 동일한 클러스터에서 여러 Windows Server 빌드를 사용하려면 추가 노드 레이블, nodeSelectors를 설정하거나 windows-build라는 레이블을 활용해야 합니다.
Kubernetes 1.17은 자동으로 새 레이블 node.kubernetes.io/windows-build 추가하여 동일한 클러스터에서 여러 Windows 빌드의 관리를 간소화합니다. 이전 버전을 실행하는 경우 Windows 노드에이 레이블을 수동으로 추가하는 것이 좋습니다.
이 레이블은 호환성을 위해 일치해야 하는 Windows 메이저, 마이너 및 빌드 번호를 반영합니다. 다음은 각 Windows Server 버전에 현재 사용되는 값입니다.
Windows Server가 기본 릴리스 채널로 장기 서비스 채널(LTSC)로 이동하고 있다는 점에 유의해야 합니다. Windows Server 반기 채널(SAC)은 2022년 8월 9일에 사용 중지되었습니다. 향후 Windows Server의 SAC 릴리스는 없습니다.
제품 이름 | 빌드 번호(들) |
---|---|
서버 전체 2022 LTSC |
20348년 10월 0일 |
서버 코어 2019 LTSC |
10.0.17763 |
다음 명령을 통해 OS 빌드 버전을 확인할 수 있습니다.
kubectl get nodes -o wide
KERNEL-VERSION 출력은 Windows OS 빌드 버전과 일치합니다.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ip-10-10-2-235.ec2.internal Ready <none> 23m v1.24.7-eks-fb459a0 10.10.2.235 3.236.30.157 Windows Server 2022 Datacenter 10.0.20348.1607 containerd://1.6.6 ip-10-10-31-27.ec2.internal Ready <none> 23m v1.24.7-eks-fb459a0 10.10.31.27 44.204.218.24 Windows Server 2019 Datacenter 10.0.17763.4131 containerd://1.6.6 ip-10-10-7-54.ec2.internal Ready <none> 31m v1.24.11-eks-a59e1f0 10.10.7.54 3.227.8.172 Amazon Linux 2 5.10.173-154.642.amzn2.x86_64 containerd://1.6.19
아래 예제에서는 다른 Windows 노드 그룹 OS 버전을 실행할 때 올바른 Windows 빌드 버전과 일치하도록 포드 매니페스트에 추가 nodeSelector를 적용합니다.
nodeSelector: kubernetes.io/os: windows node.kubernetes.io/windows-build: '10.0.20348' tolerations: - key: "os" operator: "Equal" value: "windows" effect: "NoSchedule"
RuntimeClass를 사용하여 포드 매니페스트에서 NodeSelector 및 허용 범위 간소화
RuntimeClass를 사용하여 테인트 및 허용치 사용 프로세스를 간소화할 수도 있습니다. 이러한 테인트와 허용치를 캡슐화하는 데 사용되는 RuntimeClass 객체를 생성하여이 작업을 수행할 수 있습니다.
다음 매니페스트를 실행하여 RuntimeClass를 생성합니다.
apiVersion: node.k8s.io/v1beta1 kind: RuntimeClass metadata: name: windows-2022 handler: 'docker' scheduling: nodeSelector: kubernetes.io/os: 'windows' kubernetes.io/arch: 'amd64' node.kubernetes.io/windows-build: '10.0.20348' tolerations: - effect: NoSchedule key: os operator: Equal value: "windows"
Runtimeclass가 생성되면를 포드 매니페스트의 사양으로 사용하여 할당합니다.
apiVersion: apps/v1 kind: Deployment metadata: name: iis-2022 labels: app: iis-2022 spec: replicas: 1 template: metadata: name: iis-2022 labels: app: iis-2022 spec: runtimeClassName: windows-2022 containers: - name: iis
관리형 노드 그룹 지원
고객이 보다 간소화된 방식으로 Windows 애플리케이션을 실행할 수 있도록 AWS는 2022년 12월 15일에 Windows 컨테이너에 대한 Amazon EKS Managed Node Group(MNG) 지원을
관리형 노드 그룹(MNG)에는 다음 AMI 패밀리가 지원됩니다.
AMI 패밀리 |
---|
WINDOWS_CORE_2019_x86_64 |
WINDOWS_FULL_2019_x86_64 |
WINDOWS_CORE_2022_x86_64 |
WINDOWS_FULL_2022_x86_64 |
추가 설명서
AWS 공식 설명서: https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html
포드 네트워킹(CNI)의 작동 방식을 더 잘 이해하려면 https://docs.aws.amazon.com/eks/latest/userguide/pod-networking.html 링크를 확인하세요.
EKS에서 Windows용 관리형 노드 그룹 배포에 대한 AWS 블로그: https://aws.amazon.com/blogs/containers/deploying-amazon-eks-windows-managed-node-groups/