권장 라벨
권장 라벨 (Recommended Labels)
kubectl과 대시보드보다 더 많은 도구로 쿠버네티스 객체를 시각화하고 관리할 수 있어요. 공통 라벨 집합을 사용하면 모든 도구가 이해할 수 있는 공통된 방식으로 객체를 설명해 도구가 상호 운용 가능하게 동작해요.
도구 지원에 더해 권장 라벨은 쿼리할 수 있는 방식으로 애플리케이션을 설명해요.
이 메타데이터는 애플리케이션이라는 개념을 중심으로 구성돼요. 쿠버네티스는 플랫폼 서비스(PaaS)가 아니며 애플리케이션에 대한 공식적인 개념을 가지거나 강제하지 않아요. 대신 애플리케이션은 비공식적이며 메타데이터로 설명돼요. 애플리케이션이 무엇을 포함하는지에 대한 정의는 느슨해요.
참고:
공유 라벨과 애노테이션은 공통 접두사 app.kubernetes.io 를 공유해요. 접두사가 없는 라벨은 사용자에게 사적인 것이에요. 공유 접두사는 공유 라벨이 사용자 정의 라벨과 간섭하지 않도록 보장해요.
출처: 문서
본문
라벨 (Labels)
이 라벨들을 완전히 활용하려면 모든 리소스 객체에 적용해야 해요.
| 키 | 설명 | 예시 | 유형 |
|---|---|---|---|
app.kubernetes.io/name |
애플리케이션의 이름 | mysql |
string |
app.kubernetes.io/instance |
애플리케이션의 인스턴스를 식별하는 고유한 이름 | mysql-abcxyz |
string |
app.kubernetes.io/version |
애플리케이션의 현재 버전(예: SemVer 1.0, 리비전 해시 등) | 5.7.21 |
string |
app.kubernetes.io/component |
아키텍처 안의 컴포넌트 | database |
string |
app.kubernetes.io/part-of |
이것이 일부인 상위 수준 애플리케이션의 이름 | wordpress |
string |
app.kubernetes.io/managed-by |
애플리케이션 운영을 관리하는 데 사용되는 도구 | Helm |
string |
이 라벨들이 실제로 어떻게 사용되는지 보여주기 위해 다음 StatefulSet 객체를 고려해 봐요:
# This is an excerpt
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
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의 다른 설치인 경우 한 번 이상 설치될 수 있어요.
애플리케이션의 이름과 인스턴스 이름은 별도로 기록돼요. 예를 들어 WordPress는 app.kubernetes.io/name 이 wordpress 면서 인스턴스 이름은 app.kubernetes.io/instance 값 wordpress-abcxyz 로 표현돼요. 이를 통해 애플리케이션과 애플리케이션의 인스턴스를 식별할 수 있어요. 애플리케이션의 모든 인스턴스는 고유한 이름을 가져야 해요.
예시 (Examples)
이 라벨들을 사용하는 다양한 방법을 보여주기 위해 다음 예시는 복잡도가 다양해요.
간단한 무상태 서비스 (A Simple Stateless Service)
Deployment 와 Service 객체로 배포된 간단한 무상태 서비스의 경우를 고려해 봐요. 다음 두 스니펫은 라벨을 가장 단순한 형태로 사용하는 방법을 나타내요.
Deployment는 애플리케이션 자체를 실행하는 파드를 감독하는 데 사용돼요.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
Service는 애플리케이션을 노출하는 데 사용돼요.
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
데이터베이스가 있는 웹 애플리케이션 (Web Application With A Database)
약간 더 복잡한 애플리케이션을 고려해 봐요: Helm으로 설치된, 데이터베이스(MySQL)를 사용하는 웹 애플리케이션(WordPress). 다음 스니펫은 이 애플리케이션을 배포하는 데 사용되는 객체의 시작 부분을 보여줘요.
다음 Deployment 의 시작 부분은 WordPress용이에요:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
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는 WordPress를 노출하는 데 사용돼요:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
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 으로 노출돼요:
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
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는 MySQL을 WordPress의 일부로 노출하는 데 사용돼요:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
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 양쪽에 대한 정보가 포함된 것을 볼 수 있어요.