일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- The Sleuth Kit
- AWS Elasticsearch
- 쿠버네티스
- AWS 쿠버네티스
- artifacts
- 보안기사
- TSK
- iam
- 포렌식
- AWS EKS
- 실습
- isms-p
- SMS-P 인증 기준 안내서 요약
- 정보보안기사 실기
- AWS
- hacking case
- 모의해킹
- 해킹
- CFReDS
- Autopsy
- kubernetes
- ISMS-P 인증심사원
- 보안
- k8s
- AWS EKS Udemy
- AWS Opensearch
- forensic
- 정보보안기사
- 정보보안
- ISMS
- Today
- Total
Always-Try(정보보안 및 일상)
EKS Starter - 7. steteless sample app 배포하기 본문
https://www.udemy.com/course/amazon-eks-starter-kubernetes-on-aws/ 참고
본 포스팅에서는
https://github.com/kubernetes/examples/tree/master/guestbook 을 참고하여 Kubernetes 및 Docker를 사용하여 간단한 다중 계층 웹 애플리케이션을 빌드하고 배포하는 방법을 실습할 것이다.
1. Deploy backend resources
2. Deploy frontend resources
3. Scaling Pods up/down
4. Perform some chaos testing
1. Deploy backend resources
마스터 파드를 배포하고, 마스퍼 파드 서비스 올리기 위한 redis-master.yaml 파일을 생성한다.
그리고 적용한다.
kubectl apply -f redis-master.yaml
kubectl get pods
파드가 생성되긴 했는데 계속 기다려봐도 STATUS가 RUNNING으로 변하지 않는다... 왜그럴까 확인해보자.
kubectl describe pods redis-master-f46ff57fd-4rnjx
스케쥴링이 실패했다고 나오며 사용 가능한 노드가 없다고 한다. 실행 시켜놓은 노드가 1개 있긴한데, 이상하다. 다시 살펴보자.
https://kubernetes.io/ko/docs/tasks/debug-application-cluster/debug-pod-replication-controller/
https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-pod-status-troubleshooting/
https://stackoverflow.com/questions/64965832/aws-eks-only-2-pod-can-be-launched-too-many-pods-error
위 3개의 게시물들을 보다보니, 리소스가 모자라서 저런 Error 메시지가 발생하는 것으로 보이고 리소스가 모자란 이유는 인스턴스 타입마다 할당되는 인터페이스 그리고 인터페이스별 IP 개수가 정해져 있는데 이미 core dns 등등 다른 서비스에 IP가 다 할당되어서 할당해줄 IP가 없기 때문인 것으로 보인다. 더 정확한 것은 추후 알아보기로 하고 일단 노드를 5개로 늘렸더니 해결됐다.(2개 늘렸더니 여전히 부족하다고 해서..ㅠ)
다시 계속해서 진행해보자.
kubectl get pods
kubectl get services
위 캡쳐에서 redis-master의 클러스터 IP를 보면 사설 IP이다. 즉, 외부에 공개되어 있지 않고 클러스터 내에서만 접근 가능하다는 것이다.
이제 슬레이브 파드를 배포하고, 슬레이브 파드 서비스 올리기 위한 redis-master.yaml 파일을 생성한다.
kubectl apply -f redis-slave.yaml
kubectl apply -f redis-slave.yaml
kubectl get pods
kubectl get services
그리고 각각의 파드들이 클러스터 내에서 어떻게 적용되어 있는지 확인해보자.
kubectl get pods -o wide
각 파드들과 파드가 생성된 노드들의 정보가 나온다. 여기서 특정 노드를 선택해서 자세히 살펴보자.
kubectl describe node ip-192-168-86-33.ap-northeast-2.compute.internal
여기에는 노드의 상태, AMI 이미지 등등 아주 상세한 정보들이 나오니 참고 바란다.
그리고 AWS 콘솔에서도 파드와 노드의 매핑 관계를 알 수 있다. 특정 노드 인스턴스를 선택하고 네트워킹 메뉴에 가보면 보조 프라이빗 IPv4 주소를 볼 수 있다.
2. Deploy FrontEnd resources
backend resources를 생성했으니 이제 frontend resource를 생성하자.
Guestbook pods와 Guestbook service를 frontend.yaml 파일을 생성하자.
kubectl apply -f frontend.yaml
kubectl get pods -o wide
kubectl get service frontend
kubectl describe service frontend
그리고 AWS 콘솔의 로드 밸런서로 한번 가보면 로드밸런서가 생성된 것을 볼 수 있고, 포워딩 정보도 볼 수 있다.
그리고 로드밸런서의 DNS 주소를 브라우저 주소창에 입력해보면 Guestbook 메뉴가 나오는 것을 볼 수 있다.
3. Scaling Pods up/down
이제 frontend 파드를 스케일링 해보자. 먼저 현재 상태부터 보자.
kubectl get deployment frontend
kubectl get pods
파드 1개의 상태가 이상하다. 노드를 다시 늘려주고 확인해보자.
자 이제 파드는 정상 상태로 돌아왔다. 3개의 파드를 5개로 늘려보자.
2개의 방법이 있다.
먼저 deploy한 yaml 파일의 replicas 개수를 조정해서 늘릴 수 있다.
kubectl apply -f frontend.yaml
kubectl get deployment frontend
kubectl get pods
2번째 방법으로는 yaml 파일은 변경하지 않고 scale 명령어를 통해 스케일링 할 수 있다.
kubectl get rs
kubectl scale --replicas 3 rs frontend-6c6d6dfd4d
kubectl get deployment frontend
kubectl get pods
kubectl get rs
어허.. 근데 3개로 안변하고 그대로 5개다.
이유인 즉슨, 3개로 수동으로 변경하려고 해도 replicaset(rs) 에 5개로 정의되어 있기 때문에 5개로 다시 원복되어 적용되는 것이라고 한다. rs가 없으면 이 방법을 사용할 수 있을까? 라고 생각해본다.
또 다른 방법이 더 있다. k8s dashboard에 접속해서 deployment에 들어가면 오른쪽 상단에 scale이라는 메뉴가 있다. 그 메뉴를 이용해서도 수정 가능하다.
4. Perform some chaos testing
2개의 터미널을 띄워놓고 1개의 터미널로는 파드, 노드를 삭제하고 다른 터미널에서는 파드, 노드의 상태를 확인해보자. (chaos monkey가 되어보자)
결과를 요약하면 다음과 같다. 파드를 삭제하면 새로운 파드가 생성된다. (replica에 정의된 개수를 맞추기 위해)
노드를 삭제하면 해당 노드에 있던 파드들은 다른 노드로 이동해서 다시 실행된다. 그리고 오토스케일링 그룹에 노드가 포함된다면 노드가 삭제되면 새로운 노드가 다시 생성된다.
4-1. 파드 삭제
파드 상태 확인 kubectl get pods -o wide
파드 삭제 kubectl delete pod pod's_name
4-2. 노드 삭제
노드 삭제 콘솔에서 인스턴스 삭제
파드 상태 확인 kubectl get pods -o wide
노드 상태 확인
삭제에 대한 캡처도 첨부하고 싶었으나 개인 AWS 계정에서 테스트 하기 때문에 billing의 압박으로 인해 얼른 스택을 삭제하고 싶어 생략했다.
'AWS' 카테고리의 다른 글
AWS DNA - 1주차 Peak Load Control with Serverless - 1/3 (0) | 2021.09.13 |
---|---|
AWS DNA 3기 합격 (Digital Native Architects) (0) | 2021.09.07 |
EKS Starter - 9. Fargate on EKS (0) | 2021.09.05 |
EKS Starter - 6. 쿠버네티스 Dashboard (0) | 2021.09.05 |
EKS Starter - 5. EKS in depth (0) | 2021.09.04 |