설치 환경 셋업 및 AWS 계정 생성
목차
자세한 단계
{변수}의 자세한 설명은 Terminology 페이지를 참고하세요
1. 설치 환경 셋업하기
- Docker 환경 설치하기
-
설치 환경이 독립적으로 구성될 수 있도록 Docker Container(Ubuntu)를 이용하는 것을 권장합니다.
export DOCKER_NAME=
# docker 다운로드
docker pull ubuntu:20.04
# docker 실행
docker container run -id -w /home/mellerikat --name ${DOCKER_NAME} ubuntu:20.04
# bash 실행
docker exec -it ${DOCKER_NAME} /bin/bash
# 필요 tool 설치
apt update
apt install git curl unzip tar make sudo vim wget mysql-server jq -y- 추가 필요 tool 설치
-
kubectl
설치하기kubectl
은 Kubernetes 를 컨트롤하기 위해 필요한 명령어 입니다.- 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다.
- (클러스터 버전이
1.28
인 경우kubectl
버전1.27
,1.28
또는1.29
)
- (클러스터 버전이
kubectl
을 설치하거나 업그레이드하려면 kubectl 설치 또는 업데이트 부분을 참조하세요.- 설치환경에서 클러스터와 통신할 수 있도록 구성합니다.
export INFRA_NAME=
export DEPLOY_ENV=
export AWS_CLUSTER_VERSION=
export AWS_CLUSTER_VERSION_STR=`echo ${AWS_CLUSTER_VERSION} | tr '.' '-'`
export AWS_DEFAULT_REGION_ALIAS=
export AWS_CLUSTER_NAME=eks-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-${AWS_CLUSTER_VERSION_STR}-eks-master
aws eks update-kubeconfig --region ${AWS_DEFAULT_REGION} --name ${AWS_CLUSTER_NAME} --alias ${INFRA_NAME}
- 설치환경에서 클러스터와 통신할 수 있도록 구성합니다.
eksctl
설치하기eksctl
은 EKS Cluster 를 컨트롤하기 위해 필요한 명령어 입니다.- Amazon EKS 클러스터를 create 및 describe 할 수 있는 권한이 있는 IAM 보안 주체가 있어야 합니다.
eksctl
을 설치하거나 업그레이드하려면 eksctl 설치 또는 업데이트 부분을 참조하세요.
2. AWS 사용자 계정 등록 및 AWS CLI 설치하기
- 관리자 권한을 가진 AWS 계정이 있다면 이 단계를 건너뜁니다.
- 계정이 없다면 AWS 가입 페이지의 지시에 따라 계정을 생성하세요.
- AWS 계정 정보 확인하기
- 계정 식별자 확인 페이지를 참고해서 계정 식별자(12자리 숫자)를 확인합니다.
export AWS_ACCOUNT_ID=
- AWS 계정의 ACCESS KEY와 SECRET ACCESS KEY를 발급받아야 합니다. 발급을 위한 절차는 IAM 사용자의 액세스 키 관리를 참조 바랍니다.
- 발급한 ACCESS KEY와 SECRET ACCESS KEY, 계정의 region 정보를 변수로 등록합니다.
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export AWS_DEFAULT_REGION=
export AWS_OUTPUT_FORMAT=json
- 계정 식별자 확인 페이지를 참고해서 계정 식별자(12자리 숫자)를 확인합니다.
- AWS CLI 설치하기
- 설치 환경에 AWS CLI를 구성합니다. 자세한 설치 과정은 AWS CLI 설치의 지시를 참고하세요
3. AWS Infra 설정하기
- 설정된 이름은 인프라를 비롯한 모든 자원에 활용됩니다.
하나의 인프라에는 다수의 프로젝트가 포함될 수 있으며, 인프라 이름({INFRA_NAME})과 프로젝트 이름({PROJECT_NAME})은 중복되지 않는것을 권장합니다.
export INFRA_NAME=
# DEPLOY_ENV 는 dev 또는 prod 중 선택
export DEPLOY_ENV= - 설정된 INFRA_NAME 으로 AWS PROFILE을 설정합니다.
{
echo "${AWS_ACCESS_KEY_ID}"
echo "${AWS_SECRET_ACCESS_KEY}"
echo "${AWS_DEFAULT_REGION}"
echo "${AWS_OUTPUT_FORMAT}"
} | aws configure --profile=${INFRA_NAME}
export AWS_PROFILE=${INFRA_NAME}
4. AWS Kubeflow User 생성하기
-
kubeflow 설치 및 운영를 위한 Kubeflow IAM User 생성이 필요합니다.
-
IAM 정책 생성
- s3-{AWS_DEFAULT_REGION_ALIAS}-{INFRA_NAME}-{DEPLOY_ENV}-kubeflow : Kubeflow 운영에 필요한 S3 버킷
- s3-{AWS_DEFAULT_REGION_ALIAS}-{INFRA_NAME}-{DEPLOY_ENV}-aia : mellerikat 운영에 필요한 S3 버킷
[Expand s3-policy.json]
cat <<EOT > s3-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectAttributes",
"s3:GetObjectTagging",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::s3-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-kubeflow",
"arn:aws:s3:::s3-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-kubeflow/*",
"arn:aws:s3:::s3-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-aia",
"arn:aws:s3:::s3-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-aia/*"
]
}
]
}
EOTexport KUBEFLOW_USER_POLICY_NAME=policy-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-s3-rwd
aws iam create-policy \
--policy-name ${KUBEFLOW_USER_POLICY_NAME} \
--policy-document file://s3-policy.json -
IAM USER 생성
export KUBEFLOW_USER_NAME=user-kubeflow-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}
aws iam create-user --user-name ${KUBEFLOW_USER_NAME} -
USER에 정책 부여
aws iam attach-user-policy \
--user-name user-kubeflow-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV} \
--policy-arn "arn:aws:iam::${AWS_ACCOUNT_ID}:policy/${KUBEFLOW_USER_POLICY_NAME}" -
USER의 ACCESS_KEY 및 SECRET_ACCESS_KEY 생성 및 저장
access_key=$(aws iam create-access-key --user-name ${KUBEFLOW_USER_NAME} | jq -r '.AccessKey')
export KUBEFLOW_USER_AWS_ACCESS_KEY_ID=`echo ${access_key} | jq -r '.AccessKeyId'`
export KUBEFLOW_USER_AWS_SECRET_ACCESS_KEY=`echo ${access_key} | jq -r '.SecretAccessKey'`