[쿠버네티스] Chapter 5-A. Organizing API Objects Using Labels, Selectors, and Namespaces


Labels

마이크로 서비스 아키텍처를 사용하면 배포된 마이크로 서비스의 수가 20개 이상을 쉽게 초과할 수 있기 때문에 임의적인 기준에 따라 그들을 더 작은 그룹으로 구성하는 방법이 필요하다. 이는 label을 통해 이루어진다.

레이블은 클러스터의 모든 사용자가 시스템에서 Object의 역할을 식별할 수 있도록 개체에 연결하는 키-값 쌍이다. 키와 값은 모두 원하는 대로 지정할 수 있는 간단한 문자열이다. 개체는 둘 이상의 레이블을 가질 수 있지만 레이블 키는 해당 object 내에서 고유해야 한다. 일반적으로 객체를 작성할 때 객체에 레이블을 추가하지만, 객체의 레이블은 나중에 변경할 수도 있다.

labels

레이블은 레이블 선택기를 사용하여 리소스를 선택할 때 사용되며 선택기에 지정된 레이블을 기준으로 리소스를 필터링한다. 팟들은 stable, beta, canary, 총 3 가지 서비스를 운영하고 있다.

라벨 선택기를 사용한 객체 필터링
포드에 추가한 레이블을 사용하면 각 개체를 식별하고 시스템에서 해당 개체를 찾을 수 있다. 지금까지 이러한 레이블은 개체를 나열할 때 추가 정보만 제공했다. 그러나 레이블 선택기를 사용하여 레이블을 기반으로 개체를 필터링할 때 레이블의 실제 성능이 발휘된다. 레이블 선택기를 사용하면 특정 레이블을 포함하는 포드 또는 기타 개체의 하위 집합을 선택하고 해당 개체에 대한 작업을 수행할 수 있다. 레이블 선택기는 개체가 특정 값을 가진 특정 레이블 키를 포함하는지 여부에 따라 개체를 필터링하는 기준이다.

예를 들면, nodeSelector: gpu: “true”라면, nodeSelector가 K8s에게 이 팟을 gpu=true 레이블을 갖고 있는 노드에게 배포하라라는 뜻이다.

Annotations

어노테이션도 키-값 쌍인데 단지 식별 정보를 보유하기 위한 것이 아니라 훨씬 더 큰 정보 조각을 말한다. 일반적으로 Kubernetes에 새로운 기능을 도입할 때 사용된다. Annotation이 유용하게 사용되는 경우는 Pod나 다른 API 오브젝트에 설명을 추가해 두는 것이다. 이렇게 함으로서 클러스터를 사용하는 모든 사람이 개별 오브젝트에 관한 정보를 신속하게 찾아볼 수 있다. Annotation은 레이블처럼 사용자가 원하는 값을 설정하기 보다는 쿠버네티스 시스템에서 필요한 정보들을 표시해 주기 위해서 사용한다.

새로운 기능의 초기 버전은 API 개체에 새로운 필드를 도입하지 않으며 어노테이션은 중간에 사용된다. 즉, 필드의 필요성이 합의되면 API가 변경되고 API 개체에 대한 설명을 추가하는 데 사용된다. 예를 들어, 객체 작성자의 이름을 지정하는 데 사용되는 어노테이션을 들 수 있다.

또한, API를 바꾸지 않고 새로운 feature를 테스트하는 용도로 사용 가능하다.

Namespaces

K8s 네임스페이스는 개체 이름의 범위를 제공한다. 예를 들어, 멀티 테넌트(Multi-tenant) 환경에서 리소스를 분리하고, 리소스를 프로덕션, 개발 및 QA 환경으로 분할하는 데 사용된다. 리소스 이름은 네임스페이스 내에서만 고유해야한다. 자바의 package처럼