안녕하세요. Gameeye에서 deeplol.gg 서비스를 개발 중인 김철기입니다.
클라우드 서버 인프라 구축, 백엔드 개발, 딥러닝 모델 연구를 담당하고 있습니다.
해당 포스팅은 AWS EKS 클러스터 기반에서 Kubeflow를 사용하기 위한 과정을 다룬 시리즈 중 첫번째 포스팅입니다.
AWS EKS 클러스터 구축 단계까지만 다룰 예정이니 Kubeflow 설치 방법과 관련된 내용은 다음 포스팅을 참고해주세요.
시리즈
AWS 공식 페이지에서 소개하는 EKS의 설명은 아래와 같습니다.
Amazon EKS는 자체 Kubernetes 제어 플레인을 설치 및 운영할 필요 없이 AWS에서 Kubernetes를 쉽게 사용할 수 있도록 해주는 관리형 서비스입니다.
AWS CLI 환경에서 계정 권한으로 EKS Cluster 등 Application을 사용하기 위한 서버입니다.
해당 포스팅에서 사용되는 Bastion Server는 아래와 같습니다.
AWS Console에서 버튼 클릭으로 간단하게 생성이 가능합니다.
CLI환경에서 Kubernetes를 관리하기 위한 프로그램입니다.
클러스터의 구성, Application의 배포 및 검사, 리소스 관리, 로그 확인 등의 기능이 있습니다.
클러스터 노드들의 마이너 버전 차이가 0.2이상 벌어지면 오류가 발생할 수 있습니다.
설치 방법 참고
curl -LO https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/$ kubectl
kubectl version --client
AWS 계정 권한으로 AWS Application을 관리하기 위해 설치합니다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
aws --version
IAM을 사용하여 Kubernetes 클러스터에 인증을 제공하기 위해 설치
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
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
AWS EKS 클러스터 구축을 위한 프로그램입니다.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
$ echo 'yq() {
docker run --rm -i -v "${PWD}":/workdir mikefarah/yq yq "$@"}' | tee -a ~/.bashrc && source ~/.bashrc
sudo yum -y install jq gettext bash-completion moreutils
echo 'export LBC_VERSION="v2.0.0"' >> ~/.bash_profile
. ~/.bash_profile
Bastion Server가 관리자 권한으로 AWS Application에 접근할 수 있도록 IAM Role을 부여해야 합니다.
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
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
aws sts get-caller-identity --query Arn | grep eksworkshop-admin-i -q && echo "IAM role valid" || echo "IAM role NOT valid"
해당 포스팅에서는 EC2를 노드로 구성하는 방법으로 진행됩니다.
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-keygen -t rsa
cat .ssh/id_rsa.pub
eksctl create cluster -f cluster.yaml
kubectl get nodes
해당 포스트에서는 Kubeflow 설치를 위한 AWS EKS 클러스터 구성까지 진행하였습니다.
개인적으로 EKS 생성 부분의 주의사항을 참고하시면 제가 했던 삽질을 안하실 수 있으실거라 생각됩니다.
다음 포스팅에서는 Kubeflow 설치를 진행해보겠습니다.