Always-Try(정보보안 및 일상)

EKS Starter - 8. stateful app 배포하기 (EBS 사용) 본문

카테고리 없음

EKS Starter - 8. stateful app 배포하기 (EBS 사용)

Always-Try 2021. 9. 6. 23:12
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를 이용해서 배포한다.

 

 

 

 

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 볼륨은 수동으로 삭제

Comments