2017-12-22 4 views
1

Ich lerne Kubernetes und derzeit tiefen Tauchen in hohe Verfügbarkeit und während ich verstehe, dass ich eine hoch verfügbare Kontrollebene (API-Server, Controller, Scheduler) mit lokalen (oder mit Remote) etcds sowie eine hoch verfügbare Gruppe von Minions (durch Kubernetes selbst), ich bin mir noch nicht sicher, wo in diesem Konzept Dienstleistungen befinden.Wo wohnen Dienstleistungen in Kubernetes?

Wenn sie in der Kontrollebene leben: Gut kann ich sie einrichten, um hoch verfügbar zu sein.

Wenn sie auf einem bestimmten Knoten leben: Ok, aber was passiert, wenn der Knoten ausfällt oder auf andere Weise nicht verfügbar ist?

Wie ich es verstehe, sind Dienste erforderlich, um meine Pods sowohl dem Internet als auch dem Loadbalancing auszusetzen. Also kein HA-Service, ich riskiere, dass meine Anwendung nicht erreichbar sein wird (auch wenn sie für irgendeinen anderen Aspekt des Systems sehr gut verfügbar sein könnte).

Antwort

0

Kubernetes Service ist ein weiteres REST-Objekt im K8S Cluster entfernen. Es gibt folgende Arten von Diensten. Jeder von ihnen dient einem anderen Zweck im Cluster.

  • ClusterIP
  • NodePort
  • LoadBalancer
  • Headless

grundlegenden Zweck der Dienstleistungen

  • einen einzigen Punkt von Tor zu den Hülsen Providing
  • Load Balancing die Schoten
  • Inter Pods Kommunikation
  • Stabilität als Schoten sterben können, und starten mit unterschiedlichen IP-
  • mehr

Diese Objekte werden in ETCD gespeichert, wie es die einzige Quelle ist von Wahrheit im Cluster.

Kube-Proxy ist verantwortlich für die Erstellung dieser Objekte.Es verwendet Selektoren und Labels.

Zum Beispiel hat jedes Pod-Objekt Labels, daher hat das Service-Objekt Selektoren, die diesen Labels entsprechen. Außerdem hat jeder Pod Endpunkte, also weist kube-proxy diesen Endpunkten (IP: Port) grundsätzlich den Dienst (IP: Port) zu. Kube-Proxy benutzt IP-Tables-Regeln, um diese Magie zu nutzen.

Kube-Proxy wird in jedem Cluster-Knoten als DaemonSet bereitgestellt, so dass sie einander durch Verwendung von etcd kennen.

+0

Ok, aber nach kubernetes.io/docs/concepts/services-networking/service/... kann ich eine einzelne IP-Adresse für meinen Dienst anfordern. Dies würde - nach meinem Verständnis - dazu führen, dass nur ein Kube-Proxy auf einem bestimmten Knoten angesprochen wird. Oder würde dies tatsächlich auf dem api-Server allen Kube-Proxies zugeordnet werden, die auf Knoten laufen, die dem Label-Selektor des Dienstes entsprechen? –

+0

Kube-Proxy und Kubelet kommunizieren mit Kube-api Server, der alle aktuellen Zustände in Etcd speichert. Lassen Sie uns das mit einem Beispiel verstehen: Wir haben 3 Pods, die mit Hilfe von Kubelet auf 3 verschiedenen Knoten laufen. All dies hat Endpunkte. Wenn Sie jetzt das Dienstmanifest bereitstellen, stellt kube-proxy sicher, dass der Dienstendpunkt mit dem Pods-Endpunkt übereinstimmt, der die IPTABLES-Magie ist. Kube-Proxy kommuniziert mit API-Server und aktualisiert die etcd. –

+0

Kube-Proxy findet Pods anhand von Labels anstelle von Namen. Daher sind Selektoren und Beschriftungen in k8s eine mächtige Sache. Außerdem kommuniziert Kube-Proxy mit dem Kube-api-Server, um den Status von Pods oder Änderungen in den Diensten zu überprüfen. –

2

Sie können sich einen Service als internen (und in einigen Fällen externen) Loadbalancer vorstellen. Die Definition wird im Kubernetes-API-Server gespeichert, aber die Tatsache, dass sie dort existiert, bedeutet nichts, wenn etwas nicht implementiert wird. Die am häufigsten verwendete Komponente, die mit Diensten arbeitet, ist der Kube-Proxy, der Dienste auf Knoten implementiert, die iptables verwenden (dh jeder Knoten hat jeden Dienst in seinen lokalen iptables-Regeln implementiert), aber es gibt auch ie. Ingress-Controller-Implementierungen, die das Servicekonzept von der API verwenden, um Endpunkte zu finden und den Datenverkehr an sie zu leiten, wodurch die iptables-Implementierung effektiv übersprungen wird. Schließlich gibt es Service-Mesh-Lösungen wie linkerd oder istio, die Service-Definitionen selbständig nutzen können.

In den meisten Implementierungen wird das Loadbalance zwischen den Pods geladen. Das bedeutet, dass Ihr "Service" so lange antwortet, wie Sie noch einen Backing Pod haben (mit ausreichender Kapazität). Vitalitäts Sonden, die

unter anderem ungesunden Schoten von Dienstleistungen)

Kubernetes Service Dokumentation bietet recht guten Einblick auf diesem