brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 09. 2021

EKS 3탄-1. Cloud9에서 EKS 생성

실습 3탄 =  1/3

<1>  명령어 실행할  Cloud9  생성

<2>  각종 tool  설치

<3>   admin-role 생성 후 cloud9 ec2에  role 부여

<4>   EKS 생성




<1>  명령어 실행할  Cloud9  생성


1

EKS를 CLI로  생성하기 위해 서버 1대가 필요하다.

AWS에서는 Cloud9이라는 EC2 개발 환경을 제공한다.

물론, 별도의 EC2를 하나 만들어 환경을 만들어도 된다.



2

Cloud9 만드는 법 2가지


방법 1

콘솔로그인 > Cloud9 가서 수동 클릭해서 만든다. 안 어렵다.



방법 2

CloudFormation으로 Cloud9를 만든다.

디폴트 VPC가 있어야 한다.

admin-role까지 부여된 상태

툴 자동 설치 - 스크립트 포함



3

Cloud9이 만들어졌다면, 해당 EC2에 admin role을 주어 사용한다. 

iam > roles > create role > ec2 > admin > eks-admin

or

Access-key/Secret-key로  사용한다.






<2>  각종 tool  설치



다음은 다운로드하여 수동으로 각종 툴을 설치하는 법


1

kubectl 설치?

sudo curl --silent --location -o /usr/local/bin/kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl


sudo chmod +x /usr/local/bin/kubectl



2

awscli 설치?

sudo pip install --upgrade awscli && hash -r


aws --version

aws-cli/2.2.35 Python/3.8.8 Linux/4.14.243-185.433.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off



3

jq , gettext , bash호환 유틸 설치?

sudo yum -y install jq gettext bash-completion moreutils



4

yaml 처리를 위해 yq 설치?

echo 'yq() {

  docker run --rm -i -v "${PWD}":/workdir mikefarah/yq "$@"

}' | tee -a ~/.bashrc && source ~/.bashrc



5

for command in kubectl jq envsubst aws

  do

    which $command &>/dev/null && echo "$command in path" || echo "$command NOT FOUND"

  done



6

kubectl  bash 활성화

kubectl completion bash >>  ~/.bash_completion

. /etc/profile.d/bash_completion.sh

. ~/.bash_completion



7

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

.  ~/.bash_profile





<3>   admin-role 생성후 cloud9 ec2에  role 부여


1

iam >  create role > ec2 >  admin >  eks-admin



2

EC2  해당 EC2 클릭 > 오른 마우스 > 보안 >  iam role 수정 >   eks-admin 지정



3

Cloud9  > AWS Settings > AWS managed tempoary credentials:   를     X로 변경 하자



4

기존 인증 제거?

rm -vf ${HOME}/.aws/credentials




<4>   EKS 생성


1

현재 리전을 기본값으로 지정


export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)


export AWS_REGION=ap-northeast-2



export AZS=($(aws ec2 describe-availability-zones --query 'AvailabilityZones[].ZoneName' --output text --region $AWS_REGION))



2

리전 확인?

test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set

AWS_REGION is us-east-2




3

bach 프로파일에 저장?


echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile


echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile


echo "export AZS=(${AZS[@]})" | tee -a ~/.bash_profile


aws configure set default.region ${AWS_REGION}


aws configure get default.region




4

임시 역할에 대한 검증?

만든 eks-admin role이 부여 되었는지 확인하는 명령어


aws sts get-caller-identity --query Arn | grep eks-admin -q && echo "IAM role valid" || echo "IAM role NOT valid"

IAM role valid




5

서비스 저장소 복제?


yum install git -y


mkdir environment

cd ~/environment

git clone https://github.com/brentley/ecsdemo-frontend.git

git clone https://github.com/brentley/ecsdemo-nodejs.git

git clone https://github.com/brentley/ecsdemo-crystal.git



6

KMS = CMK 생성?


aws kms create-alias --alias-name alias/eksworkshop --target-key-id $(aws kms create-key --query KeyMetadata.Arn --output text)



7

cluster 명령에 입력할 cmk arn 검색

export MASTER_ARN=$(aws kms describe-key --key-id alias/eksworkshop --query KeyMetadata.Arn --output text)



8

Master arn 환경 변수를 bash에 저장

echo "export MASTER_ARN=${MASTER_ARN}" | tee -a ~/.bash_profile



9

eksctl 설치?


curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp


sudo mv -v /tmp/eksctl /usr/local/bin


eksctl version


eksctl completion bash >> ~/.bash_completion

. /etc/profile.d/bash_completion.sh

. ~/.bash_completion



10

EKS 클러스터  생성


cat << EOF > eksworkshop.yaml

---

apiVersion: eksctl.io/v1alpha5

kind: ClusterConfig


metadata:

  name: eksworkshop-eksctl

  region: ${AWS_REGION}

  version: "1.28"


availabilityZones: ["${AZS[0]}", "${AZS[1]}", "${AZS[2]}"]


managedNodeGroups:

- name: nodegroup

  desiredCapacity: 3

  instanceType: t3.small

  ssh:

    enableSsm: true


# To enable all of the control plane logs, uncomment below:

# cloudWatch:

#  clusterLogging:

#    enableTypes: ["*"]


secretsEncryption:

  keyARN: ${MASTER_ARN}

EOF


eksctl create cluster -f eksworkshop.yaml



(15분 걸림)


//AWS 콘솔화면가서  CloudFormation 가서 진행 상태 확인이 가능하다.

// Subnet만들어진 상태 확인

 AZ 3곳에 , pub - private 만들어 졌다.



12

설치된 node 확인

kubectl get nodes





13

임시역할을 저장하기


STACK_NAME=$(eksctl get nodegroup --cluster eksworkshop-eksctl -o json | jq -r '.[].StackName')


ROLE_NAME=$(aws cloudformation describe-stack-resources --stack-name $STACK_NAME | jq -r '.StackResources[] | select(.ResourceType=="AWS::IAM::Role") | .PhysicalResourceId')


echo "export ROLE_NAME=${ROLE_NAME}" | tee -a ~/.bash_profile



14

c9builder=$(aws cloud9 describe-environment-memberships --environment-id=$C9_PID | jq -r '.memberships[].userArn')

if echo ${c9builder} | grep -q user; then

 rolearn=${c9builder}

        echo Role ARN: ${rolearn}

elif echo ${c9builder} | grep -q assumed-role; then

        assumedrolename=$(echo ${c9builder} | awk -F/ '{print $(NF-1)}')

        rolearn=$(aws iam get-role --role-name ${assumedrolename} --query Role.Arn --output text)

        echo Role ARN: ${rolearn}

fi



15

eksctl create iamidentitymapping --cluster eksworkshop-eksctl --arn ${rolearn} --group system:masters --username admin



16

확인

eksctl create iamidentitymapping --cluster eksworkshop-eksctl --arn ${rolearn} --group system:masters --username admin

2021-07-10 07:41:13 [ℹ]  eksctl version 0.56.0

2021-07-10 07:41:13 [ℹ]  using region us-east-2

2021-07-10 07:41:13 [ℹ]  adding identity "arn:aws:iam::88888888:role/seo-administrator-role" to auth ConfigMap



다음 과정


https://brunch.co.kr/@topasvga/1705






<10>   AWS EKS 실습 3


https://brunch.co.kr/@topasvga/1881



https://brunch.co.kr/@topasvga/1679


감사합니다.






매거진의 이전글 (몰아보기) EKS 실습 3탄- 대시보드

작품 선택

키워드 선택 0 / 3 0

댓글여부

afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari