Ssoon
AWS EKS - 최적화 AMI 본문
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 클러스터를 실행하고 관리하기 위한 필수 구성 요소와 도구가 미리 설치
- Kubernetes와 관련된 필수 소프트웨어 구성 요소 및 도구의 사전 설치 및 구성
- Amazon EKS 관련 최신 업데이트 및 보안 패치가 적용된 운영 체제
- EKS 클러스터에 적합한 네트워크 설정과 호환되는 네트워크 드라이버 및 설정
- EKS와 통합되는 AWS CLI, Kubernetes CLI(kubectl) 등의 도구
- 인스턴스 용량 증가, 자동 복구, 자동 확장 등과 같은 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
- kubelet
💠 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를 관리하고 활용하기 위한 도구
- GPU 노드 노출 (Exposing GPU Nodes):
- NVIDIA 디바이스 플러그인은 각 노드의 GPU 수를 노출합니다.
- 쿠버네티스 클러스터 내의 모든 노드에서 GPU 수를 확인할 수 있습니다.
- GPU 상태 추적 (Tracking GPU Health):
- GPU의 상태를 지속적으로 추적하여 이상 상태를 감지합니다.
- GPU의 건강 상태를 모니터링하고 필요한 조치를 취할 수 있습니다.
- GPU 활성화 (Running GPU Jobs):
- 쿠버네티스 클러스터 내에서 GPU 활성화된 컨테이너를 실행할 수 있습니다.
- 딥 러닝, 그래픽 작업, 기계 학습 등 GPU를 활용하는 워크로드를 실행할 수 있습니다.
- GPU 노드 노출 (Exposing GPU Nodes):
- Kubernetes 클러스터 내에서 NVIDIA 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