Ssoon

AWS EKS - 최적화 AMI 본문

AWS EKS Workshop Study 2기

AWS EKS - 최적화 AMI

구구달스 2024. 3. 9. 08:50

 

CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 1주차

 

 EKS Node

  • 컨테이너화된 애플리케이션을 실행하는 시스템
  • 각 노드에는 다음의 구성 요소 포함: 
    • 컨테이너 런타임 – 컨테이너 실행을 담당하는 소프트웨어
    • kubelet – 컨테이너가 정상 상태이고 연결된 Pod 내에서 실행되고 있는지 확인
    • kube-proxy – Pods에 대한 통신을 허용하는 네트워크 규칙을 유지/관리

 

사전 구축된 Amazon EKS 최적화 Amazon Machine Image(AMI) 또는 사용자 지정 AMI를 사용하여 노드를 배포할 수 있습니다

 

Amazon Elastic Kubernetes Service (EKS)에서 사용하기 위해 특별히 최적화된 Amazon Machine Image (AMI)

  • Kubernetes 클러스터를 실행하고 관리하기 위한 필수 구성 요소와 도구가 미리 설치
    1. Kubernetes와 관련된 필수 소프트웨어 구성 요소 및 도구의 사전 설치 및 구성
    2. Amazon EKS 관련 최신 업데이트 및 보안 패치가 적용된 운영 체제
    3. EKS 클러스터에 적합한 네트워크 설정과 호환되는 네트워크 드라이버 및 설정
    4. EKS와 통합되는 AWS CLI, Kubernetes CLI(kubectl) 등의 도구
    5. 인스턴스 용량 증가, 자동 복구, 자동 확장 등과 같은 EKS 클러스터의 확장성과 신뢰성을 향상시키는 기능
Amazon EKS 최적화 AMI를 사용하면 Kubernetes 클러스터를 효율적으로 배포하고 관리할 수 있습니다. 이 AMI는 EKS에서 지원하는 다양한 인스턴스 유형에 최적화되어 있으며, 클러스터의 안정성과 성능을 향상시키는 데 도움이 됩니다.

 

AMI (Amazon Machine Image)
인스턴스를 시작하는 데 필요한 정보를 제공하는 AWS에서 지원되고 유지 관리되는 이미지

 

 

 Amazon EKS 최적화 Amazon Linux AMI

  • Amazon Linux 2(AL2) 및 Amazon Linux 2023(AL2023) 기반
  • Amazon EKS와 연동하도록 구성되며 다음과 같은 구성 요소가 포함
    • kubelet
    • AWS IAM Authenticator
    • Docker (Amazon EKS 버전 1.23 이하)
    • containerd

 

💠 Amazon Linux 2023(AL2023) 

  • AL2023은 YAML 구성 스키마를 사용하는 새로운 노드 초기화 프로세스 nodeadm을 도입합니다. 
    • 자체 관리 노드 그룹 또는 시작 템플릿이 있는 AMI를 사용하는 경우, 이제 새 노드 그룹을 만들 때 추가 클러스터 메타데이터를 명시적으로 제공해야 합니다. 
    • 최소 필수 매개변수의 예는 다음과 같으며, 이제 apiServerEndpoint, certificateAuthority 및 서비스 cidr이 필요합니다:
※ nodeadm
Kubernetes 클러스터의 노드를 초기화하고 조인하는 작업을 단순화하는 노드관리 도구
초기화 (Init):nodeadm init 명령을 사용하여 EKS 클러스터의 노드를 초기화합니다.(AL2023 기반 EKS AMI에서 자동으로 수행)
  • 모든 Amazon EKS 버전에 대해 Docker가 지원되지 않습니다. (Docker에 대한 지원은 AL2에서 Amazon EKS 버전 1.24 이상에서 종료되어 제거)
  • Amazon VPC CNI 버전 1.16.2 이상이 필요
  • 기본적으로 IMDSv2를 요구하여 보안 강화.
    • 세션 지향 인증 방법 : 간단한 HTTP PUT 요청을 통해 세션을 시작하고, 비밀 토큰을 사용하여 클라이언트와 서버 간의 세션을 관리
※ IMDS (Instance Metadata Service)
AWS 클라우드에서 실행되는 인스턴스에 대한 메타데이터를 제공하는 서비스
  •  cgroupv2를 특징으로 합니다.
cgroupv2
cgroupv2는 프로세스 그룹을 관리하기 위한 리눅스 커널의 기능으로, 리소스 제한, 우선 순위 설정, 리소스 모니터링 등을 효과적으로 처리, 이전의 cgroups 버전에 비해 더 유연하고 강력한 기능을 제공

 

💠 실습

  • EKS 클러스터 생성
eksctl create cluster --name=eksdemo1 \
--region=ap-northeast-2 \
--zones=ap-northeast-2a,ap-northeast-2c \
--version 1.29 \
--without-nodegroup

  • node를 생성해 보려고 했으니 아직 eksctl 을 통해서 AmazonLinux2023 으로 node를 생성할수 없는 것 같습니다.
  • (아래 지원 목록에 아직 확인되지 않음)

  • eksctl - node AMI Family 지원 목록
    • 기본으로 AmazonLinux2 설정되어 있음

 

https://eksctl.io/usage/custom-ami-support/#setting-the-node-ami-id

 

Custom AMI support - eksctl

The official CLI for Amazon EKS

eksctl.io

 

 Amazon EKS에 최적화된 가속화된 Amazon Linux AMI

  • Amazon EKS에 최적화된 Amazon Linux AMI 위에 구축
  • Amazon EKS 노드에 대한 옵션 이미지로 제공되어 GPU , Inferentia 및 Trainium 기반 워크로드를 지원하도록 구성
  • 다음을 포함:
    • NVIDIA drivers
    • The nvidia-container-runtime (as the default runtime)
    • AWS Neuron container runtime
※ Inferentia
아마존 웹 서비스(AWS)가 제공하는 AI 가속기로, 딥 러닝 추론(Inference) 작업을 가속화하는 데 사용
※Trainium
아마존 웹 서비스(AWS)에서 제공하는 딥 러닝 훈련을 위한 사용자 지정 AI 가속기

 

 

아래의 실습은 GPU 노트 타입이 생성이 되지 않아 몇일을 삽질하다가 포기

->  프리티어에서 GPU 타입 생성이 안되는것을 모르고 삽질  -> 할당량 증가요청중 -> 증가되면 업데이트 

 

💠 실습

  • EKS 클러스터 생성
eksctl create cluster --name=eksdemo1 \
--region=ap-northeast-2 \
--zones=ap-northeast-2a,ap-northeast-2c \
--version 1.29 \
--without-nodegroup
  • 노드 그룹 생성
eksctl create nodegroup \
  --cluster eksdemo1 \
  --name eksdemo1-nodes \
  --node-type g4dn.xlarge \
  --nodes 2 \
  --nodes-min 2 \
  --nodes-max 2 \
  --ssh-access \
  --ssh-public-key kube-demo

 

  • GPU 기반 워크로드를 활성화
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.5/nvidia-device-plugin.yml

  • GPU 노드가 클러스터에 조인하면 클러스터에서 Kubernetes용 NVIDIA 디바이스 플러그 인을 DaemonSet(으)로 적용해야 합니다. 다음 명령을 실행하기 전에 vX.X.X을(를) 원하는 NVIDIA/k8s-device-plugin 버전으로 교체합니다.
  • Kubernetes용 NVIDIA 디바이스 플러그 인
    • Kubernetes 클러스터 내에서 NVIDIA GPU를 관리하고 활용하기 위한 도구
      1. GPU 노드 노출 (Exposing GPU Nodes):
        • NVIDIA 디바이스 플러그인은 각 노드의 GPU 수를 노출합니다.
        • 쿠버네티스 클러스터 내의 모든 노드에서 GPU 수를 확인할 수 있습니다.
      2. GPU 상태 추적 (Tracking GPU Health):
        • GPU의 상태를 지속적으로 추적하여 이상 상태를 감지합니다.
        • GPU의 건강 상태를 모니터링하고 필요한 조치를 취할 수 있습니다.
      3. GPU 활성화 (Running GPU Jobs):
        • 쿠버네티스 클러스터 내에서 GPU 활성화된 컨테이너를 실행할 수 있습니다.
        • 딥 러닝, 그래픽 작업, 기계 학습 등 GPU를 활용하는 워크로드를 실행할 수 있습니다.
  • nvidia-device-plugin.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: nvidia-device-plugin-ds
    spec:
      tolerations:
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
      containers:
      - image: nvcr.io/nvidia/k8s-device-plugin:v0.14.5
        name: nvidia-device-plugin-ctr
        env:
          - name: FAIL_ON_INIT_ERROR
            value: "false"
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
        - name: device-plugin
          mountPath: /var/lib/kubelet/device-plugins
      volumes:
      - name: device-plugin
        hostPath:
          path: /var/lib/kubelet/device-plugins
  • 노드에 할당 가능한 GPU가 있는지 확인할 수 있습니다.
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

 

'AWS EKS Workshop Study 2기' 카테고리의 다른 글

AWS EKS - Observability - Logging in EKS  (0) 2024.03.30
AWS EKS - Storage - EFS  (2) 2024.03.23
AWS EKS - Storage - EBS  (0) 2024.03.17
AWS EKS - Security Groups for Pods  (0) 2024.03.16
AWS EKS - Network Policies  (2) 2024.03.16
Comments