2024년 12월 업데이트함.
시간 절약하기 위해 이론을 한번 보고 난 후 실습하자.
이론 한번 쭉 본다. = 어떤 내용을 얼마나 공부해야 하는지 알수 있다.
몰아서 한번 실습한다. = 실습 비용이 나온다. 몰아서 실습하는 것을 추천한다.
일반 EC2에서도 툴을 설치해 EKS 클러스터 생성환경을 구축할 수 있다.
쿠버네티스를 만드는 eksctl , 쿠버네티스에 서버(pod)를 만드는 kubectl 툴을 설치하자.
구성1
개발자 ------- EC2(도커설치,도커 파일)----------(올리기)---ECR
구성2
개발자 -------EC2(도커설치,도커 파일)----------(올리기)----Git------(올리기)---ECR--------EKS
1
# role생성
IAM > role > ec2 > eks-admin-role
admin권한
2
ec2 1대 생성
디폴트 VPC를 사용한다.
서울리전
EC2 1대 생성하자.
Amazon 리눅스로 생성하자 (AWS Cli가 기본 설치 되어 있다)
동일하게 Role을 만들어, EC2에 부여하고 사용하면 된다.
aws-12-18-2.ppk (putty 사용할것이라 ppk 로 만든다.)
demo1
아마존 리눅스로 설치한다. 기본 AWS 유틸이 설치되어 있다.
Auto-assign Public iP Enable
IAM role = 1번에서 생성한 role을 지정한다.
3
role을 ec2에 매칭함.
demo1 클릭 > 오른 마우스 > security > modifi iam role > eks-admin-role 부여
4
EC2 로그인?
sudo su -
유틸 설치
EKSCTL과 Kubectl 필수
쿠버네티스 클러스터를 만드는 EKSCTL
쿠버네티스에 명령을 내려 Pod(서버)를 만드는 Kubectl
or
# 하나씩 설치해 보기
4
# tree 보는 유틸, json지원 유틸 등
yum -y install tree tmux jq
5
# kops는 쿠버네티스 설치하는 경우 필요한 유틸 (선택)
# 여기서는 eksctl로 EKS 설치를 한다.
curl -Lo kops https://github.com/kubernetes/kops/releases/download/v1.31.0-beta.1/kops-linux-amd64
chmod +x kops
mv kops /usr/local/bin/kops
kops version
현재 Kops가 지원하는 버전
https://kops.sigs.k8s.io/welcome/releases/
# 웹사이트
https://github.com/kubernetes/kops/releases/
6
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
7
# 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
다운로드 사이트
https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/
2024년 AWS에서 Cloud9 추가 개발 중지, 신규 계정에서는 Cloud9 사용 불가하다.
1
AWS 콘솔 로그인
https://console.aws.amazon.com/console/home
리전은 서울리전으로 하자.
또는 us-west-2 오래곤으로 함
2
role 생성
iam > create role > AWS 서비스 > EC2 > AdministratorAccess > 다음 > 역할 이름
eks-admin
3
(선택)
명령 서버 Cloud9를 1대 생성하자.
해당 서버에 Admin-role을 부여하여 EKS 클러스터를 만들자.
Cloud9에서 기존 크레디셔널은 제거해야 한다.
Cloud9를 편의상 Public Subnet에 생성한다.
eksctl을 설치해 클러스터를 생성한다.
kubectl을 설치해 pod 등을 생성한다.
명령서버를 만들고, 명령서버에 EKS 생성권한을 주자.
role을 만들어 명령서버에 권한을 주는 방법이 있다.
또는 access-key와 Secret-key를 생성해 해당 권한을 사용하는 방법이 있다.
여기서는 role을 만들어 명령서버에 권한을 주는 방법을 사용해 보자.
Cloud9 만들어 보자!!
Cloud9 연결
seo-mariogame-dev-c9
// seo사용자의 마리오게임 개발 cloud9
t3.medium (변경) = Cloud9에서 테스트시 사양이 좋아야 빠름
아마존 리눅스 2 (디폴트)
AWS System Manager로 생성 (디폴트)
생성
public subnet에 설치
4
# 웹콘솔
EC2에 eks-admin role 부여
aws-cloud9-seo-mariogame-dev
EC2 > 오른마우스 보안 > iam 역할수정 > eks-admin > iam 역할 업데이트
# Cloud9 실행.
콘솔 > 오른쪽 위 톱니모양 > AWS Settings > Credentials > AWS managed temporary credentials 비활성화로 변경
// 기존 권한을 제거하고 새로 부여한 role권한을 사용하도록 한다.
5
# 현재 자격증명 확인하자.
role을 사용하는가?
aws sts get-caller-identity --query Arn | grep eks-admin
assumed-role/eks-admin/i-00fec51ff756
6
# 기존 자격증명도 제거 (선택) - 위에 자격 증명 변경이 안되었을 경우 실행
rm -vf ${HOME}/.aws/credentials
1
sudo su -
# 한 번에 설치하자 , 호스트 네임 변경 (선택)
#!/bin/bash
hostnamectl --static set-hostname demo1
# Install tools
yum -y install git tree tmux jq lynx htop
# aws cli v2 , AWS CLI로 AWS 리소스를 생성할수 있다. - 아마존 리눅스의 경우 이미 설치되어 있다.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
export PATH=/usr/local/bin:$PATH
source ~/.bash_profile
complete -C '/usr/local/bin/aws_completer' aws
# Install eksctl = EKS 생성시 필요하다. - 위에서 설치함.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin
eksctl version
# 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
이전 버전 설치 경우
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.25.7/2023-03-17/bin/linux/amd64/kubectl
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Source bash-completion for kubectl , 얼리어스 k
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >>~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc
# 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
# Config convenience
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> /home/ec2-user/.bashrc
# Change localtime
date
sed -i "s/UTC/Asia\/Seoul/g" /etc/sysconfig/clock
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date
# bash
sudo yum install -y bash-completion
또는
# 아래 내용은 하나씩 설치하는 법
1.
# aws cli 설치
sudo pip install --upgrade awscli
aws --version
2
sudo curl -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
kubectl version
3
# jq 설치 , json형식을 다루는 util
sudo yum install -y jq
4
# bash관련 유틸 설치
sudo yum install -y bash-completion
5
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
6
참고
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html
7
동작 확인
# s3 버킷 만들어보기~ (권한 테스트) (선택)
aws s3 ls
aws s3 mb s3://sdadad2121
make_bucket: sdadad2121
aws s3 ls |grep sda*
2021-06-17 12:55:27 sdadad2121
s3 삭제하기
aws s3 rm s3://sdadad2121
8
# 기타 리전등 변수로 등록하기 = 추후 작업을 쉽게 하기 위해
# 현재 리전을 디폴트로 설정
// IDMS 가 디폴트로 disable 되면서 조회 안됨.
export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
9
# Console 화면 오른쪽에서 Account id 확인
export ACCOUNT_ID=47xxxxxx138
echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
export AWS_REGION=ap-northeast-2
echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile
aws configure set default.region ${AWS_REGION}
aws configure get default.region
echo ${AWS_REGION}
// 리전 정보 확인
10
# 리전 변경 필요시
export AWS_REGION=us-west-1
export AWS_REGION=us-west-2
US West (N. California)us-west-1
US West (Oregon)us-west-2
11
# aws configure로 환경 설정 (선택)
aws configure
access-key나 secret key가 없어도 된다.
이미 ec2에 admin role이 부여되어 있기 때문이다.
다음 컨테이너 이미지 연습해 보자
https://brunch.co.kr/@topasvga/1651