실습 3탄 = 1/3
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로 사용한다.
다음은 다운로드하여 수동으로 각종 툴을 설치하는 법
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
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
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
감사합니다.