하이브리드 노드용 애드온 구성

하이브리드 노드용 애드온 구성

Amazon EKS Hybrid Nodes에서 AWS 애드온과 커뮤니티 애드온을 실행할 때의 고려 사항을 설명합니다.

출처: 문서

본문

이 페이지는 Amazon EKS Hybrid Nodes에서 AWS 애드온과 커뮤니티 애드온을 실행할 때의 고려 사항을 설명합니다. Amazon EKS 애드온과 클러스터에서 애드온을 생성, 업그레이드, 제거하는 프로세스에 대해 자세히 알아보려면 Amazon EKS add-ons를 참조하세요. 이 페이지에 달리 명시되지 않는 한, Amazon EKS 애드온의 생성, 업그레이드, 제거 프로세스는 하이브리드 노드가 있는 Amazon EKS 클러스터도 AWS 클라우드에서 실행되는 노드가 있는 Amazon EKS 클러스터와 동일합니다. 이 페이지에 포함된 애드온만 Amazon EKS Hybrid Nodes와의 호환성이 검증되었습니다.

다음 AWS 애드온은 Amazon EKS Hybrid Nodes와 호환됩니다.

AWS 애드온 호환 애드온 버전
kube-proxy v1.25.14-eksbuild.2 이상
CoreDNS v1.9.3-eksbuild.7 이상
AWS Distro for OpenTelemetry(ADOT) v0.102.1-eksbuild.2 이상
CloudWatch Observability agent v2.2.1-eksbuild.1 이상
EKS Pod Identity Agent v1.3.3-eksbuild.1 이상(Bottlerocket 제외), Bottlerocket은 v1.3.7-eksbuild.2 이상
Node monitoring agent v1.2.0-eksbuild.1 이상
CSI snapshot controller v8.1.0-eksbuild.1 이상
AWS Private CA Connector for Kubernetes v1.6.0-eksbuild.1 이상
Amazon FSx CSI driver v1.7.0-eksbuild.1 이상
AWS Secrets Store CSI Driver provider v2.1.1-eksbuild.1 이상

다음 커뮤니티 애드온은 Amazon EKS Hybrid Nodes와 호환됩니다. 커뮤니티 애드온에 대한 자세한 내용은 Community add-ons를 참조하세요.

커뮤니티 애드온 호환 애드온 버전
Kubernetes Metrics Server v0.7.2-eksbuild.1 이상
cert-manager v1.17.2-eksbuild.1 이상
Prometheus Node Exporter v1.9.1-eksbuild.2 이상
kube-state-metrics v2.15.0-eksbuild.4 이상
External DNS v0.19.0-eksbuild.1 이상

위 표의 Amazon EKS 애드온 외에도 Amazon Managed Service for Prometheus Collector와 애플리케이션 Ingress(HTTP) 및 로드 밸런싱(TCP/UDP)용 AWS Load Balancer Controller가 하이브리드 노드와 호환됩니다.

Amazon EKS Hybrid Nodes와 호환되지 않는 AWS 애드온과 커뮤니티 애드온도 있습니다. 이러한 애드온의 최신 버전은 하이브리드 노드에 적용되는 기본 eks.amazonaws.com/compute-type: hybrid 라벨에 대한 반-친화성 규칙이 있습니다. 이는 클러스터에 배포될 때 하이브리드 노드에서 실행되지 않도록 방지합니다. 하이브리드 노드와 AWS 클라우드에서 실행되는 노드가 모두 있는 클러스터라면 이러한 애드온을 클러스터의 AWS 클라우드에서 실행되는 노드에 배포할 수 있습니다. Amazon VPC CNI는 하이브리드 노드와 호환되지 않으며, Cilium과 Calico가 Amazon EKS Hybrid Nodes의 CNI(Container Networking Interface)로 지원됩니다. 자세한 내용은 하이브리드 노드용 CNI 구성을 참조하세요.

AWS 애드온

다음 섹션에서는 호환 AWS 애드온을 하이브리드 노드에서 실행하는 것과 다른 Amazon EKS 컴퓨팅 유형의 차이점을 설명합니다.

kube-proxy 및 CoreDNS

EKS는 AWS API와 AWS SDK(또는 AWS CLI)로 EKS 클러스터를 만들 때 kube-proxy와 CoreDNS를 기본적으로 자체 관리형 애드온으로 설치합니다. 클러스터 생성 후 이러한 애드온을 Amazon EKS 애드온으로 덮어쓸 수 있습니다. Amazon EKS 클러스터에서 kube-proxy 관리 및 CoreDNS용 CoreDNS 관리에 대한 자세한 내용은 EKS 문서를 참조하세요. 하이브리드 노드와 AWS 클라우드의 노드가 모두 있는 혼합 모드 클러스터를 실행한다면 하이브리드 노드에 CoreDNS 복제본을 최소 1개, AWS 클라우드의 노드에 CoreDNS 복제본을 최소 1개 가질 것을 AWS는 권장합니다. 구성 단계는 CoreDNS 복제본 구성을 참조하세요.

CloudWatch Observability agent

CloudWatch Observability agent 운영자는 웹훅을 사용합니다. 하이브리드 노드에서 운영자를 실행한다면 온프레미스 Pod CIDR이 온프레미스 네트워크에서 라우팅 가능해야 하고 원격 Pod 네트워크로 EKS 클러스터를 구성해야 합니다. 자세한 내용은 하이브리드 노드용 웹훅 구성을 참조하세요.

노드 수준 메트릭은 CloudWatch Container Insights가 노드 수준 메트릭에 IMDS(Instance Metadata Service)의 가용성에 의존하기 때문에 하이브리드 노드에서는 사용할 수 없습니다. 클러스터, 워크로드, Pod, 컨테이너 수준 메트릭은 하이브리드 노드에서 사용할 수 있습니다.

Amazon CloudWatch Observability으로 CloudWatch 에이전트 설치에 설명된 단계에 따라 애드온을 설치한 후, 에이전트가 하이브리드 노드에서 성공적으로 실행되려면 애드온 매니페스트를 업데이트해야 합니다. 아래와 같이 RUN_WITH_IRSA 환경 변수를 추가하려면 클러스터의 amazoncloudwatchagents 자원을 편집하세요.

kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
apiVersion: v1
items:
- apiVersion: cloudwatch.aws.amazon.com/v1alpha1
  kind: AmazonCloudWatchAgent
  metadata:
    ...
    name: cloudwatch-agent
    namespace: amazon-cloudwatch
    ...
  spec:
    ...
    env:
    - name: RUN_WITH_IRSA # private cluster endpoint access.

Amazon Managed Service for Prometheus 사용자 가이드의 Using an AWS managed collector 단계를 따르세요.

AWS Distro for OpenTelemetry(ADOT)

AWS Distro for OpenTelemetry(ADOT) 애드온을 사용하여 하이브리드 노드에서 실행되는 애플리케이션의 메트릭, 로그, 추적 데이터를 수집할 수 있습니다. ADOT는 admission 웹훅을 사용하여 Collector Custom Resource 요청을 변경(mutate)하고 검증(validate)합니다. 하이브리드 노드에서 ADOT 운영자를 실행한다면 온프레미스 Pod CIDR이 온프레미스 네트워크에서 라우팅 가능해야 하고 원격 Pod 네트워크로 EKS 클러스터를 구성해야 합니다. 자세한 내용은 하이브리드 노드용 웹훅 구성을 참조하세요.

AWS Distro for OpenTelemetry 문서의 EKS Add-Ons로 AWS Distro for OpenTelemetry 시작하기(Getting Started with AWS Distro for OpenTelemetry using EKS Add-Ons) 단계를 따르세요.

AWS Load Balancer Controller

하이브리드 노드의 워크로드에 대해 AWS Load Balancer Controller와 Application Load Balancer(ALB) 또는 Network Load Balancer(NLB)(대상 유형 ip)를 사용할 수 있습니다. ALB 또는 NLB와 함께 사용하는 IP 대상은 AWS에서 라우팅 가능해야 합니다. AWS Load Balancer Controller도 웹훅을 사용합니다. 하이브리드 노드에서 AWS Load Balancer Controller 운영자를 실행한다면 온프레미스 Pod CIDR이 온프레미스 네트워크에서 라우팅 가능해야 하고 원격 Pod 네트워크로 EKS 클러스터를 구성해야 합니다. 자세한 내용은 하이브리드 노드용 웹훅 구성을 참조하세요.

AWS Load Balancer Controller를 설치하려면 AWS Application Load Balancer 또는 AWS Network Load Balancer의 단계를 따르세요.

ALB로 Ingress를 사용하려면 아래 어노테이션을 지정해야 합니다. 자세한 내용은 Application Load Balancers로 애플리케이션 및 HTTP 트래픽 라우팅을 참조하세요.

alb.ingress.kubernetes.io/target-type: ip

NLB로 로드 밸런싱을 사용하려면 아래 어노테이션을 지정해야 합니다. 자세한 내용은 Network Load Balancers로 TCP 및 UDP 트래픽 라우팅을 참조하세요.

service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"

EKS Pod Identity Agent

참고

Bottlerocket을 실행하는 하이브리드 노드에 EKS Pod Identity Agent 애드온을 성공적으로 배포하려면 Bottlerocket 버전이 최소 v1.39.0인지 확인하세요. Pod Identity Agent는 하이브리드 노드 환경의 이전 Bottlerocket 버전에서는 지원되지 않습니다.

원래 Amazon EKS Pod Identity Agent DaemonSet은 필요한 AWS 자격 증명을 얻기 위해 노드의 EC2 IMDS 가용성에 의존합니다. 하이브리드 노드에서는 IMDS를 사용할 수 없으므로 버전 1.3.3-eksbuild.1부터 Pod Identity Agent 애드온은 필요한 자격 증명을 마운트하는 DaemonSet을 선택적으로 배포합니다. Bottlerocket을 실행하는 하이브리드 노드는 자격 증명을 마운트하는 다른 방법이 필요하며, 버전 1.3.7-eksbuild.2부터 Pod Identity Agent 애드온은 Bottlerocket 하이브리드 노드를 특별히 대상으로 하는 DaemonSet을 선택적으로 배포합니다. 다음 섹션은 선택적 DaemonSet을 활성화하는 과정을 설명합니다.

Ubuntu/RHEL/AL2023

Ubuntu/RHEL/AL2023 하이브리드 노드에서 Pod Identity 에이전트를 사용하려면 아래와 같이 nodeadm 구성의 hybrid 섹션에 enableCredentialsFile: true를 설정하세요.

apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
    hybrid:
        enableCredentialsFile: true # 각 노드에서 nodeConfig.yaml로 다음 nodeadm init 명령을 실행하여 하이브리드 노드를 Amazon EKS 클러스터에 조인하세요. 노드가 이전에 클러스터에 조인했다면 nodeadm init 명령을 다시 실행하세요.
nodeadm init -c file://nodeConfig.yaml

AWS CLI 또는 AWS Management Console을 사용하여 하이브리드 노드 지원을 활성화한 상태로 eks-pod-identity-agent를 설치합니다.

  • AWS CLI — 클러스터를 관리하는 머신에서 다음 명령을 실행하여 하이브리드 노드 지원을 활성화한 상태로 eks-pod-identity-agent를 설치합니다. my-cluster를 클러스터 이름으로 바꾸세요.
aws eks create-addon \
    --cluster-name my-cluster \
    --addon-name eks-pod-identity-agent \
    --configuration-values '{"daemonsets":{"hybrid":{"create": true}}}'
  • AWS Management Console — AWS 콘솔을 통해 Pod Identity Agent 애드온을 설치한다면 하이브리드 노드를 대상으로 하는 DaemonSet을 배포하려면 선택적 구성에 다음을 추가하세요.
{"daemonsets":{"hybrid":{"create": true}}}

Bottlerocket

Bottlerocket 하이브리드 노드에서 Pod Identity 에이전트를 사용하려면 Bottlerocket으로 하이브리드 노드 연결에 설명된 대로 Bottlerocket 부트스트랩 컨테이너 사용자 데이터에 사용되는 명령에 --enable-credentials-file=true 플래그를 추가하세요.

SSM 자격 증명 공급자를 사용한다면 명령이 다음과 같아야 합니다.

eks-hybrid-ssm-setup --activation-id=<id> --activation-code=<code> --region=<region> --enable-credentials-file=true

IAM Roles Anywhere 자격 증명 공급자를 사용한다면 명령이 다음과 같아야 합니다.

eks-hybrid-iam-ra-setup --certificate=<cert> --key=<key> --enable-credentials-file=true

이렇게 하면 부트스트랩 스크립트가 노드의 /var/eks-hybrid/.aws/credentials 아래에 자격 증명 파일을 만들도록 구성되며, 이 파일은 eks-pod-identity-agent Pod가 사용합니다. 이 자격 증명 파일에는 주기적으로 갱신되는 임시 AWS 자격 증명이 포함됩니다.

AWS CLI 또는 AWS Management Console을 사용하여 Bottlerocket 하이브리드 노드 지원을 활성화한 상태로 eks-pod-identity-agent를 설치합니다.

  • AWS CLI — 클러스터를 관리하는 머신에서 다음 명령을 실행하여 Bottlerocket 하이브리드 노드 지원을 활성화한 상태로 eks-pod-identity-agent를 설치합니다. my-cluster를 클러스터 이름으로 바꾸세요.
aws eks create-addon \
    --cluster-name my-cluster \
    --addon-name eks-pod-identity-agent \
    --configuration-values '{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}'
  • AWS Management Console — AWS 콘솔을 통해 Pod Identity Agent 애드온을 설치한다면 Bottlerocket 하이브리드 노드를 대상으로 하는 DaemonSet을 배포하려면 선택적 구성에 다음을 추가하세요.
{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}

CSI snapshot controller

버전 v8.1.0-eksbuild.2부터 CSI snapshot controller 애드온은 하이브리드 노드에 대한 소프트 반-친화성 규칙을 적용하여 컨트롤러 deployment가 Amazon EKS 컨트롤 플레인과 같은 AWS 리전의 EC2에서 실행되는 것을 선호합니다. deployment를 Amazon EKS 컨트롤 플레인과 같은 AWS 리전에 배치하면 지연 시간이 개선됩니다.

커뮤니티 애드온

다음 섹션에서는 호환 커뮤니티 애드온을 하이브리드 노드에서 실행하는 것과 다른 Amazon EKS 컴퓨팅 유형의 차이점을 설명합니다.

Kubernetes Metrics Server

컨트롤 플레인은 Metrics Server의 Pod IP(hostNetwork가 활성화된 경우 노드 IP)에 도달해야 합니다. 따라서 Metrics Server를 hostNetwork 모드로 실행하지 않는 한 Amazon EKS 클러스터를 만들 때 원격 Pod 네트워크를 구성해야 하고 Pod IP 주소를 라우팅 가능하게 만들어야 합니다. CNI로 BGP(Border Gateway Protocol)를 구현하는 것이 Pod IP 주소를 라우팅 가능하게 만드는 일반적인 방법 중 하나입니다.

cert-manager

cert-manager는 웹훅을 사용합니다. 하이브리드 노드에서 cert-manager를 실행한다면 온프레미스 Pod CIDR이 온프레미스 네트워크에서 라우팅 가능해야 하고 원격 Pod 네트워크로 EKS 클러스터를 구성해야 합니다. 자세한 내용은 하이브리드 노드용 웹훅 구성을 참조하세요.

더 알아보기 (Learn more)