쿠버네티스 서비스 타입과 배포 전략

Son_Doobu96·2023년 2월 13일
0

DevOps 이론

목록 보기
22/25
post-thumbnail

쿠버네티스의 서비스 타입 (ServiceTypes)

▶ ClusterIP :

클러스터 내부 IP에서 서비스를 노출합니다. 이 값을 선택하면 클러스터 내에서만 서비스에 연결할 수 있습니다. type서비스에 대해 명시적으로 지정하지 않은 경우 사용되는 기본값입니다 . 인 그레스 또는 게이트웨이 API를 사용하여 서비스를 공개할 수 있습니다.

디폴트 설정으로 서비스에 클러스터 IP(내부 IP)를 할당한다. 쿠버네티스 내에서는 서비스에 접근이 가능하지만 클러스터 외부에서는 접근이 불가능하다. (외부IP 할당 X)

각 pod들은 생성 및 삭제가 주기적으로 일어난다. 그럴때마다 각 pod에 부여된 IP가 변화 되는데 ClusterIP를 통해 라벨링된 pod들을 셀렉터로 묶어 고정된 IP로 호출할 수 있다.

▶ NodePort :

정적 포트( )에서 각 노드의 IP에 서비스를 노출합니다 NodePort. 노드 포트를 사용할 수 있도록 하기 위해 Kubernetes는 서비스를 요청한 것과 동일하게 클러스터 IP 주소를 설정합니다 type: ClusterIP.

클러스터 IP뿐 아니라 모든 노드의 IP와 포트를 통해서도 접근이 가능하게 된다.

각 노드가 외부와 통신할 수 있는 포트를 개방한다.

▶ LoadBalancer :

클라우드 제공자의 부하 분산 장치를 사용하여 서비스를 외부에 노출합니다.

외부 IP를 가지고 있는 로드밸런서를 할당함으로써 클러스터 외부에서 접근이 가능하도록 만든다.

로드밸런서의 역할은 부하분산과 동시에 분산된 노드의 엔드포인트를 하나로 모으는 것이다. 이를 통해 사용자가 서비스에 접근하기 쉽게 만들어준다. 즉 각 노드 포트를 로드밸런서를 통해 엮어줌으로써 트래픽 분산과 동시에 통합된 엔드포인트의 사용이 가능하다.

▶ ExternalName :

해당 값과 함께 레코드를 반환하여 서비스를 필드의 내용 externalName(예: )에 매핑합니다. 어떤 종류의 프록시도 설정되지 않습니다. foo.bar.example.comCNAME

외부 서비스를 쿠버네티스 내부에서 호출하고자 할 때 사용한다. 클러스터 내의 pod들은 클러스터 IP를 가지고 있기 때문에 클러스터 IP 대역 밖의 서비스를 호출하고자하면 NAT 설정등 복잡한 설정이 필요하다. 이때 ExternalName 타입으로 설정하고 주소를 DNS로 설정해주면 서비스로 들어오는 모든 요청을 포워딩해준다. (DNS가 아닌 직접 IP를 이용해도 된다.)


쿠버네티스의 배포 전략

■ 쿠버네티스가 지원하는 배포 전략

▶ 재생성 (Recreate):

이전 버전을 삭제하고 새 버전 생성

IaC를 이용한 가장 기본적인 방법으로 이전 버전을 삭제하고 새 버전을 생성하는 방식으로 배포전략이 구성된다 하지만 서비스 중단 시간(Downtime)이 있다는 문제가 있다.

▶ 롤링 배포:

이전 버전을 scale down하고, 새 버전을 scale up 하는 방식으로 단계별로 교체, 롤아웃(rollout)이라고 부릅니다.

쿠버네티스의 롤링배포의 default 설정은 25% max unavailable, 25% max surge이지만 사용자의 설정을 통해 조정 가능하며 정수로도 설정 가능하다.
이를 통해 배포의 속도를 조정할 수 있다.

max unavailable : 최대 이용 불가능한 pod 수(%)

  • 업데이트시 사용할 수 없는 최대 pod수를 결정한다.

max surge : 최대 생성 가능한 pod 수(%)

  • 업데이트시 추가로 생성할 수 있는 pod의 수를 결정한다. 예를 들어 max surge가 3이고 replica가 5로 설정되어 있다면 업데이트시 최대 8개의 pod가 존재할 수 있다.

▶ 블루-그린 배포 전략

새 버전과 구버전으로 2세트를 마련하고 이를 한꺼번에 교체하는 전략
무중단 서비스에 가깝지만 필연적으로 배포 중단 시점이 발생한다.

deployment의 Labels를 통해 2개의 버전을 운영하고 서비스 명세의 selector를 교체하는 방식으로 배포를 진행한다.

▶카나리 배포 전략

특정 서버나 소수 유저들에게 새로운 버전을 배포하고 추후 안전하다는 판단이 되면 모든 서버에 새로운 버전을 배포하는 점진적 배포방식이다.

대표적으로 버전 업데이트 된 레플리카 수를 늘려가거나 퍼센테이지를 조정하며 배포를 진행한다.

profile
DevOps를 꿈꾸는 엔지니어 지망생!

0개의 댓글