[AWS] EKS 설정하고 pod 관리하기
✅EKS(Elastic Kubernetes Service)?
Amazon Elastic Kubernetes Service는 k8s 제어 플레인을 설치하고 운영할 필요 없이 AWS에서 k8s를 손쉽게 실행하도록 하는 관리형 서비스입니다. k8s는 컨테이너화된 애플리케이션의 배포, 조정 및 관리 자동화를 위한 오픈 소스 시스템입니다.
Amazon EKS는 여러 가용 영역에서 k8s 제어 플레인 인스턴스를 실행하여 고가용성을 보장합니다. Amazon EKS는 비정상 제어 플레인 인스턴스를 자동으로 감지하고 교체하며, 자동화된 버전 업그레이드 및 패치를 제공합니다.
✅EKS 설정
☑️IAM 역할 생성
IAM - 역할 - 역할 생성을 합니다. 사용 사례는 EKS로 합니다.
역할 이름 지어주고 신뢰 정보를 json 형식처럼 입력합니다. 권한은 AmazonEKSClusterPolicy 입니다.
☑️클러스터 생성
EKS 탭으로 가서 클러스터 추가를 합니다. 역할은 아까 생성한 역할로 합니다.
나머지는 디폴트로 합니다.
네트워크에는 퍼블릭 서브넷에서 a,c를 사용합니다. 보안 그룹에는 기존에 쓰던 web 보안그룹을 사용합니다.
그다음은 디폴트로 설정하고 다음으로 갑니다.
로깅 관련은 그냥 디폴트로 합니다.
나머지도 디폴트 설정으로 하고 생성합니다.
EKS 클러스터가 생성되었습니다.
☑️아키텍처 구성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#kebectl 다운로드
curl -o kubectl curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.25.6/2023-01-30/bin/linux/amd64/kubectl
#사용 권한 설정
chmod +x ./kubectl
#kubectl 전역으로 사용하기 위함
sudo mv ./kubectl /usr/local/bin/
#k8s 명령어 도움
source <(kubectl completion bash)
# ~/.bashrc에 등록
echo "source <(kubectl completion bash)" >> ~/.bashrc
cloud9 인스턴스에서 아래 입력 kubectl 다운로드합니다. 그리고 간단한 설정을 합니다.
☑️자격 증명 설정
IAM - 사용자 - 생성한 사용자 선택 - 보안 자격 증명 - 액세스 키 만들기에 들어갑니다.
액세스 키와 비밀 액세스 키 복사합니다.
1
2
3
4
5
6
7
export AWS_ACCESS_KEY_ID=[액세스 키]
export AWS_SECRET_ACCESS_KEY=[비밀 액세스 키]
aws eks --region ap-northeast-2 update-kubeconfig --name EKS-CLUSTER
kubectl get svc
eks 클러스터 자격 증명 관련을 설정합니다.
☑️노드 그룹 역할 생성
IAM - 역할 생성 - ec2 권한을 생성합니다.
1
2
3
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
위의 3개 역할 선택해서 역할 생성합니다.
☑️노드 그룹 추가
EKS - 클러스터 - 생성한 클러스터 - 노드 그룹에서 이름과 역할을 설정하고 나머진 디폴트로 설정합니다.
인스턴스 유형은 t2.micro로 합니다.
노드, 그룹 조정인데 나머지 디폴트로 합니다.
네트워크는 제가 만든 vpc와 퍼블릭 a,c 서브넷을 설정합니다. 노드 원격 액세스 활성화 체크를 합니다.
☑️EKS 컨테이너 배포
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ mkdir test && cd $_
- Pod 라이프사이클 관리
$ vi pod.yaml # 파드 샘플 야믈 (menifest)
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
containers:
- name: nginx-pod-container
image: nginx
pod 정의를 해줍니다.
1
2
3
4
5
$ kubectl apply -f pod.yaml # pod 야믈 적용
#조회
$ kubectl get pod -o wide
$ kubectl describe pod nginx-pod
만든 yaml 파일 적용하고 관련 상태 조회합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ vi nodeport-pod.yaml # 노드포트 야믈
apiVersion: v1
kind: Service
metadata:
name: nodeport-service-pod
spec:
type: NodePort
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
노드포트 서비스 yaml파일 생성합니다.
1
2
3
$ kubectl apply -f nodeport-pod.yaml
$ kubectl get svc -o wide
$ kubectl describe svc nodeport-service-pod
똑같이 생성된 노드 포트 서비스 조회합니다.
아까 nginx 포드 인스턴스 들어가서 보안그룹에서 30080 인바운드를 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-site-deployment
spec:
replicas: 2
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/[ECR 레포 ID]/web-site:v1.0
배포 yaml생성 및 정의를 합니다.
1
$ kubectl apply -f deployment.yaml
적용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 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
로드 밸런서 배포 야믈 파일 생성합니다.
1
$ kubectl apply -f loadbalancer-deployment.yaml
적용합니다.
☑️EKS 로드밸런서 레코드 생성
아까 야믈 파일로 만든 로드 밸런서는 CLB입니다. 따라서 이에 맞추어 Route 53에서 만듭니다.
☑️업데이트
1
$ kubectl edit deployments.apps web-site-deployment
여기에서 image 부분을 찾아서 v2.0으로 바꿔주면 바로 업데이트 되면서 배포가 바뀝니다!
Comments powered by Disqus.