Amazon EKS란?
Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes 제어 플레인을 설치하고 운영할 필요 없이 AWS에서 Kubernetes를 손쉽게 실행하도록 하는 관리형 서비스이다. Kubernetes는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템이다.
Amazon EKS는 여러 가용 영역에서 Kubernetes 제어 플레인 인스턴스를 실행하여 고가용성을 보장한다. Amazon EKS는 비정상 제어 플레인 인스턴스를 자동으로 감지하고 교체하며, 자동화된 버전 업그레이드 및 패치를 제공한다.
IAM 설정
IAM 사용자 생성


MFA 디바이스 할당






액세스 키 만들기




IAM 로그인


AWS EKS
VM 세팅

AWS 자격증명
$ aws configure

AWS ECR 업로드(push)
# aws cli 설치
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install




'퍼블릭'과 리포지토리 이름 설정

# aws ecr에 로그인
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/a9m2n3r6
$ docker tag 192.168.1.158:5000/web-site:aws public.ecr.aws/a9m2n3r6/web-site:aws
$ docker push public.ecr.aws/a9m2n3r6/web-site:aws
$ docker tag 192.168.1.158:5000/web-site:aws public.ecr.aws/a9m2n3r6/web-site:food
$ docker push public.ecr.aws/a9m2n3r6/web-site:food


## PUSH 확인 테스트
# 기존 이미지 삭제
docker rmi public.ecr.aws/a9m2n3r6/web-site:food
docker rmi public.ecr.aws/a9m2n3r6/web-site:aws
# ECR에서 이미지를 가져와 컨테이너 생성
docker run -d -p 8081:80 --name aws-web public.ecr.aws/a9m2n3r6/web-site:aws
docker run -d -p 8082:80 --name food-web public.ecr.aws/a9m2n3r6/web-site:food



똑같이 리포지토리 'test-home'을 생성해서 도커에 있던 이미지를 업로드한다.



docker pull 192.168.1.158:5000/test-home:v0.0
docker tag 192.168.1.158:5000/test-home:v0.0 public.ecr.aws/a9m2n3r6/test-home:v0.0
docker push public.ecr.aws/a9m2n3r6/test-home:v0.0
docker tag 192.168.1.158:5000/test-home:v1.0 public.ecr.aws/a9m2n3r6/test-home:v1.0
docker push public.ecr.aws/a9m2n3r6/test-home:v1.0
docker tag 192.168.1.158:5000/test-home:v2.0 public.ecr.aws/a9m2n3r6/test-home:v2.0
docker push public.ecr.aws/a9m2n3r6/test-home:v2.0

EKS 클러스터 IAM 역할 생성




EKS 클러스터 생성








EKS CLI
# kubectl 다운로드
$ curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.26.4/2023-05-11/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
# 어느 경로에서든 kubectl을 사용할 수 있도록 kubectl을 bin으로 이동
$ mv ./kubectl /usr/local/bin
# kubectl 자동완성
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
# EKS 클러스터 접속
$ aws eks --region ap-northeast-2 update-kubeconfig --name EKS-CLUSTER
$ kubectl version --short --client
$ kubectl get svc

노드 그룹 추가

노드 그룹 역할 생성


AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy









EKS - 로드 밸런서
$ mkdir test && cd $_
$ vi deployment.yaml
//
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-site-deployment
spec:
replicas: 4
selector:
matchLabels:
app: web-site-deployment
template:
metadata:
name: web-site-deployment
labels:
app: web-site-deployment
spec:
containers:
- name: web-site-deployment-container
image: public.ecr.aws/a9m2n3r6/web-site:aws
//
# kubectl apply -f deployment.yaml
# kubectl get all

$ vi loadbalancer-deployment.yaml
//
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-deployment
spec:
type: LoadBalancer
selector:
app: web-site-deployment
ports:
- protocol: TCP
port: 80
targetPort: 80
//
# kubectl apply -f loadbalancer-deployment.yaml
# kubectl get svc






테스트 - 스케일링
# kubectl edit deployments.apps web-site-deployment
//
replicas 를 6으로 변경
//






## scale in
# kubectl scale deployment web-site-deployment --replicas 10

## scale out
# kubectl scale deployment web-site-deployment --replicas 22
## scale in
# kubectl scale deployment web-site-deployment --replicas 11

EKS - 노드 포트
# cp deployment.yaml deployment2.yaml
# vi deployment2.yaml
//
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-site-deployment2
spec:
replicas: 5
selector:
matchLabels:
app: web-site-deployment2
template:
metadata:
name: web-site-deployment2
labels:
app: web-site-deployment2
spec:
containers:
- name: web-site-deployment-container2
image: public.ecr.aws/a9m2n3r6/web-site:food
//
# kubectl apply -f deployment2.yaml
## 노드 포트로 변경
# cp loadbalancer-deployment.yaml nodeport-deployment.yaml
# vi nodeport-deployment.yaml
//
apiVersion: v1
kind: Service
metadata:
name: nodeport-service-deployment
spec:
type: NodePort
selector:
app: web-site-deployment2
ports:
- protocol: TCP
port: 80
targetPort: 80
//
# kubectl apply -f nodeport-deployment.yaml
# kubectl get svc







EKS - 클러스터 아이피
# cp nodeport-deployment.yaml cluster-deployment.yaml
# vi cluster-deployment.yaml
//
kind: Service
metadata:
name: cluster-service-deployment
spec:
type: ClusterIP
externalIPs:
- 10.31.45.203 # 노드 포트에서 사용한 아이피에 대응하는 내부 아이피
selector:
app: web-site-deployment2
ports:
- protocol: TCP
port: 80
targetPort: 80
//
# kubectl apply -f cluster-deployment.yaml
# kubectl get svc


마지막으로 보안 그룹에 대해 더 정리를 하자면,


두번째 규칙을 보면 자기 자신을 소스로 한다. 이렇게 하면, 해당 보안 그룹 안에 있는 클러스터 내부의 모든 트래픽이 허용된다.
'메가존 클라우드 2기 교육 > 실무 특화' 카테고리의 다른 글
CI / CD - Jenkins, Gti Lab (0) | 2023.06.14 |
---|---|
Kubernetes - GCP에서의 사용 (0) | 2023.06.08 |
Kubernetes - 모니터링(Prometheus, Grafana), 오토스케일링(HPA) (0) | 2023.06.08 |
Kubernetes - 스케줄링(taint & toleration, cordon , drain), (0) | 2023.06.07 |
Kubernetes - NFS, configMap, namepsace, ResourceQuota (0) | 2023.06.05 |