Kubernetes/03. k8s 오브젝트 기본 및 관리

[쿠버네티스] k8s 오브젝트의 일반적인 구성 종류

Jaden Park 2021. 6. 16. 23:58

pod
replicaSet
Deployment
Service-ClusterIP
Service-NodePort
Service-LoadBalancer
Ingress

끝마치며: 참고


pod

포드(팟)은 쿠버네티스에서 가장 작은 배포 단위이며, 각 pod마다 고유한 ip 를 할당받습니다. 여러 개의 컨테이너가 하나의 pod 에 속할 수 있습니다.


replicaSet

리플리카셋은 여러 개의 pod를 관리하며, replicas=3 과 같은 식으로 몇 개의 pod를 관리할 지 결정합니다. 즉, 신규 pod를 생성하거나 제거하여 원하는 수(replicas)를 유지하는 역할을 합니다.

kubectl scale deployment myapp --replicas=3

 


Deployment

ReplicaSet을 감싸고 있는, 배포 버전을 관리하는 오브젝트입니다. 내부적으로 ReplicaSet을 활용해 무중단버전관리를 가능하게 합니다.


Service-ClusterIP

쿠버네티스는 네트워크도 Service라는 별도의 오브젝트로 관리합니다. 서비스 중에서도 클러스터ip는 클러스터 내부에서 사용하는 프록시 서비스 입니다. 클러스터ip에 요청을 보내면 여러 개의 pod 중 하나로 자동으로 요청이 가는 것 입니다.
클러스터 ip를 사용하는 이유는 pod의 ip 는 동적이기 때문입니다. (디플로이먼트를 통해 파드가 업데이트될 때 ip를 유지한 상태에서 업데이트 되는게 아니라 그냥 pod를 죽이고 새로운 pod를 생성하는 개념)
디플로이먼트 앞에 존재해 파드의 ip 와는 상관없이 액세스할 수 잇도록하는 고유의 ip를 가진 서비스가 service-cluster ip 입니다.
클러스터 내부에서 서비스 연결은 dns를 이용합니다.

 


Service-NodePort

클러스터ip는 클러스터 내부에서만 통신할 수 있습니다. 그래서 외부 브라우저에서도 접근할 수 있도록, NodePort라는 개념이 생깁니다.
NodePort는 노드(host)에 노출되어 외부에서도 접근이 가능한 서비스 입니다.
다만, 노드/VM IP가 변경된 경우 처리를 해줘야하기 때문에 실제 서비스에서 nodeport만으로 외부 클라이언트 노출하는 방식은 권장되지 않고 로드 밸런싱을 사용권장합니다.
NodePort에는 노드가 여러 개일 때 nodeport를 생성하면 모든 node에 nodeport가 생성된다는 중요한 특징이 있습니다.
이때 어떤 노드에 요청을 보내도 내부의 원하는 clusterIP로 자동 연결을 해주어 로드밸런서와 유사한 기능을 하기도 합니다.


Service-LoadBalancer

모든 노드에 외부 접속 분산 요청을 처리하기 위해서는 NodePort보다는 Load Balancer 사용이 적절합니다.
단, 1개의 IP만을 외부에 노출하게 되며 해당 IP로 모든 트래픽을 부하 분산합니다.
HTTP, TCP, UDP 등 대부분의 프로토콜과 통신이 가능합니다.

 

 


Ingress

지금까지 오브젝트들이 IP포트로만 접속하는 서비스였다면, Ingress는 도메인 이름, 도메인 패스를 따라 내부에 있는 클러스터IP에도 같은 이름으로 연결할 수 있도록 해줍니다. Ingress 하나만 만들어도 여러 개의 로드밸런서를 만들어 자원을 낭비하는 것을 방지할 수 있습니다.


 

끝마치며 : 참고

 

해당 글은 44bits 기술블로그의 유튜브 [초보를 위한 쿠버네티스 안내서]를 참고하여 작성했습니다.