배포를 생성하는 동안 spec-selector-matchLabels가 무엇입니까?


18

에서 는 Kubernetes 문서 :

선택기 필드는 배포에서 관리 할 포드를 찾는 방법을 정의합니다.

그러나 배포를 만들 때 이미 포드 템플릿을 배포의 일부로 지정했습니다. 그렇다면 왜 선택기가 필요할까요?

포드가 이미 개별적으로 시작되었지만 나중에 배포 관리를 통해 관리되는 서비스처럼 사용해야합니까?

답변:


8

이 질문에 대한 답변 은 kubernetes.io의 배포 섹션 에서 찾을 수 있습니다.

그렇다면 왜 선택기가 필요할까요?

k8s v 1.14에 대한 문서 에서 아래 인용

.spec.selector이 배포가 대상으로하는 포드의 레이블 선택기를 지정 하는 필수 필드입니다.

.spec.selector일치해야합니다. 그렇지 않으면 .spec.template.metadata.labelsAPI에서 거부됩니다.

API 버전 apps / v1에서 .spec.selector 및 .metadata.labels는 설정되지 않은 경우 기본적으로 .spec.template.metadata.labels로 설정되지 않습니다. 따라서 명시 적으로 설정해야합니다 . 또한 apps / v1에서 배포를 생성 한 후에는 .spec.selector를 변경할 수 없습니다.

템플릿이 .spec.template과 다르거 나 해당 포드의 총 수가 .spec.replicas를 초과하는 경우 배포에서 레이블이 선택기와 일치하는 포드를 종료 할 수 있습니다. 포드 수가 원하는 수보다 적 으면 .spec.template의 새 포드가 나타납니다.

포드는 이미 개별적으로 시작되었지만 나중에 배포 관리를 통해 함께 관리됩니까?

간단히 말해서, 아니오

참고 : 직접 다른 라벨을 만들 Deployment거나 a ReplicaSet또는 a 같은 다른 컨트롤러를 만들어이 셀렉터와 레이블이 다른 포드를 만들면 안됩니다 ReplicationController. 그렇게하면 첫 번째는 Deployment다른 포드를 만들었다 고 생각합니다. Kubernetes당신이 이것을하는 것을 막지 않습니다. 선택기가 겹치는 컨트롤러가 여러 개인 경우 컨트롤러가 서로 싸우며 올바르게 작동하지 않습니다.


5
그래서 무엇을 위해 사용됩니까? 선택기가 항상 스펙의 레이블과 일치하도록해야합니다. 그렇지 않은 경우 유용한 경우가 있습니까?
Victor Noël

4
실제로 왜 질문에 대답하지 않습니까? 왜 matchLabels가 존재하고 일치해야 .spec.template.metadata.labels합니까? spec아래에 정의 된 것처럼 요점은 무엇 Deployment이므로 배포를 위해 포드가 시작되는 것이 분명합니다.
이반

2
이 논의에 부딪 치는 사람은 최신 문서를 확인해야합니다. 예를 들어 현재 .spec.selector는 선택 필드가 아닙니다. 필수 필드입니다. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory

귀하의 의견에 감사드립니다. 나는 오래된 문서에서이 필드는 선택 사항으로하지만,이 필드가 명시 적으로 :) 그래서 효과적으로 필드도 필요했다 설정해야 추가 한 다음 줄 저자에 들었다 때문에 새로운 문서 저자의 요구에 대한 선택적 수정 한 생각
alexander.polomodov

@SoftwareTheory 예. 포드 사양 템플릿이 아래에 정의되어 있기 때문에 왜 필요한지 설명하지 않습니다.
user168317
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.