[SKT강화] AWS 에서 생각 해보기(1)

이동현·2022년 10월 21일
0

SKT 프로젝트

목록 보기
13/15

SKT에서 플젝을 했었는데

git push 시 AKS, docker로 배포하고 성공/실패 여부를 알림으로 알리는 것을 모두 자동화 해봤었습니다.

(그 당시에 쳤던 명령어들)
https://velog.io/@rodom1018/jenkins-%EB%B0%B0%ED%8F%AC1
https://velog.io/@rodom1018/jenkins-%EB%B0%B0%ED%8F%AC-2

다만 SKT 교육과정에서의 시간은 2주뿐이여서,
기본 구현만 가까스로 하고 생각이 조금 정리된 느낌이 없어
보강을 해보고자 합니다.

AWS / AZURE 차이점을 알아볼겸
이번 실습은 AWS 에서 진행 할 예정이고

서버는 지난 번에는 머신러닝 모델을 탑재한 무거운 서버였으나
이번에는 가벼운 웹 서버로 하면서
다양한 시도를 해볼 생각입니다.

특히 직접 부하 테스트를 해서
metric 관련한 관찰을 해볼 생각인데

사실 인프라가 이런 부하에 적재적소하게 잘 행동하는 것을
구상하는 것이라서
이러한 관찰이 도움이 될 거라 생각합니다 !

(0) 그래서 , 무슨 새로운 시도를 해볼 것인가 ?

  • MSA 도입
  • 부하 테스트

(1) cloud 9 을 사용했습니다. - 편의성 위해

cloud 9 란 ?
(aws 공식문서 왈)
AWS Cloud9은 브라우저만으로 코드를 작성, 실행 및 디버깅할 수 있는 클라우드 기반 IDE(통합 개발 환경)입니다. 코드 편집기, 디버거 및 터미널이 포함되어 있습니다.
-> ec2 에서 처음부터 ide로 이쁘게 명령어를 쳐보고 싶을 때 쓰는 것!

*이 때 IAM ROLE을 부여해야합니다.
(그냥 기존 ec2 만들어서 iam 준다고 생각하자 . )

(2) kubectl, eksctl 설치

역시나 aws 공식문서 참조
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

(3) ecr 만들기 +

https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/getting-started-cli.html
공식문서 보면서 만들고

ecr 만들면 push 어떻게 해야되는지 아주 친절하게 알려준다 (와!)

(4) docker image 만들어서 push

이는 전에 했던 것과 동일 !

(cloud9 ec2 기준) 그리고 docker hub 에서 pull 하고 ecr 로 push 한다 .

예 >
docker pull ske04186/msa_practice_1:0.0.01

docker tag ske04186/msa_practice_1:0.0.01 456188629746.dkr.ecr.ap-northeast-2.amazonaws.com/webserver:latest

docker push 456188629746.dkr.ecr.ap-northeast-2.amazonaws.com/webserver:latest

(5) VPC 생성하기

VPC 를 생성합니다.

(6) eks 생성하기

이전 단계에서 만들었던 vpc 위에 eks 를 만듭니다.

  • 리전 값 (및 ec2에 대한 메타데이터 ) 얻기
    curl -s 169.254.169.254/latest/dynamic/instance-identity/document

{
"accountId" : "456188629746",
"architecture" : "x86_64",
"availabilityZone" : "ap-northeast-2a",
"billingProducts" : null,
"devpayProductCodes" : null,
"marketplaceProductCodes" : null,
"imageId" : "ami-07ddd980ec06b8dcc",
"instanceId" : "i-0b9fef31dd2a89184",
"instanceType" : "t2.micro",
"kernelId" : null,
"pendingTime" : "2022-10-26T12:40:45Z",
"privateIp" : "10.0.12.74",
"ramdiskId" : null,
"region" : "ap-northeast-2",
"version" : "2017-09-30"
}

  • IP주소 169.254.169.254
    아마존 EC2 등 클라우드 플랫폼에서 인스턴스에 메타데이터를 제공하기 위한 내부 주소
    클라우드의 로컬호스트 같은 것 인듯 (?) - 추후 확인 필요 !
cat << EOF > eks-demo-cluster.yaml
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: eks-demo # 생성할 EKS 클러스터명
  region: ap-northeast-2 # 클러스터를 생성할 리전
  version: "1.21"

vpc:
  subnets:
  	public:
      ap-northeast-2a: { id: subnet-0869c6a10dd693dd8 }
      ap-northeast-2b: { id: subnet-0ec053c3411e3c42a }

managedNodeGroups:
  - name: node-group # 클러스터의 노드 그룹명
    instanceType: t2.micro # 클러스터 워커 노드의 인스턴스 타입
    desiredCapacity: 2 # 클러스터 워커 노드의 갯수
    volumeSize: 10  # 클러스터 워커 노드의 EBS 용량 (단위: GiB)
    iam:
      withAddonPolicies:
        imageBuilder: true # Amazon ECR에 대한 권한 추가
        # albIngress: true  # albIngress에 대한 권한 추가
        cloudWatch: true # cloudWatch에 대한 권한 추가
        autoScaler: true # auto scaling에 대한 권한 추가

cloudWatch:
  clusterLogging:
    enableTypes: ["*"]
EOF

eksctl create cluster -f eks-demo-cluster.yaml

하면 cloudformation이 생기면서 cluster 또한 생긴다.

(참고)

오류가 떴다

새로 생기는 ec2 한테 내가 생성한 vpc에서 public ip 을 할당 해주지 않는다는 뜻이어서

다음과 같이 자동 할당 옵션을 넣어주었다 .

(자잘한 오류 - 콘솔에서 보기)

aws cloud9 describe-environment-memberships --environment-id=$C9_PID --region='ap-northeast-2'

https://viassh.github.io/network/eks-setting-rbac/

이런식으로 수정을 해주었더니 잘 되었다 !

(쿠버네티스 대시보드 보기)
https://tommypagy.tistory.com/233

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

kubectl -n kube-system describe secret

0개의 댓글