Study/seSAC 금천 4기

클라우드_7일차_241014

지찬씌 2024. 10. 31. 09:21

EKS (Elastic Kubernetes Service)

 

 

 

EKS를 이용한 클러스터 구성

- Amazon EKS 클러스터 생성

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html

 

 

- 관리형 노드 그룹 생성

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-managed-node-group.html

 

 

 

VPC 생성 - CloudFormation을 이용

https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml

 

 

 

1. 스택 생성

 

- CloudFormation 에서 스택 생성

 

 

 

- 템플릿 정보를 가지고 있는 S3 버킷 URL을 입력하여 템플릿을 가져오고 나머지 설정은 default 사용

 

 

 

 

 

 

 

- 스택 생성 후 VPC 확인

 

 

 

 

 

 

2. 클러스터 서비스 역할 생성

: 컨트롤플레인이 사용자를 대신해서 AWS 리소스를 관리하는데 사용하는 역할 부여

 

- IAM (Identity and Access Management) 에 접속하여 역할 생성

 

 

 

- 생성하는 역할 이름 설정하고 [역할 생성]

 

 

 

 

 

 

 

3. 클러스터 생성

 

- Amazon EKS 접속, 클러스터 생성

 

 

 

- 1단계 클러스터 구성에서는 클러스터 이름 / 역할 / 버전을 선택하고 나머지는 default로 설정.

 

 

 

- 2단계 네트워크 지정. 템플릿을 통해 생성된 VPC를 선택하면 자동으로 서브넷, 보안그룹 등이 설정된다.

  클러스터 외부에서만 접근할 것이기 때문에 클러스터 엔드포인트 엑세스는 "퍼블릭"으로 설정.

 

 

 

 

- 3,4,5 단계는 모두 default 설정을 가져가고 6단계에서 최종 검토 후 클러스터를 생성

 

 

 

- 클러스터가 생성 중을 지나 활성화 됨을 확인

 

 

 

 

 

4. 생성된 클러스터와 로컬 PC의 kubectl이 통신하도록 설정

 

* 로컬 PC에서 kubectl 설치 확인

 

  > kubectl version --client

 

 

 

* 로컬 PC에 kubectl 설치 (설치되지 않은 경우, 버전이 맞지 않은 경우)

  윈도우 kubectl 설치 링크 : https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-windows/

 

  > curl.exe -L0 "https://dl.k8s.io/release/v1.31.0/bin/windows/amd64/kubectl.exe"

 

  > 설치 후 버전 확인. kubectl version --client

 

 

 

* 로컬 PC의 프롬프트 어느경로에서든  kubectl을 사용하기 위해서 환경변수로 추가한다.

 

검색 > 시스템 환경 변수 편집 > "환경 변수" > PATH 더블 클릭 > kubectl.exe 위치 경로 등록

 

 

 

* AWS CLI 설치 확인

 

  > aws --version

 

  > 설치 링크 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

 

 

 

- root 사용자의 엑세스 키를 발급 받아 등록

root 사용자의 엑세스 키는 IAM이 아니라 우측 메뉴의 보안 자격 증명에서 생성

 

 

 

 

 

- 엑세스 키 발급 이후는 기존의 엑세스 키 등록방법과 동일

 

  > aws configure

 

AWS Access Key ID [****************HGAT]: AKI**********42FL

AWS Secret Access Key [****************B+UN]: 0ZFXHbNq******************i9zyyIzu+p3

Default region name [ap-northeast-2]:

Default output format [json]:

 

 

 

 

- EKS 클러스터에 연결할 수 있도록 인증 및 설정 정보를 구성

 

  > aws eks update-kubeconfig --region ap-northeast-2 --name MyEKSCluster

 

 

 

 

- 서비스와 노드 정보 확인 

 

  > kubectl get service

NAME           TYPE         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE

kubernetes   ClusterIP    10.100.0.1        <none>              443/TCP    176m

 

 

  > kubectl get node 

No resources found

 

 

 

 

 

 

5. EKS 노드 역할을 생성

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-node-role.html

 

- 신규 역할 생성

  1단계. work 노드를 생성할 것이기 때문에 EC2 인스턴스에 대한 엔터티 및 사용 사례를 선택

 

 

 

- 2단계. 권한 추가 (AmazonEKS_CNI_Policy / AmazonEKSWorkerNodePolicy / AmaonEC2ContainerRegistryReadOnly)

 

 

- 나머지 설정은 default를 취하고 EKS 노드의 역할을 생성한다.

 

 

 

 

 

 

6. EKS 노드 그룹 생성

 

- AWS EKS에서 생성한 MyEKSCluster의 노드 그룹을 생성

 

 

 

 

- 1단계. 노드 그룹의 이름과 역할 설정

 

 

 

 

- 2단계. 컴퓨팅 및 조정 구성 설정

  아래와 같이 default 설정을 가져간다.

 

 

 

 

- 3단계. 네트워킹 지정 후 생성

   Public Subnet을 제외하고 Private Subnet으로 지정한다. (외부에서 worker 노드에 접근할 필요는 없기 때문)

 

 

 

 

- 노드 그룹 생성 확인 (각 속성의 화면에서도 확인할 수 있다.)

 

 

 

 

- 명령 프롬프트에서 노드 실행 확인

 

  > kubectl get node -o wide

 

NAME                                                 STATUS   ROLES    AGE    VERSION               INTERNAL-IP       EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME

ip-192-168-131-151.ap-northeast-2.compute.internal   Ready    <none>   3m6s   v1.30.4-eks-a737599   192.168.131.151   <none>        Amazon Linux 2   5.10.225-213.878.amzn2.x86_64   containerd://1.7.11

ip-192-168-205-186.ap-northeast-2.compute.internal   Ready    <none>   3m3s   v1.30.4-eks-a737599   192.168.205.186   <none>        Amazon Linux 2   5.10.225-213.878.amzn2.x86_64   containerd://1.7.11

 

 

 

 

- 클러스터 구성요소 설치 확인

 

  > kubectl get namespace

NAME                      STATUS     AGE

default                      Active        3h16m

kube-node-lease      Active        3h16m

kube-public              Active         3h16m

kube-system            Active         3h16m

 

 

  > kubectl get all -n kube-system

NAME                                                  READY            STATUS        RESTARTS           AGE

pod/aws-node-dps28                           2/2                   Running               0                     5m30s

pod/aws-node-r2s6r                             2/2                   Running              0                      5m32s

pod/coredns-5b9dfbf96-ht656             1/1                   Running               0                      3h5m

pod/coredns-5b9dfbf96-lm897            1/1                   Running               0                      3h5m

pod/eks-pod-identity-agent-mmhlw     1/1                   Running               0                     5m32s

pod/eks-pod-identity-agent-v5kdd       1/1                   Running               0                     5m30s

pod/kube-proxy-cbbq5                         1/1                  Running               0                      5m32s

pod/kube-proxy-jlzp4                           1/1                   Running              0                      5m30s

  

 

 

 

 

7. 클러스터에 디플로이먼트와 서비스 생성

 

- Yaml 파일 작성

apiVersion: apps/v1

kind: Deployment

metadata:

  name: hostname-deployment

spec:

  replicas: 3

  selector:

    matchLabels:

      app: webserver

  template:

    metadata:

      name: my-webserver

      labels:

        app: webserver

    spec:

      containers:

        - name: my-webserver

          image: alicek106/rr-test:echo-hostname

          ports:

            - containerPort: 80

---

apiVersion: v1

kind: Service

metadata:

  name: hostname-loadbalancer

spec:

  type: LoadBalancer

  selector:

    app: webserver

  ports:

    - name: web-port

      port: 80

      targetPort: 80

 

 

 

- 배포

 

  > kubectl apply -f eks-sample.yaml

 

  > kubectl get all

NAME                                                                   READY   STATUS    RESTARTS      AGE

pod/hostname-deployment-7b57c676b9-7l664    1/1          Running       0                   2m20s

pod/hostname-deployment-7b57c676b9-fvg4l     1/1          Running       0                   2m20s

pod/hostname-deployment-7b57c676b9-zjvqx     1/1          Running       0                   2m20s

 

NAME                                           TYPE                CLUSTER-IP      EXTERNAL-IP                          PORT(S)           AGE

service/hostname-loadbalancer   LoadBalancer   10.100.126.144   a02056dfb06f840f69f974b57   80:32697/TCP   2m20s

                                                                                                          b4bf3d7-1963070520.ap-

                                                                                                          northeast-2.elb.amazonaws.com   

service/kubernetes                       ClusterIP          10.100.0.1            <none>                                     443/TCP           3h23m

 

NAME                                                        READY   UP-TO-DATE   AVAILABLE   AGE

deployment.apps/hostname-deployment   3/3                3                       3             2m20s

 

NAME                                                                              DESIRED   CURRENT   READY   AGE

replicaset.apps/hostname-deployment-7b57c676b9       3                  3                  3             2m20s

 

 

 

 

 

8. 브라우저를 통해 확인 

    파드 3개가 서비스 됨을 확인할 수 있다.

    또한 EXTERNAL IP가 80포트로 서비스되고 있기 때문에 도메인의 시작은 http:// 이어야 한다.

 

 

 

 

 

 

9. 리소스 정리

 

- EKS 노드 그룹 삭제

  => 노드(EC2 인스턴스) 또한 함께 삭제된다.

 

 

 

-  EKS 클러스터 삭제

   => 노드 그룹 삭제 이후 삭제 가능해진다.

 

 

 

- CloudFormation 삭제

 

 

 

 

- ELB (Elastic LoadBalancer) 삭제

 

 

 

 

- root 계정의 엑세스 키 삭제

 

 

 

 

- 생성한 역할 삭제

 

 

 

 

- EC2 인스턴스 및 VPC 삭제 확인

 

 

 

 

 

 


 

'Study > seSAC 금천 4기' 카테고리의 다른 글

이노그리드 특강_CI/CD_241023  (0) 2024.10.31
클라우드_6일차_241011  (1) 2024.10.31
AWS 특강_241028  (0) 2024.10.28
DevOps/Scrum 특강_241024~241025  (1) 2024.10.25
이노그리드 CI/CD 특강_241022  (0) 2024.10.23