이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Amazon EKS용 노드 클래스 생성
Amazon EKS 노드 클래스는 EKS 자동 모드 관리형 노드의 구성을 세부적으로 제어할 수 있는 템플릿입니다. 노드 클래스는 네트워크 구성, 스토리지 설정, 리소스 태그 지정을 포함하여 EKS 클러스터의 노드 그룹에 적용되는 인프라 수준 설정을 정의합니다. 이 주제에서는 특정 운영 요구 사항에 맞게 노드 클래스를 생성하고 구성하는 방법을 설명합니다.
EKS Auto Mode가 기본 설정 이상으로 EC2 인스턴스를 프로비저닝하고 구성하는 방법을 사용자 지정해야 하는 경우, 노드 클래스를 생성하면 중요한 인프라 파라미터를 정확하게 제어할 수 있습니다. 예를 들어 보안 강화를 위해 프라이빗 서브넷 배치를 지정하거나, 성능에 민감한 워크로드에 대해 인스턴스 임시 스토리지를 구성하거나, 비용 할당을 위해 사용자 지정 태그 지정을 적용할 수 있습니다.
포드 희소 또는 대규모 워크로드에 대한 고려 사항
EKS Auto Mode는 기본적으로 접두사 위임(접두사 /28개)을 사용합니다. 각 노드가 16개의 포드 IP를 예약하며, 이렇게 하면 해당 슬롯을 채우는 포드 집약적 워크로드에 효율적입니다. 포드 희소 워크로드의 경우(노드당 포드 두세 개, ML 또는 GPU 워크로드, 또는 반선호도 고부하 워크로드에서 일반적), 가용 영역당 수백 개를 넘는 노드, 보조 IP 모드("32")를 목표로 삼는 것이 더 최적화된 구성입니다. 이렇게 하면 노드당 16개를 예약하지 않고 포드당 IP를 한 개씩 할당해 /20 포드 서브넷의 유효 용량을 확장합니다.
자세한 내용은 포드에 대한 보조 IP 모드 섹션을 참조하세요. 포드를 노드와 별개의 서브넷에서 유지하려면(할당 모드와 무관) 포드에 대한 별도의 서브넷 및 보안 그룹를 참조하세요.
노드 클래스 생성
NodeClass를 생성하려면 다음 단계를 따르세요.
-
노드 클래스 구성으로 YAML 파일(예:
nodeclass.yaml) 생성 -
kubectl을 사용하여 클러스터에 해당 구성 적용 -
노드 풀 구성에서 노드 클래스를 참조하세요. 자세한 내용은 EKS Auto Mode용 노드 풀 생성 섹션을 참조하세요.
kubectl을 설치하고 구성해야 합니다. 자세한 내용은 Amazon EKS를 사용하도록 설정 섹션을 참조하세요.
기본 노드 클래스 예제
다음은 노드 클래스 예제입니다.
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: private-compute spec: subnetSelectorTerms: - tags: Name: "private-subnet" kubernetes.io/role/internal-elb: "1" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" ephemeralStorage: size: "160Gi"
이 NodeClass는 노드의 임시 스토리지 양을 늘립니다.
다음을 사용하여 이 구성을 적용합니다.
kubectl apply -f nodeclass.yaml
그런 다음 노드 풀 구성에서 노드 클래스를 참조합니다. 자세한 내용은 EKS Auto Mode용 노드 풀 생성 섹션을 참조하세요.
노드 클래스 액세스 항목 생성
사용자 지정 노드 클래스를 생성하는 경우 노드가 클러스터에 조인할 수 있도록 EKS 액세스 항목을 생성해야 합니다. EKS는 내장 노드 클래스와 노드 풀을 사용할 때 액세스 항목을 자동으로 생성합니다.
Access Entries 작동 방법에 대한 자세한 내용은 EKS 액세스 항목을 사용한 IAM 사용자에게 Kubernetes에 대한 액세스 권한 부여 섹션을 참조하세요.
EKS 자동 모드 노드 클래스에 대한 액세스 항목을 생성할 때 EC2 액세스 항목 유형을 사용해야 합니다.
CLI를 사용하여 액세스 항목 생성
EC2 노드에 대한 액세스 항목 생성 및 EKS 자동 모드 정책 연결
클러스터 이름과 노드 역할 ARN으로 다음 CLI 명령을 업데이트합니다. 노드 역할 ARN은 노드 클래스 YAML에 지정됩니다.
# Create the access entry for EC2 nodes aws eks create-access-entry \ --cluster-name <cluster-name> \ --principal-arn <node-role-arn> \ --type EC2 # Associate the auto node policy aws eks associate-access-policy \ --cluster-name <cluster-name> \ --principal-arn <node-role-arn> \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy \ --access-scope type=cluster
CloudFormation을 사용하여 액세스 항목 생성
EC2 노드에 대한 액세스 항목 생성 및 EKS 자동 모드 정책 연결
클러스터 이름과 노드 역할 ARN으로 다음 CLI 명령을 업데이트합니다. 노드 역할 ARN은 노드 클래스 YAML에 지정됩니다.
EKSAutoNodeRoleAccessEntry: Type: AWS::EKS::AccessEntry Properties: ClusterName: <cluster-name> PrincipalArn: <node-role-arn> Type: "EC2" AccessPolicies: - AccessScope: Type: cluster PolicyArn: arn:aws:eks::aws:cluster-access-policy/AmazonEKSAutoNodePolicy DependsOn: [ <cluster-name> ] # previously defined in CloudFormation
CloudFormation 스택 배포에 대한 자세한 내용은 CloudFormation 시작하기를 참조하세요.
노드 클래스 사양
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: my-node-class spec: # Required fields # role and instanceProfile are mutually exclusive fields. role: MyNodeRole # IAM role for EC2 instances # instanceProfile: eks-MyNodeInstanceProfile # IAM instance-profile for EC2 instances subnetSelectorTerms: - tags: Name: "private-subnet" kubernetes.io/role/internal-elb: "1" # Alternative using direct subnet ID # - id: "subnet-0123456789abcdef0" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" # Alternative approaches: # - id: "sg-0123456789abcdef0" # - name: "eks-cluster-security-group" # Optional: Pod subnet selector for advanced networking podSubnetSelectorTerms: - tags: Name: "pod-subnet" kubernetes.io/role/pod: "1" # Alternative using direct subnet ID # - id: "subnet-0987654321fedcba0" # must include Pod security group selector also podSecurityGroupSelectorTerms: - tags: Name: "eks-pod-sg" # Alternative using direct security group ID # - id: "sg-0123456789abcdef0" # Optional: Selects on-demand capacity reservations and capacity blocks # for EKS Auto Mode to prioritize. capacityReservationSelectorTerms: - id: cr-56fac701cc1951b03 # Alternative Approaches - tags: Name: "targeted-odcr" # Optional owning account ID filter owner: "012345678901" # Optional fields snatPolicy: Random # or Disabled networkPolicy: DefaultAllow # or DefaultDeny networkPolicyEventLogs: Disabled # or Enabled ephemeralStorage: size: "80Gi" # Range: 1-59000Gi or 1-64000G or 1-58Ti or 1-64T iops: 3000 # Range: 3000-16000 throughput: 125 # Range: 125-1000 # Optional KMS key for encryption kmsKeyID: "arn:aws:kms:region:account:key/key-id" # Accepted formats: # KMS Key ID # KMS Key ARN # Key Alias Name # Key Alias ARN advancedNetworking: # Optional: Controls whether public IP addresses are assigned to instances that are launched with the nodeclass. # If not set, defaults to the MapPublicIpOnLaunch setting on the subnet. associatePublicIPAddress: false # Optional: Forward proxy, commonly requires certificateBundles as well # for EC2, see https://repost.aws/knowledge-center/eks-http-proxy-containerd-automation httpsProxy: http://192.0.2.4:3128 #commonly port 3128 (Squid) or 8080 (NGINX) #Max 255 characters #httpsProxy: http://[2001:db8::4]:3128 # IPv6 address with port, use [] noProxy: #Max 50 entries - localhost #Max 255 characters each - 127.0.0.1 #- ::1 # IPv6 localhost #- 0:0:0:0:0:0:0:1 # IPv6 localhost - 169.254.169.254 # EC2 Instance Metadata Service #- [fd00:ec2::254] # IPv6 EC2 Instance Metadata Service # Domains to exclude, put all VPC endpoints here - .internal - .eks.amazonaws.com # ipv4PrefixSize is default to Auto which is prefix and fallback to secondary IP. "32" is the secondary IP mode. ipv4PrefixSize: Auto # or "32" # enableV4Egress is default to true. Setting it to false when using network policy or blocking IPv4 traffic in IPv6 clusters enableV4Egress: false # Optional: Static network interface configuration for EFA workloads networkInterfaces: # The primary ENI (networkCardIndex 0, deviceIndex 0) must use interfaceType: interface # secondaryIPv4Count and secondaryIPv4PrefixCount are only supported on networkCardIndex 0 - deviceIndex: 0 interfaceType: interface networkCardIndex: 0 secondaryIPv4Count: 10 - deviceIndex: 1 interfaceType: interface networkCardIndex: 0 secondaryIPv4PrefixCount: 2 # Only one of secondaryIPv4Count or secondaryIPv4PrefixCount per ENI - deviceIndex: 0 interfaceType: efa-only networkCardIndex: 1 advancedSecurity: # Optional, US regions only: Specifying `fips: true` will cause nodes in the nodeclass to run FIPS compatible AMIs. fips: false # Optional: Custom certificate bundles. certificateBundles: - name: "custom-cert" data: "base64-encoded-cert-data" # Optional: EC2 Placement Group placementGroupSelector: name: "targeted-pg" # Alternative use direct placement group ID # id: "pg-02465754522cda020" # Optional: Additional EC2 tags (with restrictions) tags: Environment: "production" Team: "platform" # Note: Cannot use restricted tags like: # - kubernetes.io/cluster/* # - karpenter.sh/provisioner-name # - karpenter.sh/nodepool # - karpenter.sh/nodeclaim # - karpenter.sh/managed-by # - eks.amazonaws.com/nodeclass
고려 사항
-
인스턴스에 있는 로컬 스토리지의 양을 확인하려면 노드를 설명하여 임시 스토리지 리소스를 확인할 수 있습니다.
-
볼륨 암호화 - EKS는 구성된 사용자 지정 KMS 키를 사용하여 인스턴스의 읽기 전용 루트 볼륨과 읽기/쓰기 데이터 볼륨을 암호화합니다.
-
노드 IAM 역할 바꾸기 -
NodeClass와 연결된 노드 IAM 역할을 변경하는 경우 새 액세스 항목을 생성해야 합니다. EKS는 클러스터 생성 중 노드 IAM 역할에 대한 액세스 항목을 자동으로 생성합니다. 노드 IAM 역할에는AmazonEKSAutoNodePolicyEKS 액세스 정책이 필요합니다. 자세한 내용은 EKS 액세스 항목을 사용한 IAM 사용자에게 Kubernetes에 대한 액세스 권한 부여 섹션을 참조하세요. -
최대 포드 밀도 - EKS는 노드의 최대 포드 수를 110개로 제한합니다. 이 제한은 기존의 최대 포드 계산 후에 적용됩니다. 자세한 내용은 최적의 Amazon EC2 노드 인스턴스 유형 선택 섹션을 참조하세요.
-
태그 - Kubernetes에서 EC2로 태그를 전파하려면 추가 IAM 권한을 구성해야 합니다. 자세한 내용은 EKS Auto Mode의 자격 증명 및 액세스에 대해 알아보기 섹션을 참조하세요.
-
기본 노드 클래스 - 사용자 지정 노드 클래스의 이름을
default로 지정하지 마세요. 이는 EKS 자동 모드에 내장NodePool을 하나 이상 활성화하면 자동으로 프로비저닝되는default라는NodeClass가 포함되어 있기 때문입니다. 내장NodePools활성화에 대한 자세한 내용은 내장 NodePools 활성화 또는 비활성화 섹션을 참조하세요. -
여러 서브넷이 있는
subnetSelectorTerms동작 -subnetSelectorTerms조건과 일치하거나 ID로 제공하는 서브넷이 여러 개 있는 경우 EKS 자동 모드는 서브넷 전체에 분산된 노드를 생성합니다.-
서브넷이 서로 다른 가용 영역(AZ)에 있는 경우 포드 토폴로지 확산 제약 조건
및 토폴로지 인식 라우팅 과 같은 Kubernetes 기능을 사용하여 각각 영역에 걸쳐 포드와 트래픽을 확산할 수 있습니다. -
동일한 AZ에
subnetSelectorTerms와 일치하는 서브넷이 여러 개 있는 경우 EKS 자동 모드는 해당 AZ의 서브넷에 분산된 각 노드에 포드를 생성합니다. EKS 자동 모드는 동일한 AZ의 다른 서브넷에 있는 각 노드에 보조 네트워크 인터페이스를 생성합니다. 각 서브넷에서 사용 가능한 IP 주소 수를 기준으로 선택하여 서브넷을 보다 효율적으로 사용합니다. 하지만 EKS 자동 모드가 각 포드에 대해 어떤 서브넷을 사용할지는 지정할 수 없습니다. 포드가 특정 서브넷에서 실행되도록 하려면 대신 포드에 대한 별도의 서브넷 및 보안 그룹를 사용합니다.
-
-
플레이스먼트 그룹 전략 제한 사항 - 각 플레이스먼트 그룹 전략(클러스터, 파티션, 스프레드)에는 인스턴스 유형, AZ 및 용량에 대한 특정 제한 사항이 있습니다. 자세한 내용은 Amazon EC2 사용 설명서의 플레이스먼트 그룹 전략을 참조하세요.
-
스프레드 플레이스먼트 그룹 - 7개 인스턴스 제한 - 랙 수준 스프레드 플레이스먼트 그룹은 그룹당 하나의 가용 영역에 최대 7개의 실행 중인 인스턴스를 허용합니다. 그러면 다음과 같은 엣지 케이스가 생성됩니다.
-
용량에서 드리프트 대체가 차단됨 - EKS 자율 모드에서는 이전 노드를 종료하기 전에 대체 노드를 시작합니다. 스프레드 PG의 AZ에 7개의 인스턴스가 있는 경우 대체 시작이 실패하고 슬롯이 해제될 때까지 드리프트된 노드는 계속 실행됩니다.
-
용량의 모든 AZ - 스프레드 PG의 모든 AZ에 7개 인스턴스 제한이 적용된 경우 대체를 예약할 수 없습니다. 드리프트 또는 통합 지원 노드는 무기한 실행 상태로 유지됩니다.
-
플레이스먼트 그룹 외부에서 폴백 없음 - EKS 자율 모드에서는 플레이스먼트 그룹 외부에서 대체 인스턴스를 시작하려고 시도하지 않습니다.
-
해결 방법 -
WhenEmpty통합 정책(consolidationPolicy: WhenEmpty)을 사용합니다. 노드는 DaemonSet 이외의 모든 포드가 드레이닝된 후에만 삭제되므로, 먼저 대체 시작을 수행하지 않고도 PG 슬롯을 해제합니다. 드리프트는 통합 정책에 관계없이 항상 대체 후 삭제 방식을 사용하므로 드리프트는 용량에서 차단된 상태로 유지됩니다.
-
-
클러스터 플레이스먼트 그룹 AZ 고정 - 첫 번째 인스턴스가 클러스터 플레이스먼트 그룹으로 시작되면 PG는 해당 AZ에 고정됩니다. NodePool에서 여러 AZ를 허용하는 경우 초기 스케일 업 중에 병렬 시작이 진행될 수 있습니다. 이 경우 하나에서 성공하고 AZ를 고정하며, 나머지에서는 용량 오류와 함께 실패합니다. 일시적인 장애를 방지하려면 NodePool 요구 사항에서 AZ를 고정합니다.
-
파티션 플레이스먼트 그룹 - 파티션 플레이스먼트 그룹은 표준 EC2 제한을 초과하는 추가 제약 조건 없이 지원됩니다.
-
통합 시 포드가 플레이스먼트 그룹 밖으로 이동될 수 있음 - 포드에 플레이스먼트 그룹 예약 제약 조건(예:
eks.amazonaws.com/placement-group-id에서nodeSelector)이 없는 경우 통합 시 포드가 PG 외부의 노드로 이동될 수 있습니다. 플레이스먼트 그룹 멤버십이 필요한 애플리케이션은 포드 수준 제약을 통해 이를 표현해야 합니다. -
존재하지 않거나 삭제된 플레이스먼트 그룹 -
NodeClass가 존재하지 않거나 삭제된 플레이스먼트 그룹을 참조하는 경우 인스턴스가 시작되지 않습니다. 플레이스먼트 그룹 ID 형식은 승인 시 검증되지만, 시작 시점에서만 존재 여부를 확인합니다. 노드가 실행되는 동안 플레이스먼트 그룹이 삭제되면 드리프트 교체 시작도 차단되므로 기존 노드는 드리프트된 것으로 표시되고 무기한 실행 상태를 유지합니다. -
Hugepages - 노드에서 Hugepages를 구성하는 방법에 대한 자세한 내용은 노드에서 Hugepages 구성 섹션을 참조하세요.
-
Kubelet 설정 — 포드 밀도, 제거 임곗값 및 로그 교체와 같은 kubelet 설정을 재정의하는 것과 관련한 자세한 내용은 노드에서 kubelet 설정 구성를 참조하세요.
-
커널 sysctls – 노드에서 커널 sysctls를 구성하는 것과 관련한 자세한 내용은 노드에서 커널 sysctls 구성를 참조하세요.
포드에 대한 별도의 서브넷 및 보안 그룹
podSubnetSelectorTerms 및 podSecurityGroupSelectorTerms 필드는 포드가 노드와 다른 서브넷을 사용하도록 허용함으로써 고급 네트워킹 구성을 지원합니다. 두 필드를 함께 지정해야 합니다. 이 분리는 네트워크 트래픽 라우팅 및 보안 정책에 대한 향상된 제어를 제공합니다.
참고
이 기능은 비 EKS 자율 모드 컴퓨팅을 위해 AWS VPC CNI와 함께 사용되는 포드 보안 그룹(SGPP) 기능과 다릅니다. SGPP는 EKS Auto Mode에서 지원되지 않습니다. 대신 NodeClass에서 podSecurityGroupSelectorTerms를 사용하여 포드 트래픽에 별도의 보안 그룹을 적용합니다. 보안 그룹은 NodeClass 수준에서 적용됩니다. 즉, 해당 NodeClass를 사용하는 노드의 모든 포드가 동일한 포드 보안 그룹을 공유합니다.
작동 방식
podSubnetSelectorTerms 및 podSecurityGroupSelectorTerms를 구성하는 경우:
-
노드의 기본 ENI는
subnetSelectorTerms및securityGroupSelectorTerms의 서브넷 및 보안 그룹을 사용합니다. 노드의 고유 IP 주소만 이 인터페이스에 할당됩니다. -
EKS Auto Mode는
podSecurityGroupSelectorTerms의 보안 그룹이 연결된podSubnetSelectorTerms와 일치하는 서브넷에서 보조 ENI를 생성합니다. 포드 IP 주소는 기본적으로 /28 접두사를 사용하여 이러한 보조 ENI에서 할당되며, 연속 접두사 블록을 사용할 수 없는 경우 보조 IP(/32)로 자동 폴백됩니다.ipv4PrefixSize가advancedNetworking에서"32"로 설정된 경우 보조 IP만 사용됩니다. -
podSecurityGroupSelectorTerms에 지정된 보안 그룹은 VPC 내 포드 트래픽에 적용됩니다. VPC 외부로 향하는 트래픽의 경우 소스 네트워크 주소 변환(SNAT)이 포드 IP를 노드 IP로 변환하기 때문에 포드는 노드의 기본 ENI 및 해당 보안 그룹을 사용합니다.NodeClass에서snatPolicy필드를 사용하여 이 동작을 수정할 수 있습니다.
사용 사례
다음 수행해야 하는 경우 podSubnetSelectorTerms 및 podSecurityGroupSelectorTerms를 사용합니다.
-
서로 다른 보안 그룹을 적용하여 노드와 포드의 트래픽을 개별적으로 제어합니다.
-
애플리케이션 트래픽(포드 간 통신)에서 인프라 트래픽(노드 간 통신)을 분리합니다.
-
포드 서브넷과 다른 네트워크 구성을 노드 서브넷에 적용합니다.
-
포드 트래픽에 영향을 주지 않고 노드 트래픽에 대해 특히 역방향 프록시 또는 네트워크 필터링을 구성합니다.
advancedNetworking및certificateBundles를 사용하여 역방향 프록시와 프록시에 대한 자체 서명 또는 프라이빗 인증서를 정의합니다.
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: advanced-networking spec: role: MyNodeRole # Subnets and security groups for EC2 instances (nodes) subnetSelectorTerms: - tags: Name: "node-subnet" kubernetes.io/role/internal-elb: "1" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" # Separate subnets and security groups for Pods podSubnetSelectorTerms: - tags: Name: "pod-subnet" kubernetes.io/role/pod: "1" podSecurityGroupSelectorTerms: - tags: Name: "eks-pod-sg"
별도의 포드 서브넷 및 보안 그룹에 대한 고려 사항
-
보안 그룹 범위:
podSecurityGroupSelectorTerms의 보안 그룹은 보조 ENI에 연결되며 VPC 내의 포드 트래픽에 적용됩니다. SNAT가 활성화되면(기본값snatPolicy: Random) VPC에서 나가는 트래픽이 노드의 기본 ENI IP 주소로 변환되므로 대신securityGroupSelectorTerms의 노드 보안 그룹이 대신 해당 트래픽에 적용됩니다.snatPolicy: Disabled를 설정하면 포드가 모든 트래픽에 대해 자체 IP 주소를 사용하므로 라우팅 및 보안 그룹이 적절히 구성되어야 합니다. -
NodeClass 수준 세부 수준: 포드 보안 그룹은
NodeClass를 사용하여 노드에 예약된 모든 포드에 적용됩니다. 서로 다른 보안 그룹을 서로 다른 워크로드에 적용하려면 별도의NodeClass및NodePool리소스를 생성하고 테인트, 허용 오차 또는 노드 선택기를 사용하여 워크로드를 적절한 노드로 예약합니다. -
포드 밀도 감소: 노드의 기본 네트워크 인터페이스가 노드 IP에 대해 예약되었고 포드에 대해 사용할 수 없으므로 각 노드에서 더 적은 포드를 실행할 수 있습니다.
-
서브넷 선택기 제한 사항: 포드 서브넷 또는 보안 그룹 선택에는 표준
subnetSelectorTerms및securityGroupSelectorTerms구성이 적용되지 않습니다. -
네트워크 계획: 워크로드 요구 사항을 지원하기 위해 노드와 포드 서브넷 모두에서 적절한 IP 주소 공간을 확보합니다.
-
라우팅 구성: 포드 서브넷의 라우팅 테이블과 네트워크 액세스 제어 목록(ACL)이 노드와 포드 서브넷 간 통신을 위해 올바르게 구성되어 있는지 확인합니다.
-
가용 영역: 여러 AZ에 걸쳐 포드 서브넷을 생성했는지 확인합니다. 특정 포드 서브넷을 사용하는 경우 노드 서브넷 AZ와 동일한 AZ에 있어야 합니다.
포드에 대한 보조 IP 모드
ipv4PrefixSize 필드는 노드에 보조 IP 주소만 할당하여 고급 네트워킹 구성을 지원합니다. 이 기능은 노드에 접두사(/28)를 할당하지 않으며 하나의 보조 IP만 MinimalIPTarget으로 유지 관리합니다.
advancedNetworking.ipv4PrefixSize는 다음 두 개의 값을 허용합니다. 하나는 Auto(기본값, 접두사 위임, 높은 포드 생성 속도, 노드당 최소 16개의 IP 예약)이고 다른 하나는 "32"(보조 IP 모드, 노드당 IP 1개, 노드당 AssignPrivateIpAddresses 호출 추가, 노드당 포드 상한이 인스턴스 유형의 ENI IP 한도에 따라 결정됨).
Auto 모드에서는 EKS Auto Mode가 각 노드에 먼저 /28개의 접두사(IP 16개)를 할당하고 포드 수요가 현재 블록의 용량을 초과하면 /28개를 더 추가하므로, 16개는 상한이 아니라 노드당 최솟값입니다.
계획을 세울 때 다음 숫자를 사용하세요. 실제 클러스터는 각기 다릅니다. 포드 서브넷이 조각화되고 연속된 /28개에 여유가 없는 경우, Auto 모드는 해당 노드에서 IP당 할당으로 폴백합니다. 그런 경우 노드당 IP 수가 아래 표시된 접두사당 16개 패턴 미만이 됩니다.
예제 A - 노드에 포드 1개
-
보조 IP 모드: 포드 IP 1개 + 노드 IP 1개 = 사용 중인 IP 2개.
-
접두사 모드: 노드 IP 1개 + 첫
/28개 접두사의 IP 16개(그중 1개는 포드에서 사용하고, 15개는 향후 포드를 위해 보유) = 17개의 IP가 할당됨, 2개 사용 중.
예제 B = 노드에 포드 18개
-
보조 IP 모드: 포드 IP 18개 + 노드 IP 1개 = 사용 중인 IP 19개.
-
접두사 모드: 노드 IP 1개 + 2 x 접두사
/28개(IP 총 32개, 첫/28개는 포드 16개에서 가득 참, 두 번째/28에 포드 17~18개를 보유하고 14개는 향후 포드용으로 보유) = 33개의 IP가 할당됨, 19개 사용 중.
포드 희소 워크로드에 대해 보조 IP 모드로 전환하려면(포드당 IP 1개, 접두사 예약 없음) advancedNetworking.ipv4PrefixSize: "32"를 사용해 사용자 지정 NodeClass를 생성하고 사용자 지정 NodePool이 가리키게 합니다. 내장 general-purpose 및 system 노드 풀은 자동으로 프로비저닝된 default NodeClass를 사용합니다. ipv4PrefixSize를 재정의하려면 사용자 지정 NodePool과 페어링된 사용자 지정 NodeClass가 필요합니다.
사용 사례
-
더 나은 서브넷 IP 주소 활용률
-
접두사 조각화 없음
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: advanced-networking spec: role: MyNodeRole advancedNetworking: ipv4PrefixSize: "32"
보조 IP 모드에 대한 고려 사항
-
포드 생성 속도 감소: 하나의 보조 IP만 워밍업되므로 IPAM 서비스에는 더 많은 포드 생성 시 IP를 프로비저닝하는 데 더 많은 시간이 필요합니다.
IPv6 클러스터의 IPv6 포드에서 IPv4 송신 비활성화.
enableV4Egress 필드는 기본적으로 true입니다. Auto Mode IPv6 클러스터의 경우 기능을 비활성화할 수 있으므로 Auto Mode에서는 IPv6 포드에 대한 송신 전용 IPv4 인터페이스를 생성하지 않습니다. 이는 IPv4 송신 인터페이스에 네트워크 정책이 적용되지 않기 때문에 중요합니다. 네트워크 정책은 포드의 기본 인터페이스(eth0)에만 적용됩니다.
사용 사례
다음 작업 시 enableV4Egress를 사용합니다.
-
IPv6 클러스터 사용: IPv4 송신 트래픽이 기본적으로 허용됩니다.
-
네트워크 정책 사용: 현재 EKS 네트워크 정책은 듀얼 스택을 지원하지 않습니다.
enableV4Egress를 비활성화하면 포드 트래픽이 예기치 않게 IPv4를 통해 나가는 것을 방지할 수 있습니다.
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: advanced-networking spec: role: MyNodeRole advancedNetworking: enableV4Egress: false
enableV4Egress 비활성화 시 고려 사항
-
IPv6 클러스터의 네트워크 정책: IPv6 클러스터는 기본적으로 IPv4 트래픽을 허용합니다.
enableV4Egress: false를 설정하면 IPv4 송신 트래픽이 차단되어 특히 네트워크 정책과 함께 사용할 때 향상된 보안을 제공합니다.
정적 네트워크 인터페이스 구성
advancedNetworking 아래의 networkInterfaces 필드를 사용하면 시작 시 인스턴스에 연결된 네트워크 인터페이스를 정적으로 정의할 수 있습니다. 이는 주로 분산 훈련 및 추론 워크로드에서 고성능 노드 간 통신을 위해 Elastic Fabric Adapter(EFA) 디바이스를 구성하는 데 사용됩니다. 이 기능을 정적 용량 노드 풀과 페어링하여 사전 워밍된 EFA 지원 노드를 유지할 수 있습니다. EKS의 EFA 디바이스 관리에 대한 자세한 내용은 Amazon EKS에서 EFA 디바이스 관리 섹션을 참조하세요. 특정 인스턴스 유형에 대해 권장되는 EFA 구성은 Amazon EC2 사용 설명서의 EFA 지원 인스턴스 유형에 대한 네트워크 대역폭 최대화를 참조하세요.
작동 방식
networkInterfaces의 각 항목은 시작 시 인스턴스에 연결되는 네트워크 인터페이스를 정의합니다. 각 항목은 networkCardIndex(네트워크 카드, 여기서 0이 기본), deviceIndex(해당 카드의 디바이스 위치), interfaceType(표준 IP 기반 트래픽의 경우 interface 또는 IP 주소가 없는 RDMA 트래픽 전용 EFA 인터페이스의 경우 efa-only)을 지정합니다. 기본 ENI(networkCardIndex: 0, deviceIndex: 0)는 interfaceType: interface를 사용하여 IP 기반 노드 통신을 지원해야 합니다. efa-only 인터페이스는 RDMA에 대한 EFA 디바이스 기능만 지원하며 IP 주소로 구성할 수 없습니다.
secondaryIPv4Count(각 단위는 1개의 IP 주소를 제공) 또는 secondaryIPv4PrefixCount(각 단위는 16개의 IP 주소를 포함하는 /28 접두사를 제공)를 사용하여 기본 네트워크 카드(networkCardIndex: 0)의 인터페이스에 IP 용량을 할당할 수 있습니다. 인터페이스별로 이 중 하나만 사용할 수 있으며 networkCardIndex: 0에서만 지원됩니다. efa-only 인터페이스에서는 사용할 수 없습니다.
중요
networkInterfaces가 구성된 경우 EKS Auto Mode는 인스턴스 시작 후 추가 IP, 접두사 또는 ENI를 연결하지 않습니다. 시작 시 구성된 인터페이스 및 IP 주소만 포드에서 사용할 수 있습니다. 구성된 IP 수에 따라 포드 밀도를 계획해야 합니다.
고려 사항
IPv6는 정적으로 정의된 네트워크 인터페이스에서 지원되지 않습니다. associatePublicIPAddress는 둘 이상의 네트워크 인터페이스가 정의된 경우 호환되지 않으므로 여러 인터페이스를 사용하는 노드에는 퍼블릭 IP(퍼블릭 전용 클러스터 또는 퍼블릭/프라이빗 혼합 클러스터)가 있을 수 없습니다.
정적 네트워크 인터페이스와 함께 podSubnetSelectorTerms 및 podSecurityGroupSelectorTerms를 사용하는 경우 보조 IP가 0개인 기본 ENI를 구성합니다. 기본 ENI는 노드 서브넷과 보안 그룹을 사용하는 반면, 포드 트래픽은 보조 ENI의 포드 서브넷 구성을 사용합니다.
예: GPU 훈련을 위한 EFA 전용 인터페이스
다음 예제는 분산 훈련에 사용되는 GPU 인스턴스에 대해 EFA 전용 인터페이스로 구성된 NodeClass를 보여줍니다. 기본 인터페이스에 /28 접두사(포드 IP 16개)가 있으며 추가 EFA 전용 인터페이스 4개가 RDMA 연결을 제공합니다. 이 구성을 정적 용량 노드 풀과 페어링하여 사전 워밍된 EFA 지원 노드를 유지할 수 있습니다.
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: efa-training spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "efa-security-group" placementGroupSelector: name: "ml-training-pg" advancedNetworking: networkInterfaces: - deviceIndex: 0 interfaceType: interface networkCardIndex: 0 secondaryIPv4PrefixCount: 1 - deviceIndex: 1 interfaceType: efa-only networkCardIndex: 0 - deviceIndex: 0 interfaceType: efa-only networkCardIndex: 1 - deviceIndex: 0 interfaceType: efa-only networkCardIndex: 2 - deviceIndex: 0 interfaceType: efa-only networkCardIndex: 3
노드에서 Hugepages 구성
advancedCompute.hugepages 필드를 사용해 NodeClass의 노드에서 hugepages를 구성할 수 있습니다. Hugepages는 고성능 컴퓨팅(HPC), 데이터베이스 및 네트워크 집약적 애플리케이션과 같이 지연 시간에 민감한 워크로드의 메모리 액세스 성능을 개선합니다. 두 개의 독립된 Hugepages 구성을 따로 또는 함께 사용할 수 있습니다.
-
정적 Hugepages –
pages필드를 사용해 각 노드에서 정해진 숫자의2Mi또는1GiHugepages를 사전 할당합니다(또는 두 크기를 혼합). 정적 Hugepages는 예약할 수 있는 노드 리소스입니다. 이 리소스를 사용하려면 포드가hugepages-2Mi또는hugepages-1Gi와 같이 명시적으로 Hugepage 리소스를 요청하도록 구성하세요. 자세한 내용은 Kubernetes 설명서의 Manage HugePages를 참조하세요. -
Transparent Hugapages(THP) –
transparent필드를 사용해 커널의 THP 정책을 구성합니다. THP는 할당할 수 있는 리소스가 아니라 커널 전체 정책입니다. 이 정책은 예약이나 노드 용량에 아무런 영향을 미치지 않고, 포드는 이를 요청하지 않습니다. 자세한 내용은 Linux 커널 설명서의 Transparent Hugepage Support를 참조하세요.
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: hugepages-compute spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" advancedCompute: hugepages: # Static hugepage reservations: up to one entry for each size pages: - size: "2Mi" count: 512 - size: "1Gi" count: 2 # Transparent hugepages (THP) kernel policy transparent: enabled: always # or madvise, never defrag: defer # or always, defer+madvise, madvise, never
Transparent Hugepage 설정
transparent 설정은 둘 다 선택 사항입니다. 설정을 생략하면 노드는 커널 기본값(madvise)을 사용합니다.
-
enabled–enabled를 사용해 THP 할당 정책을 제어합니다. 이것을always로 설정하면 THP가 시스템 전체에 적용됩니다. 이것을madvise로 설정하면madvise(MADV_HUGEPAGE)로 옵트인하는 메모리 리전에만 THP를 적용합니다. 이것을never로 설정하면 THP가 비활성화됩니다. -
defrag–defrag를 사용해 커널이 THP 할당을 충족하기 위해 메모리를 얼마나 공격적으로 압축하는지 제어합니다. 유효한 값은always,defer,defer+madvise,madvise및never입니다.
데이터베이스 워크로드와 같이 THP 비활성화를 권장하는 경우에 맞춰 THP를 비활성화하려면 enabled: never를 설정합니다. enabled가 never인 경우, defrag를 설정하지 않은 채 두거나 never로 설정합니다. NodeClass 검증은 다른 모든 조합을 거부합니다.
Hugepages 고려 사항
NodeClass에서 Hugepages를 구성할 때 다음 사항을 고려하세요.
-
정적 Hugepages 크기 –
pages필드를 사용해 각 Hugepage 크기에 최대 한 개의 항목을 지정합니다(2Mi및1Gi). 동일한 노드에서 두 크기를 모두 예약할 수 있습니다. -
메모리 예약 – 정적 Hugepages는 인스턴스의 총 메모리에 포함됩니다. Amazon EKS는 모든 페이지 크기 전체에서 Hugepages 예약의 합계가 총 메모리의 80%를 초과하면 인스턴스 유형이 NodeClass와 호환되지 않는 것으로 표시합니다.
-
EFA 상호 배제 – Elastic Fabric Adapter(EFA) 와 정적 Hugepages는 동일한 NodeClass에서 공존할 수 없습니다.
interfaceType: efa-only를pages와 함께 설정하면 NodeClass 검증이 실패합니다. Amazon EKS는 정적 Hugepages가 있는 NodeClass에서vpc.amazonaws.com/efa를 요청하는 포드를 프로비저닝하지 않습니다. EFA 워크로드에는 별도의 NodeClass를 사용합니다. Transparent Hugepages는 EFA와 충돌하지 않습니다. EFA 인터페이스를 사용하는 NodeClass에서transparent를 구성할 수 있습니다.
노드에서 kubelet 설정 구성
advancedCompute.kubelet 필드를 사용해 NodeClass의 노드에서 kubelet 설정을 재정의합니다. 이러한 재정의를 사용해 포드 밀도, 리소스-압력 제거, 컨테이너 로그 교체 및 OOM(Out-of-memory) 동작을 조정할 수 있습니다. Amazon EKS는 Auto Mode 노드에 기본 kubelet 설정을 적용하므로, 이 필드는 워크로드에 다른 동작이 필요한 경우에만 구성하세요. 기본 설정에 관한 자세한 내용은 Kubernetes 설명서의 Kubelet Configuration
다음 kubelet 설정을 사용할 수 있습니다.
-
maxPods: 노드에서 실행할 수 있는 포드 최대 수입니다. -
podPidsLimit: 포드당 프로세스 ID(PID) 최대 수입니다. -
idsPerPod: kubelet이 각 포드의 사용자 네임스페이스에 할당하는 UID 및 GID의 수입니다. -
singleProcessOOMKill: kubelet OOM이 컨테이너의 프로세스를 그룹이 아닌 개별적으로 종료하는지 여부입니다. -
eviction: 리소스-압력 신호에 대한 하드 및 소프트 제거 임곗값입니다. -
logging: 컨테이너 로그 교체 크기 및 파일 수입니다. -
allowedUnsafeSysctls: 안전하지 않은 sysctls 또는*로 끝나는 네임스페이스가 지정된 패턴으로, 노드에서 예약된 포드가 설정하도록 허용된 것입니다.
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: kubelet-compute spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" advancedCompute: kubelet: # Range: 1-110 maxPods: 60 # -1 disables the limit, or specify 100 or greater podPidsLimit: 4096 # Multiple of 65536, range: 65536-4294967295. Requires # advancedCompute.kernel.sysctl.user.max_user_namespaces > 0. idsPerPod: 65536 singleProcessOOMKill: false eviction: # Valid signals: memory.available, nodefs.available, nodefs.inodesFree, # imagefs.available, imagefs.inodesFree, pid.available hard: memory.available: "100Mi" nodefs.available: "10%" soft: memory.available: "500Mi" nodefs.available: "15%" # Required when soft thresholds are set softGracePeriod: memory.available: "1m30s" nodefs.available: "2m" # 0 uses each Pod's terminationGracePeriodSeconds maxPodGracePeriod: 60 logging: containerLogMaxSize: "10Mi" # Minimum: 2 containerLogMaxFiles: 5 # Up to 64 entries. Allowed patterns: kernel.shm*, kernel.msg*, # kernel.sem, fs.mqueue.*, net.* allowedUnsafeSysctls: - "net.core.somaxconn" - "kernel.shm*"
Kubelet 설정 고려 사항
NodeClass에서 kubelet 설정을 구성할 때 고려할 점은 다음과 같습니다.
-
노드 교체: 기존
NodeClass에서 kubelet 설정을 변경하면 해당 설정을 사용하는 노드가 드리프트된 것으로 표시됩니다. Amazon EKS는 해당 노드를 업데이트된 구성을 사용하는 새 노드로 대체합니다. Amazon EKS는 실행 중인 노드에 kubelet 설정을 적용하지 않습니다. -
maxPods클램핑: 설정한 값이 상한이지만 보장되지는 않습니다. Amazon EKS는 런타임에 세 값 중에서 가장 낮은 것을 적용합니다. 이러한 값은maxPods값, 인스턴스 유형에 대해 사용할 수 있는 IP 주소, 그리고 노드당 포드 110개의 Auto Mode 한도입니다. 자세한 내용은 최적의 Amazon EC2 노드 인스턴스 유형 선택 섹션을 참조하세요. -
podPidsLimit값:-1을 지정해 한도를 비활성화하거나100이상의 값을 지정하세요.NodeClass검증은0에서99사이의 값을 거부합니다. -
idsPerPod요구 사항: 값은65536및4294967295사이,65536의 배수여야 합니다.idsPerPod를 설정하려면advancedCompute.kernel.sysctl.user.max_user_namespaces가 동일한NodeClass에서 양수 값으로 설정되었어야 합니다.NodeClass관리는user.max_user_namespaces도0보다 큰 값으로 설정하지 않으면idsPerPod를 설정하는 구성을 거부합니다.user.max_user_namespaces에 대한 자세한 내용은 지원되는 sysctls 섹션을 참조하세요. -
소프트 제거 임곗값: 소프트 임곗값은 동일한 신호에 대한 하드 임곗값보다 덜 공격적이어야 합니다. 즉 더 일찍 트리거된다는 의미입니다. 소프트 임곗값을 설정하는 경우, 각 신호에 대하여
softGracePeriod도 설정해야 합니다. 소프트 임곗값과 하드 임곗값은 서로 다른 단위를 사용할 수 있습니다(예: 백분율, 절대 수량). 그러한 경우 Amazon EKS가 각 인스턴스 유형에 대해 두 값을 확인합니다. 그런 다음 Amazon EKS는 비교를 위반하는 인스턴스 유형을NodeClass와 호환되지 않는 것으로 표시합니다. -
singleProcessOOMKill버전 요구 사항: 이 설정은 Kubernetes 1.32 이후 버전이 필요합니다. 이전 버전에서는 Amazon EKS가NodeClass에서 경고 이벤트를 발생시키고 설정이 아무런 효과가 없습니다. -
allowedUnsafeSysctls제한 사항: 최대 64개의 항목을 지정할 수 있고, 각 항목은 허용된 패턴 중 하나와 일치해야 합니다(kernel.shm*,kernel.msg*,kernel.sem,fs.mqueue.또는net.). 노드에서 안전하지 않은 sysctl을 허용하면 포드가 이를 요청하도록 허용하기만 합니다. 각 포드가 자신의securityContext.sysctls에서 sysctl을 나열해야 하기는 마찬가지입니다. 자세한 내용은 Kubernetes 설명서의 Using sysctls in a Kubernetes Cluster를 참조하세요.
노드에서 커널 sysctls 구성
advancedCompute.kernel.sysctl 필드를 사용해 NodeClass의 노드에서 Linux 커널 sysctls를 설정합니다. Sysctls는 더 높은 네트워킹 한도, 다른 메모리-관리 정책 또는 특정 TCP 설정이 필요한 워크로드에 맞춰 런타임 커널 동작을 조정합니다. sysctl 필드의 속성 이름은 기본 커널 sysctl 이름과 정확히 일치합니다(예: vm.swappiness 및 net.core.somaxconn). Amazon EKS는 노드가 부팅될 때 sysctl 값을 적용합니다. 기존 NodeClass에서 sysctl을 변경하면 Amazon EKS가 새 값에 효력이 발생하도록 노드를 교체하기 시작합니다.
구성의 예
apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: tuned-compute spec: role: MyNodeRole subnetSelectorTerms: - tags: Name: "private-subnet" securityGroupSelectorTerms: - tags: Name: "eks-cluster-sg" advancedCompute: kernel: sysctl: vm.swappiness: 30 net.core.somaxconn: 4096 net.ipv4.tcp_congestion_control: "cubic" vm.dirty_background_ratio: 10 vm.dirty_ratio: 20
지원되는 sysctls
Amazon EKS는 다음 테이블의 sysctls만 지원합니다. 각각의 숫자 sysctl이 표시된 최솟값 및 최댓값을 적용하고, NodeClass 관리가 해당 범위를 벗어나는 값을 거부합니다. 문자열 sysctls는 나열된 값만 허용합니다.
| Sysctl | 설명 | 허용된 값 |
|---|---|---|
|
|
비동기 I/O 요청의 최대 수입니다. |
|
|
|
실제 사용자 ID당 inotify 인스턴스 최대 수입니다. |
|
|
|
실제 사용자 ID당 inotify 감시의 최대 수입니다. |
|
|
|
프로세스가 할당할 수 있는 파일 핸들의 최대 수입니다. |
|
|
|
성능 이벤트 시스템에 대한 권한 없는 액세스를 제어합니다. |
|
|
|
CPU당 INPUT 측에서 대기열에 추가된 패킷 최대 수입니다. |
|
|
|
최대 수신 소켓 버퍼 크기입니다(바이트 단위). |
|
|
|
수신 syscall의 백로그 인수에 대한 최댓값입니다. |
|
|
|
최대 전송 소켓 버퍼 크기입니다(바이트 단위). |
|
|
|
폐영역 회수가 실행될 수 있는 최소 ARP-캐시 항목입니다. |
|
|
|
ARP-캐시 항목의 소프트 최대 개수입니다. |
|
|
|
ARP-캐시 항목의 하드 최대 개수입니다. |
|
|
|
새 연결에 대한 TCP 정체-제어 알고리즘입니다. |
|
|
|
분리된 연결이 로컬 쪽에서 중단되기 전에 FIN_WAIT_2 상태로 유지되는 시간(초 단위)입니다. |
|
|
|
keepalive가 활성화된 경우 TCP가 keepalive 메시지를 전송하는 빈도(초 단위)입니다. |
|
|
|
허용되는 미결 SYN 요청의 최대 수입니다. 이 값을 초과하는 요청은 커널이 드롭합니다. |
|
|
|
프로토콜 관점에서 안전하다고 판단될 때 새 연결에 대해 TIME-WAIT 소켓의 재사용을 활성화합니다. |
|
|
|
사용자가 생성할 수 있는 사용자 네임스페이스 최대 수입니다. 값이 |
|
|
|
커널 플러셔 스레드가 더티 페이지를 다시 디스크에 쓰기 시작하는 가용 메모리 비율입니다. |
|
|
|
더티 페이지가 다시 쓰기에 적합해질 때까지 시간(1초의 백분율)입니다. |
|
|
|
쓰기 프로그램이 강제로 쓰기를 차단하게 되는 가용 메모리 비율입니다. |
|
|
|
플러셔-스레드 간접 호출 사이 시간(1초의 백분율)입니다. |
|
|
|
프로세스 한 개에 포함될 수 있는 메모리 맵 영역의 최대 수입니다. |
|
|
|
스와핑 vs. 파일 시스템 페이지 매기기의 상대적 IO 비용입니다. |
|
|
|
메모리 회수 워터마크 비율을 10,000에 대한 분수로 나타낸 것입니다. |
|
Sysctls 고려 사항
NodeClass에서 커널 sysctls를 구성할 때 고려할 점은 다음과 같습니다.
-
지원되는 sysctls – 지원되는 sysctls에 나열된 sysctls만 지원됩니다. 각각의 필드는 문서화된 최솟값 및 최댓값을 적용하고, NodeClass 관리가 해당 범위를 벗어나는 값을 거부합니다.
-
부팅 시 적용됨 – Sysctls가 노드 부팅 시 Bottlerocket의
[settings.kernel.sysctl]에 쓰입니다.spec.advancedCompute.kernel.sysctl에 대한 런타임 변경 사항이 적용되면 기존 노드가 드리프트된 것으로 표시됩니다. 새 값은 교체 노드에서만 효력이 있습니다. -
vm.dirty_background_ratio및vm.dirty_ratio– 이 두 필드는 둘 다 설정하거나 둘 다 생략해야만 하며,vm.dirty_background_ratio는vm.dirty_ratio보다 작아야 합니다. NodeClass 관리가 둘 중 한 개의 규칙을 위반하는 구성을 거부합니다. -
net.ipv4.neigh.default.gc_thresh1,gc_thresh2및gc_thresh3– 3개의 ARP-캐시 임곗값을 모두 한꺼번에 설정하거나 모두 생략해야 하고, 각각의 값이gc_thresh1 < gc_thresh2 < gc_thresh3를 충족해야 합니다. NodeClass 관리가 둘 중 한 개의 규칙을 위반하는 구성을 거부합니다. -
net.ipv4.tcp_congestion_control–cubic및reno만 허용됩니다.