AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
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 관리
- 언어
- 한국어

관련 콘텐츠
AWS 공식업데이트됨 일 년 전