Dağıtım oluştururken kullanılan spec - selector - matchLabels nedir?


18

Gönderen Kubernetes belgelerinde :

Seçici alanı, Dağıtımın hangi Bölmelerin yönetileceğini nasıl bulduğunu tanımlar.

Ancak, dağıtım oluştururken, bölmenin şablonunu dağıtımın bir parçası olarak zaten belirtiyorum. Öyleyse neden seçicilere de ihtiyacım olacak?

Bölmelerin zaten ayrı ayrı başlatıldığı, ancak daha sonra birlikte yönetilmek üzere Dağıtım şemsiyesi altına getirildiği hizmetler gibi mi kullanılması gerekiyor?

Yanıtlar:


8

Bu sorunun cevabını kubernetes.io'dan Dağıtımlar bölümünde bulabiliriz

Öyleyse neden seçicilere de ihtiyacım olacak?

K8s v 1.14 belgelerinden aşağıdaki alıntılar

.spec.selectorBir olan gerekli belirtir Kapsüller için bir etiket seçici Bu harekât tarafından hedef aldığını alanı.

.spec.selectoreşleşmelidir .spec.template.metadata.labels, aksi takdirde API tarafından reddedilir.

API sürümünde apps / v1, .spec.selector ve .metadata.labels varsayılan olarak .spec.template.metadata.labels olarak ayarlanmamıştır. Bu yüzden açıkça ayarlanmalıdırlar . Ayrıca .spec.selector uygulamasının / v1 uygulamasında Dağıtım oluşturulduktan sonra değiştirilemeyeceğini unutmayın.

Bir Dağıtım, şablonları .spec.template'den farklıysa veya bu tür Podların toplam sayısı .spec.replicas'ı aşıyorsa etiketleri seçiciyle eşleşen Pod'ları sonlandırabilir. Pod sayısı istenen sayıdan azsa, .spec.template içeren yeni Pod'lar getirir.

Bölmeler zaten ayrı olarak başlatılıyor, ancak daha sonra birlikte yönetilmek üzere Dağıtım şemsiyesi altına getiriliyor mu?

Basitçe söylemek gerekirse, hayır

Not: Etiketleri doğrudan bu seçiciyle eşleşen başka bir kapsül oluşturarak Deploymentveya başka bir denetleyici oluşturarak ReplicaSetveya a veya a gibi başka bir denetleyici oluşturarak başka bölmeler oluşturmamalısınız ReplicationController. Bunu yaparsanız, ilk önce Deploymentbu diğer bölmeleri oluşturduğunu düşünür. Kubernetesbunu yapmanı engellemez. Çakışan seçicilere sahip birden fazla denetleyiciniz varsa, denetleyiciler birbirleriyle kavga eder ve düzgün davranmazlar.


5
Peki ne için kullanılıyor? Seçiciyi her zaman spesifikasyonun etiketleriyle eşleştirmelisiniz… Bunu yapmamanın yararlı olduğu bir durum var mı?
Victor Noël

4
Neden sorusuna gerçekten cevap vermiyor? - matchLabels neden var ve eşleşmeli .spec.template.metadata.labels? Bunun anlamı, specaşağıda tanımlandığı gibi, Deploymentbu nedenle Dağıtım için Pod'ların başlatıldığı açıktır.
Ivan

2
Bu tartışmaya katılan herkes en son belgeleri kontrol etmelidir. Örneğin, şu anda, .spec.selector isteğe bağlı bir alan değildir. Zorunlu bir alandır. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory

Yorumunuz için çok teşekkürler. Yeni belgelerde yazarların zorunlu olarak isteğe bağlı olarak düzeltildiğini düşünüyorum, çünkü eski dokümanlarda bu alan isteğe bağlı olarak söylendi, ancak bir sonraki satırda yazarlar bu alanın açıkça ayarlanması gerektiğini ekledi :) Bu alan da etkili bir şekilde gerekliydi
alexander.polomodov

@SoftwareTheory Evet, ancak yine de neden gerekli olduğunu açıklamıyor, çünkü Pod spec şablonu yine de aşağıda tanımlanmış.
user168317
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.