Bölme ve dağıtım arasındaki fark nedir?


241

Ben ile pods oluşturuyorum type:deploymentama bazı belgelerin type:pod, daha özel olarak çok kapsayıcı pod için belgelerin kullandığını görüyorum :

apiVersion: v1
kind: Pod
metadata:
  name: ""
  labels:
    name: ""
  namespace: ""
  annotations: []
  generateName: ""
spec:
  ? "// See 'The spec schema' for details."
  : ~

Ancak, bölmeler oluşturmak için yalnızca bir dağıtım türü kullanabilirim :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ""
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: ""
    spec:
      containers:
        etc

Pod belgelerinin şunları söylediğini fark ettim:

Create komutu, doğrudan bir bölme oluşturmak için kullanılabilir veya bir Dağıtım yoluyla bölme veya bölmeler oluşturabilir. Kapsüllerinizi oluşturmak için bir Dağıtım kullanmanız önemle tavsiye edilir. Hatalı kapsülleri izler ve belirtilen sayıyı korumak için gerektiğinde yeni kapsüller başlatır. Bir Dağıtımın bölgenizi izlemesini istemiyorsanız (örneğin bölmeniz yeniden başlatma işleminden kurtulamayan kalıcı olmayan veriler yazıyorsa veya bölmeniz çok kısa ömürlü olması gerekiyorsa), doğrudan bir bölme oluşturabilirsiniz. oluşturma komutu.

Not: Kapsül oluşturmak için bir Dağıtım kullanmanızı öneririz. Aşağıdaki talimatları yalnızca bir Dağıtım oluşturmak istemiyorsanız kullanmalısınız.

Ama bu neyin kind:podiyi olduğu sorusunu gündeme getiriyor. Bir dağıtımdaki kapsülleri bir şekilde referans verebilir misiniz? Bir yol görmedim. Kapsüllerle elde ettiğiniz şey bazı ekstra meta verilerdir, ancak replicayeniden başlatma politikası gibi dağıtım seçeneklerinin hiçbiri değildir . Veriyi sürdürmeyen, yeniden başlatma işleminden kurtulamayan bir kapsül ne işe yarar? Bence konuşlandırmayla birlikte çok kapsayıcı bir kapsül oluşturabileceğim.

Yanıtlar:


190

Pod ve Dağıtım, Kubernetes API'sındaki tam teşekküllü nesnelerdir. Dağıtım, Pod oluşturma işlemini ReplicaSets aracılığıyla yönetir. Bunun kayda değer olması, Dağıtım'ın şablondan alınan spesifikasyonlarla Pod'lar oluşturacağıdır. Bir üretim kullanım durumu için doğrudan Pod'lar oluşturmanız gerekmeyecektir.


7
Teşekkür ederim, ancak ne zaman doğrudan kapsül oluşturursunuz?
Bjorn

11
Özel denetleyiciye sahip olmak, muhtemelen daha yüksek düzey soyutlamalardan birini kullanmak yerine bölmeleri doğrudan oluşturmak ve yönetmek istediğiniz durumlardan biridir.
Anirudh Ramanathan

24
@BjornTipling Silindiğinde bölmeleri yeniden oluşturmak için kubernet'lere ihtiyacım olmadığında dağıtım olmadan bölmeler oluşturuyorum. Bir kullanım örneği, önce bir kapsül oluşturarak işleri test etmektir.
user2526795

243

Radek'in cevabı çok iyidir, ama benim deneyimlerinden, bir kullanmak neredeyse asla ben sahanın istiyorum nesneyi ile nazik pod o pratikte hiçbir anlam ifade etmiyor, çünkü.

Eğer bir gerektiğinden dağıtım bir benzeri veya başka Kubernetes API nesneleri - nesneyi çoğaltma denetleyicisi veya replicaset - ihtiyaçlar tutmak için bu kopyaları canlı (bakla) (tür Kubernetes kullanmanın noktasının var).

Uygulamada tipik bir uygulama için kullanacağınız şeyler:

  1. Uygulamanızın kapsayıcısını başka özelliklerle barındıracak dağıtım nesnesi (uygulama kapsayıcısını / kapsayıcılarınızı belirleyeceğiniz yer).

  2. Hizmet nesnesi (bu, bir gruplama nesnesi gibidir ve podsbelirli bir etikete sahip olanlar için sanal IP (küme IP'si) olarak adlandırılır - ve podsbunlar temel olarak eski dağıtım nesnesiyle dağıttığınız uygulama kapsayıcılarıdır ).

Hizmet nesnesine sahip olmanız gerekir, çünkü podsdağıtım nesnesinden gelenler öldürülebilir, ölçeklendirilebilir ve küçültülebilir ve kalıcı olmayacakları için IP adreslerine güvenemezsiniz.

Yani servis gibi bir nesneye ihtiyacınız var, bu podsda onlara sabit bir IP veriyor .

Size etrafta bir bağlam vermek istedim pods, böylece işlerin birlikte nasıl çalıştığını biliyorsunuz.

Umarım senin için birkaç şeyi temizler, uzun zaman önce senin ayakkabılarındaydım :)


1
Güzel bir cevap, bir replicaSet veya bir ReplicationController ihtiyacımız var mı çünkü Konuşlandırma nesnesinin kopyaları kontrol eden bu nesneleri sarar olduğunu düşündüm?
user_mda

3
Evet, Dağıtım nesnesi replikaset'i işler, ancak şu türden bir nesneyi de kullanabilirsiniz: ReplicationController veya kind: ReplicaSet gerçekten istiyorsanız, ancak uygulamada bunun çoğunu görmedim ...
Tomislav Mikulin

2
Neden birden fazla kubernetes belgesi kind: Podörnek olarak verilmiştir? Örneğin, Sırlar env değişkeni olarak nasıl kullanılır: kubernetes.io/docs/concepts/configuration/secret/…
rm.rf.etc

1
Emin değilim, belki çünkü k8'deki kavramları açıklamak daha kolay ... kontrolörlerin, konuşlandırmaların vb. Ağırlığını vermeden ...
Tomislav Mikulin

1
Kapsül oluşturmak istediğiniz bazı durumlar vardır, örneğin helm testuygulamayı sonsuza kadar çalıştırmanız gerekmeyen bir test sepeti (örnek ) çalıştırıyorsanız ve birden çok kopyaya ihtiyacımız yoksa, bu durumda kapsül uygundur.
Balkrishna

61

Kubernetes'te bilmeniz gereken üç Nesne Türü vardır :

  • Kapsüller - yakından ilişkili bir veya daha fazla kap çalıştırır
  • Hizmetler - Kubernetes kümesinde ağ kurulumu
  • Dağıtım - Doğru yapılandırmaya sahip olduklarından ve doğru sayıda var olduklarından emin olarak bir dizi özdeş kapsülü tutar.

Kapsüller:

  • Tek bir konteyner kümesini çalıştırır
  • Tek seferlik geliştirmeler için iyi
  • Nadiren doğrudan üretimde kullanılır

Dağıtım:

  • Bir dizi özdeş kapsülü çalıştırır
  • Her bölmenin durumunu izler, gerekirse güncelleştirir
  • Geliştirici için iyi
  • Üretim için iyi

Ve diğer cevaplara katılıyorum, baklaları unutacağım ve sadece Dağıtım'ı kullanacağım. Neden? İkinci mermi noktasına bakın, her bölmenin durumunu izler ve gerektiğinde güncellenir.

Yani, bunun gibi hata mesajlarıyla uğraşmak yerine:

Yasak: bölme güncelleştirmeleri, dışındaki alanları değiştiremez spec.containers[*].image

Bu yüzden sadece Pod'unuzu yeniden düzenleyin veya tamamen ihtiyacınız olan şeyi yapmak için bir bölme oluşturan bir Dağıtım'a yeniden oluşturun. Dağıtım ile istediğiniz herhangi bir yapılandırmayı değiştirebilirsiniz ve bu hata mesajını görmek için endişelenmenize gerek yoktur.


9

Kap, konteyner örneğidir.

resim açıklamasını buraya girin

Bu çıktı replicas: 3

Birinin deploymentbirçok çalışan örneğine sahip olabileceğini düşünün (çoğaltma).

//deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: tomcat-deployment222
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 3
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:9.0
        ports:
        - containerPort: 8080

Şimdiye kadarki en iyi cevap. Diğer cevaplar, Dağıtımların nasıl daha önemli bir kavram olduğunu ve Pod'ları üretimde nadiren kullandığınızı göstermeye odaklanır, ancak birbirleriyle nasıl ilişkili oldukları hakkında net bir bilgi içermez.
Diego Queiroz

Bu durumda bölmeyi dağıtımın kopyalarından biri olarak adlandırabilir miyiz?
kioria

@kioria, "dağıtım kopyaları" ile ne demek istiyorsun?
serkan

@serkan Bu kopyaları kastediyorum: 3 dağıtım spec.
kioria

@kioria, replicas: 3görüntünün üst kısmına referanslar, "hey, bu işlemde çalıştırdığınızda 3 sanal / gerçek bilgisayar - örnek oluştur" anlamına gelir. onun gibi "dağıtımlar" bir ev ve "kapsüller" kişidir. Bir ev ve içinde çalışan üç kişi var. Buna özel olarak ne yapmaya çalışıyorsunuz?
serkan

6

Pod, bir kap koleksiyonu ve Kuberntes'in temel nesnesidir. Tüm kapsül kutuları aynı düğümde bulunur.

  • Üretim için uygun değil
  • Güncelleme yok

Dağıtım, Kubernetes'te bir tür denetleyicidir.

Controllers use a Pod Template that you provide to create the Pods for which it is responsible.

Dağıtım, bir ReplicaSet oluşturur ve bu da CurrentReplicas öğesinin her zaman istenenReplicas ile aynı olduğundan emin olur.

Avantajları:

  • Dağıtımı kullanarak değişikliklerinizi geri alabilir ve geri alabilirsiniz
  • Her bölmenin durumunu izler
  • Üretim için en uygun
  • Yuvarlanan güncellemeleri destekler

4

Kubernetes In Action kitabından bazı bilgiler eklemek istiyorum , böylece Pod, Deployment ve ReplicationController (ReplicaSet) gibi Kubernetes kaynakları arasındaki tüm resmi görebilir ve bağlantı kurabilirsiniz

Kapsüller

Kubernetes'teki temel konuşlandırılabilir birimdir. Ancak gerçek dünyadaki kullanım durumlarında, dağıtımlarınızın otomatik olarak çalışmaya devam etmesini ve manuel müdahale olmadan sağlıklı kalmasını istersiniz. Bunun için önerilen yaklaşım, kaputun altında bir ReplicaSet oluşturan bir Dağıtım kullanmaktır .

Bir ReplicaSet , adından da anlaşılacağı gibi, Düzeltme geçmişleriyle korunan bir dizi kopyadır (Kapsüller) .

(ReplicaSet, ReplicationController adlı eski bir nesneyi genişletir - bu tamamen aynıdır ancak Düzeltme geçmişi yoktur.)

Bir ReplicaSet, çalışan kapsüllerin listesini sürekli olarak izler ve belirli bir spesifikasyonla eşleşen çalışan kapsül sayısının her zaman istenen sayıyla eşleştiğinden emin olur.

resim açıklamasını buraya girin

Removing a pod from the scope of the ReplicationController comes in handy
when you want to perform actions on a specific pod. For example, you might 
have a bug that causes your pod to start behaving badly after a specific amount 
of time or a specific event.

A Dağıtım

uygulamaları dağıtmak ve bildirimleri güncellemek için kullanılan üst düzey bir kaynaktır.

Bir Dağıtım oluşturduğunuzda, altında bir ReplicaSet kaynağı oluşturulur (sonunda daha fazla). ReplicaSets bölmeleri de çoğaltır ve yönetir. Bir Dağıtım kullanırken, fiili bölmeleri oluşturulur ve yönetilir tarafından edilir Dağıtım bireyin ReplicaSets , vermeyerek Dağıtım doğrudan resim açıklamasını buraya girin

Neler olduğunu düşünelim. Dağıtım kaynağınızdaki bölme şablonunu değiştirerek, tek bir alanı değiştirerek uygulamanızı daha yeni bir sürüme güncellediniz!

resim açıklamasını buraya girin

Son olarak, bir Dağıtımı geri alma önceki revizyona veya Dağıtım kaynağıyla daha önceki herhangi bir revizyona geri alın.

Bu görüntüler de Kubernetes In Action kitabından.


2

Kapsüllerden kaçınmaya çalışın ve konteynırları tür nesneler olarak yönetmek yerine Dağıtımları uygulamaya çalışın.

Dağıtım genellikle tercih edilir, çünkü istenen sayıda Bölme'nin her zaman kullanılabilir olmasını sağlamak için bir ReplicaSet tanımlar ve RollingUpdate gibi Bölmeleri değiştirmek için bir strateji belirler.


1

Kubernetes'te Pod'lar en küçük konuşlandırılabilir birimlerdir. Dağıtımlar, çoğaltma kümeleri, durum bilgisi kümeleri, daemonsets gibi bir kubernetes nesnesi oluşturduğumuzda kapsül oluşturur.

Yukarıda belirtildiği gibi dağıtımlar, dağıtım nesnenizde belirtilen istenen duruma göre kapsüller oluşturur. Örneğin, bir uygulamanın 5 kopyasını istiyorsunuz replicas: 5, dağıtım bildiriminizde belirtmişsiniz . Artık dağıtım denetleyicisi, RBAC politikası, ağ politikası, etiketler, ek açıklamalar, sağlık kontrolü, kaynak kotaları, leke / toleranslar ve diğerleri gibi tüm meta verilerle verilen uygulamanın 5 özdeş kopyasını (daha az değil, daha fazla değil) oluşturmaktan ve her kapsülle ilişkilendirilmekten sorumludur. yaratır.

Kapsül oluşturmak istediğiniz bazı durumlar vardır, örneğin uygulamayı sonsuza kadar çalıştırmanız gerekmeyen bir test yan çubuğu çalıştırıyorsanız, birden fazla kopyaya ihtiyacınız yoktur ve bunu yürütmek istediğinizde uygulamayı çalıştırırsınız kutu podu uygundur. Örneğin helm test, çalıştırılacak belirli bir komutu olan bir kapsayıcıyı belirten bir kapsül tanımıdır.

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.