brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 17. 2021

EKS1탄-1. EKS 구축 환경  설정-1/7

2024년 12월 업데이트함.

eks 1.31 이 새로 나와 자료 업데이트 했습니다.-2024년 12월



# 공부법

시간 절약하기 위해 이론을 한번 보고 난 후 실습하자.

이론 한번 쭉 본다. = 어떤 내용을 얼마나 공부해야 하는지 알수 있다.

몰아서 한번 실습한다.  = 실습 비용이 나온다. 몰아서 실습하는 것을 추천한다.



# 목표

일반  EC2에서도 툴을 설치해  EKS 클러스터 생성환경을 구축할 수 있다.

쿠버네티스를 만드는 eksctl ,  쿠버네티스에  서버(pod)를 만드는 kubectl 툴을 설치하자.



<1>  개발 환경 구성

<2>  aws-com1 EC2 만들기  (필수)

<3>  툴 설치 (필수)

<4>  다음 = 실습 2. 컨테이너 생성




<1>  개발 환경 구성


구성1

개발자 ------- EC2(도커설치,도커 파일)----------(올리기)---ECR



구성2

개발자 -------EC2(도커설치,도커 파일)----------(올리기)----Git------(올리기)---ECR--------EKS







<2>  aws-com1 EC2 만들기  (필수)


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 설치를 한다.



# kops 다운로드 , v1.31.0-beta


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

# eksctl 설치  = 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




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/





#  Cloud9 1대 생성 (선택)


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




<3> 툴 설치 (필수)


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

# kubectl 설치


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

# 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





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이 부여되어 있기 때문이다.







<4>  다음


# 실습 2. 컨테이너 생성


다음 컨테이너 이미지 연습해 보자

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

                

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