AWS EKS 클러스터에서 Kubeflow 사용하기 - AWS EKS 구축하기

김철기·2022년 2월 11일
1

Kubeflow

목록 보기
1/3
post-thumbnail

안녕하세요. Gameeye에서 deeplol.gg 서비스를 개발 중인 김철기입니다.
클라우드 서버 인프라 구축, 백엔드 개발, 딥러닝 모델 연구를 담당하고 있습니다.

해당 포스팅은 AWS EKS 클러스터 기반에서 Kubeflow를 사용하기 위한 과정을 다룬 시리즈 중 첫번째 포스팅입니다.
AWS EKS 클러스터 구축 단계까지만 다룰 예정이니 Kubeflow 설치 방법과 관련된 내용은 다음 포스팅을 참고해주세요.

시리즈

  • AWS EKS 클러스터 구축하기
  • Kubeflow 설치하기
  • Kubeflow 예제 실행해보기

AWS EKS

AWS 공식 페이지에서 소개하는 EKS의 설명은 아래와 같습니다.

Amazon EKS는 자체 Kubernetes 제어 플레인을 설치 및 운영할 필요 없이 AWS에서 Kubernetes를 쉽게 사용할 수 있도록 해주는 관리형 서비스입니다.

Bastion Server

AWS CLI 환경에서 계정 권한으로 EKS Cluster 등 Application을 사용하기 위한 서버입니다.
해당 포스팅에서 사용되는 Bastion Server는 아래와 같습니다.

  • Image: Amazon Linux 2 AMI
  • Region: Seoul region ap-northeast-2
  • Instance: t2.micro

AWS Console에서 버튼 클릭으로 간단하게 생성이 가능합니다.

kubectl

CLI환경에서 Kubernetes를 관리하기 위한 프로그램입니다.
클러스터의 구성, Application의 배포 및 검사, 리소스 관리, 로그 확인 등의 기능이 있습니다.
클러스터 노드들의 마이너 버전 차이가 0.2이상 벌어지면 오류가 발생할 수 있습니다.
설치 방법 참고

  • 최신 버전의 kubectl를 다운로드
curl -LO https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
  • kubectl 파일에 실행권한 부여
chmod +x ./kubectl
  • kubectl 파일을 바이너리 폴더로 이동
sudo mv ./kubectl /usr/local/bin/$ kubectl 
  • kubectl 버전 확인
kubectl version --client

AWS CLI

AWS 계정 권한으로 AWS Application을 관리하기 위해 설치합니다.

  • AWS CLI2 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
  • AWS CLI 버전 확인
aws --version

aws-iam-authenticator

IAM을 사용하여 Kubernetes 클러스터에 인증을 제공하기 위해 설치

  • S3에서 aws-iam-authenticator 바이너리 파일 설치
curl -o aws-iam-authenticator https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/aws -iam-authenticator
  • 실행권한 부여
chmod +x ./aws-iam-authenticator 
  • 바이너리 파일을 $HOME/bin 위치로 이동
mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$PATH:$HOME/bin
  • 환경변수 추가
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  • 실행 확인
aws-iam-authenticator help

eksctl

AWS EKS 클러스터 구축을 위한 프로그램입니다.

  • 최신버전 설치
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  • 바이너리 파일을 /usr/local/bin 위치로 이동
sudo mv /tmp/eksctl /usr/local/bin 
  • 버전 확인
eksctl version

yq 설치

$ echo 'yq() {
  docker run --rm -i -v "${PWD}":/workdir mikefarah/yq yq "$@"}' | tee -a ~/.bashrc && source ~/.bashrc

jq 설치

sudo yum -y install jq gettext bash-completion moreutils

AWS LBC 버전 설정

echo 'export LBC_VERSION="v2.0.0"' >>  ~/.bash_profile
.  ~/.bash_profile

IAM Role

Bastion Server가 관리자 권한으로 AWS Application에 접근할 수 있도록 IAM Role을 부여해야 합니다.

  • IAM - 역할 - 역할 만들기
  • 일반 사용 사례: EC2 선택
  • AdministratorAccess 검색 후 선택
  • 역할 이름 입력 후 역할 생성
  • EC2 콘솔로 이동하여 Bastion Server의 IAM Role을 생성한 Role로 수정
    작업 - 보안 - IAM 역할 수정
  • Bastion Server에 .aws/credentials 파일이 있다면 삭제
  • AWS REGION이 불러와지는지 확인
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set
  • AWS 계정 정보를 환경병수로 설정
echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile
aws configure set default.region ${AWS_REGION}
aws configure get default.region
  • IAM Role이 제대로 등록됐는지 확인
aws sts get-caller-identity --query Arn | grep eksworkshop-admin-i -q && echo "IAM role valid" || echo "IAM role NOT valid"

EKS 생성

해당 포스팅에서는 EC2를 노드로 구성하는 방법으로 진행됩니다.

  • 생성할 클러스터 정보가 들어있는 cluster.yaml 파일을 생성
apiVersion: eksctl.io/v1alpha5 
kind: ClusterConfig

metadata:
  name: kube-test
  region: ap-northeast-2 
  version: '1.20'

nodeGroups:
- name: cpu-nodegroup
  instanceType: m5.xlarge 
  desiredCapacity: 3
  minSize: 0
  maxSize: 6
  volumeSize: 20 
  ssh:
    allow: true
    publicKeyPath: '~/.ssh/id_rsa.pub'

주의사항

  • yaml 파일은 들여쓰기가 중요합니다. 주의해서 작성해주세요.
  • 포스팅 작성시점 기준 EKS에서 지원하는 Kubernetes 최신 버전은 1.21입니다. 1.21 버전은 jwt 호환성 문제가 있습니다. 1.21 버전으로 진행하셔도 좋으나 호환성 문제 해결을 별도로 진행해주셔야 합니다.
    Auth Dex 에러 해결 : 참고
  • 클러스터 구성 노드가 낮은 스펙인 경우 추후 kubeflow 설치에 문제가 발생할 수 있습니다.
    (t2.micro 인스턴스에서 문제 발생)
  • ssh key를 생성
ssh-keygen -t rsa
cat .ssh/id_rsa.pub 
  • eksctl 명령어를 사용하여 EKS 클러스터 구성(구성까지 수분이 걸릴 수 있습니다.)
eksctl create cluster -f cluster.yaml 
  • 노드 상태 확인
kubectl get nodes 

정리

해당 포스트에서는 Kubeflow 설치를 위한 AWS EKS 클러스터 구성까지 진행하였습니다.
개인적으로 EKS 생성 부분의 주의사항을 참고하시면 제가 했던 삽질을 안하실 수 있으실거라 생각됩니다.
다음 포스팅에서는 Kubeflow 설치를 진행해보겠습니다.

profile
Deepveloper, deeplol.gg, fleaman.shop

0개의 댓글