객체 이름과 ID

객체 이름과 ID (Object Names and IDs)

클러스터 안의 각 객체에는 해당 리소스 종류 안에서 유일한 이름(Name) 이 있어요. 모든 Kubernetes 객체에는 클러스터 전체에서 유일한 UID도 있어요. 이름과 UID가 어떻게 구분되고 왜 둘 다 필요한지 살펴볼게요.

출처: 문서

본문

예를 들어, 같은 네임스페이스 안에서 myapp-1234라는 이름의 파드를 여러 개 만들 수는 없지만, myapp-1234라는 파드 하나와 myapp-1234라는 디플로이먼트(Deployment) 하나는 각각 가질 수 있어요.

유일하지 않은 사용자 제공 속성에는 Kubernetes가 라벨(labels)어노테이션(annotations)을 제공해요.

이름 (Names)

리소스 URL(예: /api/v1/pods/some-name)에서 객체를 참조하는 클라이언트 제공 문자열이에요.

주어진 종류(kind)의 객체는 한 번에 하나의 이름만 가질 수 있어요. 다만 객체를 삭제하면 같은 이름으로 새 객체를 만들 수는 있어요.

이름은 같은 리소스의 모든 API 버전에서 유일해야 해요. Kubernetes는 다음 네 가지 속성의 조합으로 객체를 유일하게 식별해요.

  • API 그룹 (예: apps)
  • 리소스 종류 (예: deployments)
  • 네임스페이스 (네임스페이스 범위 리소스의 경우)
  • 이름

v1이나 v1beta1 같은 다른 API 버전으로 리소스에 접근할 수 있지만, 버전은 같은 기본 객체를 표현하는 서로 다른 표현일 뿐이에요. 버전은 유일 식별의 일부가 아니므로, 다른 API 버전을 사용해 같은 네임스페이스에 같은 이름과 리소스 종류의 객체 두 개를 만들 수는 없어요.

리소스 생성 요청에서 name 대신 generateName을 제공하면 서버가 이름을 생성할 수도 있어요. generateName을 사용하면 제공된 값이 이름의 접두사가 되고, 서버가 생성된 접미사를 덧붙여요. 생성된 이름이라도 기존 이름과 충돌해 HTTP 409 응답이 발생할 수 있어요. 다만 Kubernetes v1.31부터는 서버가 HTTP 409 응답을 반환하기 전에 유일한 이름을 만들기 위해 최대 8번 시도하므로, 이런 충돌이 발생할 가능성이 훨씬 줄었어요.

아래는 리소스에 흔히 쓰이는 네 가지 이름 제약 유형이에요.

DNS 서브도메인 이름 (DNS Subdomain Names)

대부분의 리소스 종류는 RFC 1123에 정의된 DNS 서브도메인 이름으로 사용할 수 있는 이름을 요구해요. 즉 이름은:

  • 253자를 넘지 않아야 함
  • 소문자 영숫자, - 또는 .만 포함해야 함
  • 영숫자로 시작해야 함
  • 영숫자로 끝나야 함

RFC 1123 라벨 이름 (RFC 1123 Label Names)

일부 리소스 종류는 RFC 1123에 정의된 DNS 라벨 표준을 따르는 이름을 요구해요. 즉 이름은:

  • 최대 63자
  • 소문자 영숫자 또는 -만 포함
  • 알파벳으로 시작
  • 영숫자로 끝

RFC 1035 라벨 이름 (RFC 1035 Label Names)

일부 리소스 종류는 RFC 1035에 정의된 DNS 라벨 표준을 따르는 이름을 요구해요. 즉 이름은:

  • 최대 63자
  • 소문자 영숫자 또는 -만 포함
  • 알파벳으로 시작
  • 영숫자로 끝

경로 세그먼트 이름 (Path Segment Names)

일부 리소스 종류는 이름이 경로 세그먼트(path segment)로 안전하게 인코딩될 수 있어야 해요. 즉 이름은 . 또는 ..이면 안 되고, / 또는 %를 포함하면 안 돼요.

nginx-demo라는 이름의 파드 매니페스트 예시:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

UID

Kubernetes가 객체를 유일하게 식별하기 위해 시스템이 생성하는 문자열이에요.

Kubernetes 클러스터 전체 수명 기간에 걸쳐 생성된 모든 객체는 서로 다른 UID를 가져요. 이는 비슷한 엔티티의 역사적 발생을 구분하기 위한 것이에요.

Kubernetes UID는 범용 고유 식별자(UUID)예요. UUID는 ISO/IEC 9834-8과 ITU-T X.667로 표준화되어 있어요.

다음 단계

더 알아보기 (Learn more)