실습 3탄 = 1/3
1
EKS를 CLI로 생성하기 위해 서버 1대가 필요하다.
EC2 생성
https://console.aws.amazon.com/console/home
t3.미듐
기존 키페어 사용
hostnamectl --static set-hostname aws-com3
[root@ip-172-31-32-9 ~]# exit
logout
[ec2-user@ip-172-31-32-9 ~]$ sudo su -
[root@aws-com3 ~]#
2
# EC2에 admin role을 주어 사용한다.
iam > roles > create role > ec2 > admin > eks-admin
aws s3 ls
다음은 다운로드하여 수동으로 각종 툴을 설치하는 법
1
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
2
# kubectl 설치 = 쿠버네티스에 명령을 내리는 툴
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version
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
8
# Install kubens kubectx
yum install git -y
git clone https://github.com/ahmetb/kubectx /opt/kubectx
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
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
# EKS 클러스터 생성 , 1.31 버전 - 2024-12월 신규 버전
# 클러스터 이름 = name: eksworkshop-eksctl3
# name: nodegroup3
cat << EOF > eksworkshop.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eksworkshop-eksctl3
region: ${AWS_REGION}
version: "1.31"
availabilityZones: ["${AZS[0]}", "${AZS[1]}", "${AZS[2]}"]
managedNodeGroups:
- name: nodegroup3
desiredCapacity: 2
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분 걸림)
# eks cluser가 먼저 만들어진다. 콘솔에서 EKS 가면 클러스터가 생성 된다.
# node가 2번째로 만들어진다. 콘솔에서 EC2 가면 node 서버가 만들어 진다.
# AWS 콘솔 > CloudFormation 가서 진행 상태 확인이 가능하다.
# Subnet만들어진 상태 확인
# AZ 3곳에 , pub - private 만들어 졌다.
https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1
12
# 설치된 node 확인
kubectl get nodes
cd
vi .bashrc
alias k=kubectl
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -F __start_kubectl k' >> /etc/profile
# 서울리전에 EKS 생성 확인 - 콘솔
# 클러스터 이름
eksworkshop-eksctl3
# node 그룹
nodegroup3
# ec2 = 2대 = t3.small 로 만들어짐
eksworkshop-eksctl3-nodegroup3-Node
eksworkshop-eksctl3-nodegroup3-Node
13
# 임시 역할을 저장하기 , 노드 그룹
STACK_NAME=$(eksctl get nodegroup --cluster eksworkshop-eksctl3 -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
# 기타 - 아래 처럼 권한 주어야 하는데 EKS 생성한 사용자는 따로 권한 줄 필요가 없다.
# cloud9 에서 권한을 주는것이다. 여기서 불필요.
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
# 인가 하기
echo ${rolearn}
eksctl create iamidentitymapping --cluster eksworkshop-eksctl3 --arn ${rolearn} --group system:masters --username admin
16
# 확인
eksctl create iamidentitymapping --cluster eksworkshop-eksctl3 --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
# 방법 1 - git 다운로드 설치 - 80 포트
git clone https://codeberg.org/hjacobs/kube-ops-view.git
cd kube-ops-view/
kubectl apply -k deploy
3
외부에서 kube-ops-view를 접속하기 위해서 Service Type을 LoadBalancer 로 변경한다.
kubectl edit svc kube-ops-view
apiVersion: v1
kind: Service
metadata:
annotations:
name: kube-ops-view
spec:
....
sessionAffinity: None
type: LoadBalancer
status:
ClusterIP => LoadBalancer
(3분 걸림)
# kube ops view 접속 URL
kubectl get svc kube-ops-view | tail -n 1 | awk '{ print "Kube-ops-view URL = http://"$4 }'
4
# 방법 2
Helm 으로 설치 - 8080 포트
kubens kube-system
( 5분 걸림)
1
# 터미널 2에서 모니터링
watch -d kubectl get no,deploy,rs,pod,svc
2
# EKS > 클러스터 > Compute > Node groups 이름 확인
nodegroup3
export CLUSTER_NAME=eksworkshop-eksctl3
eksctl scale nodegroup --cluster $CLUSTER_NAME --name nodegroup3 --nodes 1 --nodes-min 1 --nodes-max 6
export CLUSTER_NAME=eksworkshop-eksctl3
eksctl scale nodegroup --cluster $CLUSTER_NAME --name nodegroup3 --nodes 3 --nodes-min 3 --nodes-max 6
3
# AWS EKS 실습 3
https://brunch.co.kr/@topasvga/1881
4
https://brunch.co.kr/@topasvga/1679
5
https://brunch.co.kr/@topasvga/1705