일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 정보보안
- 실습
- CFReDS
- TSK
- artifacts
- 정보보안기사
- SMS-P 인증 기준 안내서 요약
- 정보보안기사 실기
- 보안
- AWS 쿠버네티스
- 모의해킹
- AWS Opensearch
- 보안기사
- forensic
- 쿠버네티스
- hacking case
- ISMS
- AWS
- k8s
- iam
- kubernetes
- AWS EKS Udemy
- Autopsy
- AWS EKS
- 해킹
- ISMS-P 인증심사원
- 포렌식
- AWS Elasticsearch
- isms-p
- The Sleuth Kit
- Today
- Total
Always-Try(정보보안 및 일상)
EKS Starter - 8. stateful app 배포하기 (EBS 사용) 본문
https://www.udemy.com/course/amazon-eks-starter-kubernetes-on-aws/ 참고
1. 전체 아키텍쳐
- Sample app: Wordpress & MySQL
- Frontend: Wordpress
- Persistent volume(EBS) to store HTML
- Public facing ELB
- Backend: MySQL
- Persistent volume(EBS) to store MySQL data
- 알아두어야 할 부분: Wordpress를 적절히 배포하기 위해서는 파드들 간에 shared volume이 필요하다. 하지만 EBS는 여기에 만족하는 shared volume이 될 수 없다. 왜냐면 EBS는 여러 가용 영역에 있지 않기 때문이다.
- 따라서 shared volume은 반드시 EFS 여야만 한다. (Elastic File System)
- 하지만, 여기서는 단지 어떤식으로 statueful app을 배포하는지 보는 것이 목적이기 때문에 EBS를 이용해서 배포한다.
- Frontend: Wordpress
2. 네임스페이스 생성
일반적으로 네임스페이스는 프로젝트별, 클라이언트, 팀, 환경별로 분리해주는 것이 좋다.
kubectl create namespace ns-eks-course
3. 물리적 볼륨 생성
일단 현재 스토리지클래스는 확인해보자.
kubectl get storageclasses --namespace=ns-eks-course
kubectl apply -f gp2-storage-class.yaml --namespace=ns-eks-course
kubectl get storageclasses --namespace=ns-eks-course
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' --namespace=ns-eks-course
kubectl get storageclasses --namespace=ns-eks-course
pvcs.yaml 생성
kubectl apply -f pvcs.yaml --namespace=ns-eks-course
kubectl get pvc --namespace=ns-eks-course
4. MySQL backend 배포
kubectl create secret generic mysql-pass --from-literal=password=eks-course-mysql-pw --namespace=ns-eks-course
kubectl get secrets
kubectl get secrets --namespace=ns-eks-course
delploy-mysql.yaml 생성
kubectl apply -f deploy-mysql.yaml --namespace=ns-eks-course
kubectl get pvc --namespace=ns-eks-course
kubectl get pods -o wide --namespace=ns-eks-course
5. Deployment vs StatefulSet
ReplicaSet, Deployment 등등이 상태가 없는 pod를 관리하는 용도였다면, StatefulSet은 상태가 있는 Pod를 관리해주는 컨트롤러다. 즉, pod의 이름과 볼륨(Storage)을 정의할 수 있다.
6. Deploy Wordpress via Deployment
deploy-wordpress-by-deployment.yaml 파일 생성
kubectl apply -f deploy-wordpress.yaml --namespace=ns-eks-course
kubectl get pods -o wide --namespace=ns-eks-course
워드프레스 URL을 확인하자
kubectl describe service wordpress --namespace=ns-eks-course | grep Ingress (or AWS EC2 콘솔)
해당 URL을 직접 접속해보자.
7. Deploy Wordpress via StatefulSet
deploy-wordpress-by-statefulset.yaml 생성
kubectl apply -f deploy-wordpress-by-statefulset.yaml --namespace=ns-eks-course
kubectl get pods -o wide --namespace=ns-eks-course
워드프레스 URL을 확인하자
kubectl describe service wordpress --namespace=ns-eks-course | grep Ingress (or AWS EC2 콘솔)
해당 URL을 직접 접속해보자.
8. Cleanup
kubectl delete -f deploy-wordpress-by-deployment.yaml --namespace=ns-eks-course
kubectl delete -f deploy-wordpress-by-statefulset.yaml --namespace=ns-eks-course
kubectl delete -f deploy-mysql.yaml --namespace=ns-eks-course
EBS 볼륨은 수동으로 삭제