데브옵스(DevOps)를 위한 쿠버네티스 마스터/쿠버네티스 들어가기

쿠버네티스 애플리케이션과 서비스 동작 구조와 HTTP 서버 스케일링

webmaster 2022. 7. 9. 13:30
728x90
  • 실행 중인 파드는 클러스터의 가상 네트워크에 포함돼 있음 
  • 어떻게 액세스 할 수 있을까?
  • 외부에서 액세스하려면 서비스 객체를 통해 IP를 노출하는 것이 필요
  • LoadBalancer라는 서비스를 작성하면 외부 로드 밸런서가 생성
  • 로드 밸런서의 공인 IP를 통해 파드에 연결 가능 (하지만 로컬 쿠버네티스에서는 동작하지 않으며 externalDNS가 필요함, 이 기능은 GKE, EKS 같은 클라우드에서 사용 가능(구글, AWS 계정 필요))
kubectl expose deployment http-go --type=LoadBalancer --name http-go-svc --port=8080 --target-port=8080 #외부에서 접근 가능하도록 서비스를 생성
kubectl get services # 서비스 확인

디플로이먼트, 파드, 서비스가 동작하는 방식 이해

  • 사실 실제로 파드도 직접 만들지 않음
  • kubectl create deploy 명령을 실행하면 디플로이먼트가 생성 
  • 디플로이먼트가 실제 파드 객체를 생성
  • 해당 디플로이먼트가 관리하는 파드의 포트 8080을 노출하라고 명령 필요

deployment가 파드를 관리하고 서비스를 통해 파드에 접근한다.

  • 디플로이먼트의 역할
    • 디플로이먼트는 레플리카셋을 생성 
    • 레플리카셋은 수를 지정하여 알려주면 그 수만큼 파드를 유지
    • 어떤 이유로든 파드가 사라지면 레플리카셋은 누락된 파드를 대체할 새로운 파드를 생성
  • 서비스의 역할
    • 파드는 일시적이므로 언제든지 사라질 가능성 존재(일회성이 강함, 오류시 삭제후 재생성)
    • 파드가 다시 시작되는 경우에는 언제든 IP와 ID 변경됨
    • 서비스는 변화하는 파드 IP 주소의 문제를 해결하고 단일 IP 및 포트 쌍에서 여러 개의 파드 노출 
    • 서비스가 생성되면 정적 IP를 얻게 되고 서비스의 수명 내에서는 변하지 않음 
    • 클라이언트는 파드에 직접 연결하는 대신 IP 주소를 통해 서비스에 연결 
    • 서비스는 파드 중 하나로 연결을 포워딩

애플리케이션의 수평 스케일링

  • 쿠버네티스를 사용해 얻을 수 있는 큰 이점 중 하나는 간단하게 컨테이너의 확장이 가능하다는 점 
  • 파드의 개수를 늘리는 것도 쉽게 가능 
  • 파드는 디플로이먼트가 관리
kubectl scale deployment http-go --replicas=3 # pod를 3개로 복사
kubectl get svc,pod #svc, pod 확인
728x90