Kubernetes Multi-Pod-Bereitstellung

9

Ich möchte einen Anwendungscluster bereitstellen, indem ich meine Bereitstellung über das k8s Deployment-Objekt verwalte. Die Dokumentation hat mich extrem verwirrt. Mein Basislayout hat die folgenden Komponenten, die unabhängig voneinander skaliert werden können:

  1. API-Server
  2. Benutzeroberflächenserver
  3. Redis-Cache
  4. Timer / Server für geplante Aufgaben

Technisch gesehen gehören alle 4 oben in separate Pods, die unabhängig voneinander skaliert werden.

Meine Fragen sind:

  1. Muss ich pod.yml -Dateien erstellen und sie dann irgendwie in deployment.yml -Datei referenzieren oder kann eine Implementierungsdatei auch Pod-Definitionen einbetten?
  2. K8s Dokumentation scheint zu implizieren, dass der spec Anteil von Deployment der Definition von einem Pod entspricht. Ist das korrekt? Was ist, wenn ich Multi-Pod-Implementierungen deklarativ beschreiben möchte? Benötige ich mehrere deployment.yml-Dateien?
Raj 04.04.2017, 20:23
quelle

2 Antworten

14

Pagids Antwort hat die meisten Grundlagen. Sie sollten 4 Deployments für Ihr Szenario erstellen. Jede Bereitstellung erstellt ein ReplicaSet , das die Sammlung von PODs für Deployment plant und überwacht.

Jedes Deployment wird höchstwahrscheinlich auch einen Service davor für den Zugriff benötigen. Ich erstelle normalerweise eine einzelne Yaml-Datei mit einem Deployment und dem entsprechenden Service . Hier ist ein Beispiel für ein nginx.yaml , das ich verwende:

%Vor%

Hier einige zusätzliche Informationen zur Verdeutlichung:

  • A POD ist keine skalierbare Einheit. A Deployment , das PODs plant, ist.
  • A Deployment soll eine einzelne Gruppe von PODs darstellen, die zusammen einen einzigen Zweck erfüllen.
  • Sie können viele Deployments im virtuellen Netzwerk des Clusters zusammenarbeiten lassen.
  • Um auf ein Deployment zuzugreifen, das aus vielen PODs bestehen kann, die auf verschiedenen Knoten laufen, müssen Sie einen Service erstellen.
  • Bereitstellungen sollen zustandslose Dienste enthalten. Wenn Sie einen Status speichern müssen, müssen Sie stattdessen StatefulSet erstellen (z. B. für einen Datenbankservice).
Oswin Noetzelmann 05.04.2017, 01:58
quelle
6

Sie können die API-Referenz von Kubernetes für die Bereitstellung und Sie werden feststellen, dass das Feld spec - & gt; template vom Typ PodTemplateSpec zusammen mit dem zugehörigen Kommentar ( Vorlage beschreibt die Pods, die erstellt werden. ) es beantwortet Ihre Fragen. Eine längere Beschreibung finden Sie natürlich im Implementierungshandbuch .

Um Ihre Fragen zu beantworten ...

1) Die Pods werden von Deployment verwaltet und ihre separate Definition ist nicht sinnvoll, da sie von der Bereitstellung bei Bedarf erstellt werden. Beachten Sie, dass möglicherweise mehrere Replikate desselben Pod-Typs vorhanden sind.

2) Für jede der Anwendungen in Ihrer Liste müssten Sie ein Deployment definieren - was auch sinnvoll ist, wenn es um Replikate von verschiedenen Replikaten und Rollouts von Anwendungen geht.

3) Sie haben nicht gefragt, aber es ist verwandt - zusammen mit separaten Deployments jede Ihrer Anwendungen benötigt auch eine dedizierte Service , damit die anderen darauf zugreifen können.

    
pagid 04.04.2017 21:00
quelle

Tags und Links