-
[Kubernetes] 권장 레이블공부/데이터 2023. 4. 16. 22:22
kubectl, 대시보드 등의 도구로 쿠버네티스 오브젝트를 시각화하고 관리할 수 있습니다. 공통 레이블 셋은 오브젝트를 식별하고 도구들이 상호 운용할 수 있도록 지원합니다.
권장 레이블은 쿼리하여 애플리케이션을 식별하는 데에 도움이 됩니다.
메타데이터는 애플리케이션 개념을 중심으로 정리됩니다. 쿠버네티스는 PaaS가 아니며 공식적인 애플리케이션 개념을 강요하지 않습니다. 대신, 애플리케이션은 비공식적으로 메타데이터로 설명됩니다. 애플리케이션의 정의는 유연합니다.
💡 메타데이터는 애플리케이션 관리를 쉽게하기 위해 권장되는 레이블이지만, 코어 도구에는 필요하지 않습니다.
app.kubernetes.io
는 공유 레이블과 주석에서 사용되는 공통 접두사입니다. 사용자 정의 레이블에는 이 접두사가 없으며, 공유 접두사는 사용자 정의 레이블에 영향을 미치지 않도록 합니다.공유 레이블
레이블을 최대한 활용하려면 모든 리소스 오브젝트에 적용해야 합니다.
키 설명 예시 타입 app.kubernetes.io/name 애플리케이션 이름 mysql 문자열 app.kubernetes.io/instance 애플리케이션의 인스턴스를 식별하는 고유한 이름 mysql-abcxzy 문자열 app.kubernetes.io/version 애플리케이션의 현재 버전 (예: a semantic version, revision hash 등.) 5.7.21 문자열 app.kubernetes.io/component 아키텍처 내 구성요소(component) database 문자열 app.kubernetes.io/part-of 애플리케이션의 전체 이름 (애플리케이션이 속한 그룹을 정의) wordpress 문자열 app.kubernetes.io/managed-by 애플리케이션의 작동을 관리하는 데 사용되는 도구 helm 문자열 권장 레이블을 사용하는 것은 애플리케이션을 관리하는 데 매우 유용합니다. 레이블을 활용하면 특정 애플리케이션의 인스턴스를 쉽게 관리하거나, 레이블을 기반으로 한 셀렉터(Selector)를 사용하여 특정 오브젝트를 선택하는 등의 작업을 수행할 수 있습니다.
위 레이블 예시는 스테이트풀셋 오브젝트을 고려합니다.
# 아래는 전체 명세의 일부분 apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress app.kubernetes.io/managed-by: helm
애플리케이션과 애플리케이션 인스턴스
애플리케이션은 같은 쿠버네티스 클러스터, 같은 네임스페이스에서 여러 번 설치될 수 있습니다. 예를 들어 WordPress의 경우, 쿠버네티스 클러스터에 여러 버전이 설치되어 각각 다른 웹사이트를 제공할 수 있습니다.
애플리케이션 및 애플리케이션 인스턴스 이름은 별도로 기록됩니다. 예를 들어 WordPress의 경우, 애플리케이션 이름은
app.kubernetes.io/name
레이블에wordpress
값을 가지며, 애플리케이션 인스턴스 이름은app.kubernetes.io/instance
레이블에wordpress-abcxzy
값을 가집니다. 이를 통해 애플리케이션과 애플리케이션 인스턴스를 식별할 수 있습니다. 모든 애플리케이션 인스턴스는 고유한 이름을 가져야 합니다.예시
위 레이블을 사용하는 다른 방식에 대한 예시는 다양한 복잡성이 있습니다.
단순한 스테이트리스 서비스
Deployment
과Service
객체를 통해 배포된 단순한 스테이트리스 서비스의 경우를 살펴보겠습니다. 다음 두 식별자는 레이블을 가장 간단한 형태로 사용하는 방법을 나타냅니다.Deployment
은 애플리케이션을 실행하는 파드를 감시하는 데 사용합니다.apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: myservice app.kubernetes.io/instance: myservice-abcxzy ...
Service
는 애플리케이션을 노출하기 위해 사용합니다.apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: myservice app.kubernetes.io/instance: myservice-abcxzy ...
데이터베이스가 있는 웹 애플리케이션
Helm을 이용해 웹 애플리케이션(WordPress)을 설치하는 것처럼, 더 복잡한 애플리케이션도 고려할 수 있습니다. 다음 식별자는 이 애플리케이션을 배포하는 데 사용하는 오브젝트의 시작을 보여줍니다.
WordPress를 배포할 때
Deployment
를 사용합니다.apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: wordpress app.kubernetes.io/instance: wordpress-abcxzy app.kubernetes.io/version: "4.9.4" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: server app.kubernetes.io/part-of: wordpress ...
Service
는 애플리케이션을 노출하기 위해 사용합니다.apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: wordpress app.kubernetes.io/instance: wordpress-abcxzy app.kubernetes.io/version: "4.9.4" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: server app.kubernetes.io/part-of: wordpress ...
MySQL의
StatefulSet
에는 MySQL 소속 및 상위 애플리케이션에 대한 메타 데이터가 노출됩니다.apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress ...
Service
는 WordPress의 일부로 MySQL을 노출하는 데 이용합니다.apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress ...
MySQL
StatefulSet
과Service
로 MySQL과 WordPress가 더 큰 범위의 애플리케이션에 포함되어 있는 것을 알 수 있습니다.레퍼런스
https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/common-labels/