Amazon EKS 노드 그룹에서 HugePages 기능을 활성화하려면 어떻게 해야 합니까?
메모리 사용량이 많은 메모리 집약적 애플리케이션이 있습니다. Amazon Elastic Kubernetes Service(Amazon EKS) 워커 노드의 HugePages 기능을 사용하여 앱 성능을 개선하고 싶습니다.
간략한 설명
HugePages는 대량의 메모리 액세스가 필요한 워크로드의 성능을 개선합니다. HugePages 기능은 Linux 커널에서 기본 4KB 할당 대신 2MB 및 1GB 메모리 페이지 할당을 활성화합니다. 대규모 연속 메모리 영역을 사용하는 지원되는 인스턴스 유형(예: Nitro Enclaves)에서 HugePages를 구성할 수 있습니다.
사전 요구 사항
이 절차를 수행하려면 eksctl 버전 0.187.0 이상이 필요합니다. eksctl 웹사이트에서 최신 버전을 다운로드하여 설치하십시오.
해결 방법
user-data를 사용해 Amazon EC2 워커 노드를 구성하여 워크로드 소비에 필요한 HugePages를 할당합니다. 자세한 내용은 redhat.com 웹사이트의 HugePages 및 투명한 HugePages를 참조하십시오.
시작 템플릿을 사용하거나 사용하지 않고 HugePages를 구성할 수 있다는 점에 유의하십시오.
시작 템플릿으로 HugePages 기능 활성화
HugePages 기능이 활성화된 상태에서 워커 노드를 시작하기 위한 시작 템플릿을 생성합니다.
-
다음 내용이 포함된.txt 파일을 생성합니다. 파일을 eks-hugepage-user-data.txt라는 이름으로 저장합니다.
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash -e # Check if HugePages is activated sudo cat /proc/sys/vm/nr_hugepages # activate HugePages and set the kernel parameter value to 2048 sudo sysctl -w vm.nr_hugepages=2048 # Ensure HugePages is allocated after reboot sudo echo "vm.nr_hugepages=2048" >> /etc/sysctl.conf sudo grep Huge /proc/meminfo echo "hugepages user data script has finished successfully." --==MYBOUNDARY==
-
콘솔을 사용하여 사용자 데이터를 base64로 변환합니다.
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
export BASE64_RANDOM_OUTPUT=$(cat eks-hugepage-user-data.txt | base64) echo $BASE64_RANDOM_OUTPUT
생성된 임의 출력은 다음 단계에서 변수로 저장됩니다.
-
다음 명령을 사용하여 시작 템플릿을 생성합니다.
다음 코드의 $BASE64_RANDOM_OUTPUT은 2단계의 출력으로 대체됩니다.
LAUNCH_TEMPLATE=$(aws ec2 create-launch-template \ --launch-template-name ekshugepages \ --version-description 'Using Huge Pages with Amazon EKS' \ --launch-template-data "{\"UserData\":\"$BASE64_RANDOM_OUTPUT\",\"InstanceType\": \"m5.2xlarge\",\"TagSpecifications\":[{\"ResourceType\":\"instance\",\"Tags\":[{\"Key\":\"purpose\",\"Value\":\"hugepages\"}]}]}" --query 'LaunchTemplate.LaunchTemplateId' --output text) echo $LAUNCH_TEMPLATE
시작 템플릿 ID(예: lt-01234567890abcdef)는 다음 단계에서 필요하므로 기록해 둡니다.
-
다음 내용이 포함된 텍스트 파일을 생성합니다. 파일을 디바이스에 eks-nodegroup.yaml로 저장합니다.
LAUNCH_TEMPLATE_ID를 3단계 7에서 적어둔 시작 템플릿 값으로 바꾸십시오.
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.29" managedNodeGroups: # Launch templates - Amazon Linux 2023 - name: hg-al2023 labels: { use-case: large-memory-access } amiFamily: AmazonLinux2023 # or specify 'AmazonLinux2' for Amazon Linux 2 launchTemplate: id: LAUNCH_TEMPLATE_ID version: "1"
참고: 버전 1.30 이상의 클러스터에서 생성된 관리형 노드 그룹은 기본적으로 Amazon Linux 2023을 사용하도록 자동으로 설정됩니다.
-
다음 명령을 사용하여 기존 Amazon EKS 클러스터에 노드 그룹을 생성합니다.
eksctl create nodegroup --config-file eks-nodegroup.yaml
시작 템플릿 없이 HugePages 기능 활성화
인스턴스를 클러스터로 부트스트랩하기 전에 preBootstrapCommands를 사용하여 HugePages 기능을 활성화합니다. 다음 eksctl 구성 파일을 사용하여 HugePages 관리자 노드 그룹을 생성합니다.
... managedNodeGroups: - name: hg labels: { use-case: large-memory-access } instanceType: m5.2xlarge preBootstrapCommands: # enable huge pages - "sudo sysctl -w vm.nr_hugepages=2048" - "sudo echo 'vm.nr_hugepages=2048' >> /etc/sysctl.conf"
HugePages 노드 확인
Amazon EKS 클러스터에서 HugePages 노드를 활성화한 후 다음 단계에 따라 노드를 확인합니다.
먼저 다음 명령을 사용하여 클러스터의 노드를 설명합니다.
kubectl describe node node_name | egrep 'Capacity|Allocatable' -A5
출력은 다음 예와 비슷할 것입니다.
Capacity: cpu: 8 ephemeral-storage: 83873772Ki hugepages-1Gi: 0 hugepages-2Mi: 4Gi memory: 32386520Ki -- Allocatable: cpu: 7910m ephemeral-storage: 76224326324 hugepages-1Gi: 0 hugepages-2Mi: 4Gi memory: 27175384Ki
다음으로, 클러스터의 워크로드에 HugePages가 어떻게 할당되었는지 검토합니다.
kubectl describe nodes node_name | grep 'Allocated' -A9
출력은 다음 예와 비슷할 것입니다.
Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.) Resource Requests Limits -------- -------- ------ cpu 150m (1%) 0 (0%) memory 100Mi (0%) 100Mi (0%) ephemeral-storage 0 (0%) 0 (0%) hugepages-1Gi 0 (0%) 0 (0%) hugepages-2Mi 100Mi (2%) 100Mi (2%) Events:
출력의 예는 hugepages-2Mi 리소스가 현재 해당 노드에서 실행되는 포드에서 사용되고 있음을 보여줍니다.
관련 정보
kubernetes.io 웹사이트에서 HugePages 관리
관련 콘텐츠
- 질문됨 3달 전lg...
- 질문됨 2년 전lg...
- 질문됨 10달 전lg...
- AWS 공식업데이트됨 5년 전
- AWS 공식업데이트됨 3년 전