객체 이름과 ID
객체 이름과 ID (Object Names and IDs)
쿠버네티스 클러스터의 각 객체는 그 리소스 타입에 대해 고유한 이름(Name) 을 가져요. 또한 모든 쿠버네티스 객체는 클러스터 전체에 걸쳐 고유한 UID를 가집니다.
예를 들어 같은 네임스페이스 안에 myapp-1234라는 이름의 Pod는 하나만 가질 수 있지만, 각각 이름이 myapp-1234인 Pod 하나와 Deployment 하나는 가질 수 있어요.
고유하지 않은 사용자 제공 속성에는 쿠버네티스가 라벨과 애노테이션을 제공합니다.
이름 (Names)
리소스 URL에서 객체를 가리키는 클라이언트 제공 문자열입니다. 예: /api/v1/pods/some-name.
주어진 종류의 객체는 한 번에 하나의 이름만 가질 수 있어요. 하지만 객체를 삭제하면 같은 이름으로 새 객체를 만들 수 있습니다.
이름은 같은 리소스의 모든 API 버전에 걸쳐 고유해야 합니다.
쿠버네티스는 네 가지 속성의 조합으로 객체를 고유하게 식별해요:
- API 그룹 (예:
apps) - 리소스 타입 (예:
deployments) - 네임스페이스 (네임스페이스가 있는 리소스의 경우)
- 이름
다른 API 버전(예: v1, v1beta1)으로 리소스에 접근할 수 있지만, 버전은 같은 기본 객체의 다른 표현일 뿐이에요. 버전은 고유 식별의 일부가 아니므로, 다른 API 버전을 쓴다고 해서 같은 네임스페이스에 같은 이름·리소스 타입의 객체 두 개를 만들 수는 없습니다.
참고: 객체가 물리적 실체를 나타내는 경우(예: Node가 물리 호스트를 나타냄), 호스트를 삭제·재생성 없이 같은 이름으로 재생성하면 쿠버네티스는 새 호스트를 이전 호스트로 취급해 불일치가 생길 수 있어요.
리소스 생성 요청에서 name 대신 generateName을 제공하면 서버가 이름을 생성할 수 있어요. generateName을 쓰면 제공된 값이 이름 접두사로 쓰이고, 서버가 생성한 접미사를 붙입니다. 이름이 생성되더라도 기존 이름과 충돌하면 HTTP 409 응답이 나올 수 있어요. 쿠버네티스 v1.31 이후로는 서버가 HTTP 409를 반환하기 전에 고유한 이름을 생성하려 최대 8번 시도하므로 충돌 가능성이 훨씬 낮아졌습니다.
리소스에 흔히 쓰이는 네 가지 이름 제약 타입:
DNS 서브도메인 이름 (DNS Subdomain Names)
대부분의 리소스 타입은 RFC 1123에 정의된 DNS 서브도메인 이름으로 쓸 수 있는 이름을 요구합니다. 즉 이름은:
- 253자 이하여야 함
- 소문자 영숫자,
-,.만 포함해야 함 - 영숫자로 시작해야 함
- 영숫자로 끝나야 함
RFC 1123 라벨 이름 (RFC 1123 Label Names)
일부 리소스 타입은 RFC 1123의 DNS 라벨 표준을 따르는 이름을 요구합니다. 즉 이름은:
- 63자 이하여야 함
- 소문자 영숫자 또는
-만 포함해야 함 - 알파벳 문자로 시작해야 함
- 영숫자로 끝나야 함
참고:
RelaxedServiceNameValidation기능 게이트가 켜져 있으면 Service 객체 이름은 숫자로 시작할 수 있어요.
RFC 1035 라벨 이름 (RFC 1035 Label Names)
일부 리소스 타입은 RFC 1035의 DNS 라벨 표준을 따르는 이름을 요구합니다. 즉 이름은:
- 63자 이하여야 함
- 소문자 영숫자 또는
-만 포함해야 함 - 알파벳 문자로 시작해야 함
- 영숫자로 끝나야 함
참고: RFC 1123는 라벨이 숫자로 시작하는 것을 기술적으로 허용하지만, 현재 쿠버네티스 구현은 RFC 1035와 RFC 1123 라벨 모두 알파벳 문자로 시작하도록 요구합니다. 예외는
RelaxedServiceNameValidation기능 게이트가 Service 객체에 대해 켜진 경우로, 이때는 Service 이름이 숫자로 시작할 수 있어요.
경로 세그먼트 이름 (Path Segment Names)
일부 리소스 타입은 이름을 경로 세그먼트로 안전하게 인코딩할 수 있어야 합니다. 즉 이름은 .이나 ..일 수 없고, /이나 %를 포함할 수 없어요.
nginx-demo라는 이름의 Pod 매니페스트 예시:
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
참고: 일부 리소스 타입은 이름에 추가 제한이 있습니다.
UID
쿠버네티스 시스템이 생성하는, 객체를 고유하게 식별하는 문자열이에요.
쿠버네티스 클러스터의 전체 수명 동안 생성된 모든 객체는 서로 다른 UID를 가집니다. UID는 비슷한 실체의 역사적 발생을 구분하기 위한 것입니다.
쿠버네티스 UID는 보편적으로 고유한 식별자(UUID) 입니다. UUID는 ISO/IEC 9834-8과 ITU-T X.667로 표준화되어 있어요.