W kubernetes jaka jest różnica między pod a wdrożeniem?

Tworzyłem strąki z type:deployment ale widzę, że część dokumentacji używa type:pod, a dokładniej dokumentacji dla strąków wielokanałowych :

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

Ale do tworzenia pods mogę użyć typu deploy :

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

Zauważyłem, że dokumentacja pod mówi:

Polecenie create może być użyte do utworzenia pod bezpośrednio, lub może Utwórz pod lub pod za pomocą wdrożenia. Jest wysoce zalecane że używasz wdrożenia do tworzenia Twoje kapsuły. Ogląda za nieudane kapsuły i uruchomi nowe kapsuły zgodnie z wymaganiami, aby utrzymać określone numer. Jeśli nie chcesz, aby wdrożenie monitorowało Twój pod (np. pod zapisuje dane nietrwałe, które nie przetrwają restartu lub Twój pod ma być bardzo krótkotrwały), możesz utworzyć pod bezpośrednio za pomocą polecenia Utwórz.

UWAGA: Zalecamy użycie wdrożenia do tworzenia pods. Należy użyć poniższe instrukcje tylko jeśli nie chcesz utworzyć Rozlokowanie.

Ale to rodzi pytanie, do czego kind:pod jest dobre? Czy możesz jakoś odnieść się do kapsuł w rozlocie? Nie widziałem sposobu. Wygląda na to, że to, co dostajesz z pods, to dodatkowe metadane, ale żadna z opcji wdrażania, takich jak replica lub Polityka restartu. Co dobrego jest pod, który nie utrzymuje danych, przetrwa restart? Myślę, że byłbym w stanie stworzyć kapsułę z wieloma kontenerami z rozmieszczeniem.

 69
Author: Bjorn Tipling, 2016-12-26

2 answers

Zarówno pod, jak i Deployment są pełnoprawnymi obiektami w API Kubernetes. Deployment zarządza tworzeniem Pods za pomocą replik. Sprowadza się to do tego, że wdrożenie stworzy strąki ze specyfikacją zaczerpniętą z szablonu. Jest raczej mało prawdopodobne, że kiedykolwiek będziesz musiał stworzyć strąki bezpośrednio do zastosowania w produkcji.

 61
Author: Radek 'Goblin' Pieczonka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-01 08:54:32

Odpowiedź Radka jest bardzo dobra, ale z mojego doświadczenia chciałbym powiedzieć, że prawie nigdy nie użyjesz obiektu z pod , bo to nie ma sensu w praktyce.

Ponieważ potrzebujesz obiektu deployment lub innych obiektów API Kubernetes, takich jak kontroler replikacji lub replicaset - który musi utrzymać repliki (pods) przy życiu (taki jest sens używania kubernetes).

Co w praktyce do typowej aplikacji używa się:

  1. Deployment object (gdzie zostanie określony kontener aplikacji/kontenery), który będzie hostował kontener aplikacji z innymi specyfikacjami.

  2. Obiekt Service (to jest jak obiekt grupujący i daje mu tak zwany wirtualny adres IP (Cluster IP) dla pods, które mają określoną etykietę - a te {[0] } są w zasadzie kontenerami aplikacji, które wdrożono z pierwszym deployment object).

Musisz mieć obiekt service , ponieważ obiekt pods z deployment object może zostać zabity, skalowany w górę i w dół, a nie możesz polegać na ich adresach IP, ponieważ nie będą trwałe.

Więc potrzebujesz obiektu, takiego jak service , który daje tym pods stabilne IP.

Chciałem dać ci trochę kontekstu wokół pods, żebyś wiedział, jak to wszystko działa razem.

Hope that clears a few things dla Ciebie nie tak dawno byłam na Twoim miejscu:)

 83
Author: Tomislav Mikulin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 18:51:23