# EKS 기본 아키텍처를 기반으로 인프라 구축하기
2022.05.11 - [AWS 인프라 구성하기 (MiniProject)/개발환경 구성 (EKS)] - EKS 기본 아키텍처 구성하기.1 (WorkFlow)
1. Network 리소스를 설치 (VPC, Subnet, 등등)
CloudFormation을 통한 네트워크 리소스를 설치한다.
내용은 AWS에서 기본으로 제공하는 자료이고 아래와 같다.
아래의 내용을 amazon-eks-vpc-private-subnets.yaml 파일로 저장하고 CloudFormation에 붙여넣으면 정보를 생성한다.
2. EKS 인프라 생성하기
아래에 링크로 이동하여 EKS 기본 인프라를 생성한다. EC2 인프라 생성과 다른점은 서브넷 태그값에 kubernetes.io/role/internal-elb 값을 추가해 줘야 한다는 차이점이 있다.
2022.05.02 - [AWS/AWS Network] - AWS 기본 네트워크 구성
기본 네트워크 구성 후 생성한 네트워크에 서브넷으로 이동하여 아래와 같이 설정을 진행한다.
퍼블릭 서브넷 및 프라이빗 서브넷 모두 아래와 같이 태그값을 넣어줘야 한다.
퍼블릭 서브넷 (kubernetes.io/role/elb : 1)
프라이빗 서브넷 (kubernetes.io/role/internal-elb : 1)
3. EKS ClusterNode와 WorkerNode의 IAM 역할 생성
클러스터 IAM 역할 생성
[AWS Management Console]을 실행, [IAM] → [역할] → [역할 만들기]를 선택한 후 [사용 사례 선택]에서
[EKS] → [EKS - Cluster]를 선택한 후 [다음: 권한]을 클릭한다.
Worker Node IAM 역할 생성
[AWS Management Console]을 실행하고 [IAM] → [역할] → [역할 만들기]를 선택한 후 [사용 사례 선택]에서
[EC2]를 선택한 후 [다음: 권한]을 클릭한다.
[권한]에서는 AmazonEKSWorkerNodePolicy, AmazonEKS_CNI_Policy, AmazonEC2ContainerRegistryReadOnly 를 선택한 후 IAM을 생성한다.
eksctl 다운로드
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
eksctl version 확인
eksctl version
4. EKS 클러스터 생성 및 Kubeconfig 파일 생성
클러스터는 아래와 같이 명령어를 통해서 간단하게 생성이 가능하다.
BastionHost에서 아래의 코드를 실행하면 클러스터가 생성 된다.
파일명은 create-cluster.yaml 로 한다. Cluster는 private 환경에 위치해야 하므로 private 서브넷을 넣어준다.
eksctl을 통한 클러스터 생성
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: "EKS-SEUNG-SEUNG-CLUSTER"
region: ap-northeast-2
version: "1.21"
vpc:
subnets:
private:
ap-northeast-2a: { id: "subnet-111111111115f571d" }
ap-northeast-2c: { id: "subnet-11111111111cecdd2" }
실행전에 AWS CLI에 자격 증명은 되어 있어야 한다.
생성한 파일을 실행하는 명령어는 아래와 같다.
eksctl create cluster -f create-cluster.yaml
정상적으로 설치가 되었다면 아래와 같은 메세제가 출력된다.
- eksctl을 사용하여 Node-Group 생성
eksctl create nodegroup \
--region ap-northeast-2 \
--cluster {cluster_name} \
--node-private-networking \ # Private network 사용
--name test-nodes \ # node-name
--node-type t3.medium \ # node-type
--nodes 3 \
--nodes-min 1 \
--nodes-max 4
- 아래는 콘솔 화면에서 생성하는 방법이다.
AWS EKS 서비스로 이동하여 클러스터를 생성한다.
다음 네트워크 설정을 진행 한다.
VPC : 사전작업 시 생성했던 VPC를 선택한다.
서브넷 : 사전작업 시 생성했던 서브넷을 입력하는데, 이 글에서는 퍼블릭 서브넷 2개, 프라이빗 서브넷 2개를 생성했었으며, 프라이빗 서브넷을 쿠버네티스 작업자 노드용 서브넷으로 사용할 것이기 때문에 프라이빗 서브넷 2개를 선택한다.
보안 그룹 : 사전작업 시 생성했던 Security Group을 선택한다.
클러스터 엔드포인트 엑세스 : [프라이빗]을 선택하게 되면 로컬에서 kubectl을 통해 쿠버네티스 클러스터에 접근할 수 없고, 동일 VPC내에 있는 EC2에서만 접근 가능하다.
(퍼블릭 및 프라이빗으로 설정하면 로컬 환경 등에서도 접근 이 가능하다.)
생성된 클러스터 확인하기
클러스터가 정상적으로 생성되어 아래와 같이 버전과 활성 정보를 나타내고 있다.
5. BastionHost 환경을 구성하여 생성된 클러스터에 접근하기
동일한 VPC 환경에 EC2 인스턴스를 생성한다.
2021.10.24 - [AWS/EC2] - EC2 생성
EC2 생성 후 BastionHost SSH 접속
2020.11.01 - [AWS/EC2] - MobaXterm을 활용한 SSH 접속
EC2 OS 라이브러리 업데이트
sudo apt update
sudo apt upgrade
AWS Cli 다운로드
sudo apt install awscli
AWS 서비스를 사용하기 위한 자격증명 구성하기
2021.12.21 - [AWS/AWS CLI] - AWS CLI 자격증명 구성
6. Kubectl 설치 및 EKS 클러스터 연결
Kubectl 설치
# kubectl 다운로드
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl
# 다운받은 kubectl 권한설정
chmod +x ./kubectl
# 다운받은 kubectl 폴더를 특정 경로로 이동
sudo mv ./kubectl /usr/local/bin/kubectl
EKS 클러스터 연결하기
$ aws eks --region [리전명] update-kubeconfig --name [EKS 이름]
예 : aws eks --region ap-northeast-2 update-kubeconfig --name eks-test-01
그리고 BationHost에 eksctl과 kubectl이 설치가 되어 있으면 위의 EKS 클러스터 연결하기에서 클러스터 이름만 바꿔서 시실행 후 EKS 명령어를 실행해 주면 된다.
만약, Unauthorized 오류가 발생하면 보안자격증명을 해줘야 한다.
export AWS_ACCESS_KEY_ID=" "
export AWS_SECRET_ACCESS_KEY=" "
현재의 클러스터 연결 확인하기
참고로 cmd에서 F7은 명령어 히스토리를 확인 할 수 있다.
kubectl config current-context
arn:aws:eks:ap-northeast-2:11111111111:cluster/aws-test-01
정상적으로 연결 되었는지 확인하기
ubuntu@ip-192-168-0-228:~$ kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-556f6dffc4-dbr2b 0/1 Pending 0 108m
kube-system coredns-556f6dffc4-krdl8 0/1 Pending 0 108m
7. WorkerNode Group 생성하기
[Amazon EKS] → [클러스터] → [컴퓨팅] → [노드 그룹 추가]를 선택한다.
노드 그룹 구성 정보를 입력한다. 노드 IAM 역할은 WorkerNode 역할을 지정해 준다.
컴퓨팅 및 조정 구성 설정을 한다. 원하는 리소스 자원에 맞게 설정을 진행 한다.
네트워크를 구성한다.
클러스터 서브넷을 프라이빗으로 했으므로 워커노드 그룹도 프라이빗 서브넷으로 진행 한다.
마지막으로 검토 후 생성을 클릭하여 노드그룹을 생성한다.
노드 그룹의 생성시간은 약 10~20분정도 소요되고 생성정보는 아래와 같다.
- 끝 -
'⌛ AWS 인프라 구성하기 (MiniProject) > ✅ 개발환경 구성 (EKS)' 카테고리의 다른 글
(미완성) CI/CD 환경 구성 (1) (0) | 2022.05.23 |
---|---|
5. 생성한 이미지를 ECR로 업로드 하기 (0) | 2022.05.12 |
4. 수동으로 Source 빌드 후 배포하기 (0) | 2022.05.12 |
3.EKS ALB 구성하기 & 테스트 Nginx 웹 서버 배포 (1) | 2022.05.11 |
1.EKS 기본 아키텍처 구성하기 (WorkFlow) (0) | 2022.05.11 |