본문 바로가기

Docker & Kubenetes

MLOps를 위한 EKS 클러스터 구축 - 1 (with. Kubeflow)

본 포스팅은 MLOps 환경을 위해 EKS에 Kubeflow를 설치하기 위한 과정은 담았습니다.

구축 프로세스

1. EKS 생성

2. EKS에 접근하기 위한 EC2 생성

3. EKS Cluster에 접근하기 위한 IAM을 생성하고 Role을 부여

4. EKS Cluster에 접근하기 위한 Kubectl, AWS CLI 등을 EC2에 설치 후 접근 확인

5. EKS에 Kubeflow 설치


EKS 생성

클러스터 구성

이름 : test_kubeflow_eks

클러스터 버전 : 1.29v (2025년 3월 23일 표준 지원 종료)

클러스터 인증 모드 : EKS API 및 ConfigMap

네트워킹 지정

VPC : default

Subnet : default-01a, default-01c

보안그룹 : default

클러스터 엔드포인트 액세스 : Private

관찰성 구성 : 비활성

추가 기능 선택

CoreDNS : v1.11.1

Kube-proxy : v1.29.0

Amazon VPC CNI : 1.16.0

Amazon EKS Pod Identity 에이전트 : v1.2.0


EKS에 접근하기 위한 EC2 생성

이름 : test_kubeflow_eks_admin

이미지 : Ubuntu 22.04LTS

타입 : t3.medium

키 페어 유형 : ED25519 (22.04LTS 버전부터 RSA 형식의 키페어 미지원)

VPC : default

보안그룹 : default

스토리지 구성 : / 30GiB


IAM 생성

일단 IAM은 테스트 구축이다 보니.. 대충 필요해보이는거 넣고 구축하며 추가하는 형식으로 진행함

 

사용자 명 : kubeflow_eks_admin

권한 정책 : 

AmazonEKS_CNI_Policy
AmazonEKSClusterPolicy
AmazonEC2FullAccess

 

AWS CLI 사용을 위한 액세스 키 생성 후 .csv 파일 다운로드 -> 백업


Install kubectl, AWS CLI

kubectl 설치

AWS kubectl Install docs

kubectl은 Amazon EKS Cluster와 마이너 버전 차이가 1 이하인 버전을 사용해야 함

ex) kubectl 버전이 1.28일 경우, EKS Cluster 버전이 1.27 ~ 1.29 버전과 작동

# kubectl 최신버전 설치
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.29.0/2024-01-04/bin/linux/amd64/kubectl

# 퍼미션 변경
chmod +x ./kubectl

# path 지정
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH

# 설치한 kubectl 버전 확인
kubectl version

AWS CLI 설치

AWS CLI Install docs

# AWS CLI 설치
apt install awscli -y

# 버전 확인
aws --version

AWS Configure 설정

# AWS Configure 설정
aws configure

#AWS Access Key ID: 위에서 IAM 생성 시 만든 access key
#AWS Secret Access Key: 위에서 IAM 생성 시 만든 secret key
#Default region name: ap-northeast-2
#Default output format: json

aws-iam-authenticator 설치

# aws-iam-authenticator 설치
curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/aws-iam-authenticator

# 권한 설정
chmod +x ./aws-iam-authenticator

# Path 설정
mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH

# 환경 변수 추가
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc

# 아래 명령어로 토큰값이 정상 출력되면 성공
aws-iam-authenticator token -i {클러스터 이름} | python3 -m json.tool

kubectl을 사용하기 위한 config 설정

aws eks --region {리전} update-kubeconfig --name {클러스터 이름}

 명령어를 실행하면 다음과 같은 에러가 발생 함

이유는, IAM에 DescribeCluster 권한이 없기 때문, AmazonEKSWorkerNodePolicy 권한에 해당 규칙이 포함되어 있으니 추가하자...

추가하고 다시 명령어를 실행하면 설정이 완료된다.


(옵션) MFA 설정

IAM -> 사용자 -> 보안자격증명 -> 멀티 팩터 인증(MFA) -> MFA 디바이스 할당

# 할당한 MFA의 ARN을 복사 후 아래 양식으로 기입

aws sts get-session-token \
 --serial-number {MFA Device의 ARN} \
 --token-code {6자리 MFA 번호} \
 --profile {사용할 profile 명} \
 --duration-seconds 86400
 
# --profile 명은 옵션이라 default 계정이면 빼고 입력
# 이후 나오는 결과 값을 ~/.aws/credentials 에 기입하면 된다.

# 결과 예시
{
    "Credentials": {
        "AccessKeyId": "ASIAZJ3****",
        "SecretAccessKey": "56tyuMw****",
        "SessionToken": "IQoJb3JpZ2luX2VjEPj//////////wEaDmFwLW****koNfxmmrs=",
        "Expiration": "2024-04-22T08:08:42+00:00"
    }
}

~/.aws/credentials 파일에 profile 추가

aws cli 사용할 때 aws {command} --profile=mfa 로 호출

'Docker & Kubenetes' 카테고리의 다른 글

Kubernetes Service  (0) 2024.05.14
MLOps를 위한 EKS 클러스터 구축 - 2 (with. Kubeflow)  (0) 2024.04.26
Deployments 와 StatefulSets  (0) 2024.04.17
Kubernetes - Cluster Node 제거  (1) 2024.02.01
Kubernetes - Static Pod  (0) 2024.01.12