Lastausgleich und Skalierbarkeit: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
= '''1. Allgemein''' =<p class="Default" style="margin-bottom: 2.35pt;">Die Skalierbarkeit und der Lastausgleich sind zwei entscheidende Aspekte in It-Systemen. Skalierbarkeit bezieht sich auf die Fähigkeit eines Systems, mit steigender Last oder Anforderungen umzugehen, ohne dass die Leistung beeinträchtigt wird. D.h. die IT-Infrastruktur ist ggf. flexibel anzupassen und zu erweitern, um mit dem Wachstum und den Anforderungen an die IT Schritt zu halten.Skalierbarkeit'' ''bezeichnet die Fähigkeit eines Systems, wachsende quantitative Anforderungen durch Hinzuügen von Ressourcen auszugleichen, ohne dasseine Änderung von Systemkomponenten notwendig wird. Zentrale Lösungen stoßen hier in der Regel schnell an ihre Grenzen( .z.B.Bestell- oder Buchungssysteme) [11]</p> | = '''1. Allgemein''' = | ||
<p class="Default" style="margin-bottom: 2.35pt;">Die Skalierbarkeit und der Lastausgleich sind zwei entscheidende Aspekte in It-Systemen. Skalierbarkeit bezieht sich auf die Fähigkeit eines Systems, mit steigender Last oder Anforderungen umzugehen, ohne dass die Leistung beeinträchtigt wird. D.h. die IT-Infrastruktur ist ggf. flexibel anzupassen und zu erweitern, um mit dem Wachstum und den Anforderungen an die IT Schritt zu halten.Skalierbarkeit'' ''bezeichnet die Fähigkeit eines Systems, wachsende quantitative Anforderungen durch Hinzuügen von Ressourcen auszugleichen, ohne dasseine Änderung von Systemkomponenten notwendig wird. Zentrale Lösungen stoßen hier in der Regel schnell an ihre Grenzen( .z.B.Bestell- oder Buchungssysteme) [11]</p> | |||
Der Lastausgleich hingegen verteilt die Arbeitslast gleichmäßig auf mehrere Ressourcen, um die Leistung und Verfügbarkeit zu verbessern und Ausfälle zu vermeiden. | Der Lastausgleich hingegen verteilt die Arbeitslast gleichmäßig auf mehrere Ressourcen, um die Leistung und Verfügbarkeit zu verbessern und Ausfälle zu vermeiden. | ||
== '''1.1 Skalierung''' == | == '''1.1 Skalierung''' == | ||
Zeile 10: | Zeile 11: | ||
Globale Netze von Web-Caches können in CDNs auf Inter-Cluster Austausch hinsichtlich Geo-Replikation vertrauen. In der Praxis nutzen CDN-Anbieter die Tatsache, dass eine Cache-Suche nach einer URL gut zu einer Schlüssel-Wert-Schnittstelle passt. Dies ermöglicht das Skalieren von Cache-Clustern, indem Web-Caches als Proxy auf einem verteilten Key Value gespeichert bereitgestellt werden.[13 | Globale Netze von Web-Caches können in CDNs auf Inter-Cluster Austausch hinsichtlich Geo-Replikation vertrauen. In der Praxis nutzen CDN-Anbieter die Tatsache, dass eine Cache-Suche nach einer URL gut zu einer Schlüssel-Wert-Schnittstelle passt. Dies ermöglicht das Skalieren von Cache-Clustern, indem Web-Caches als Proxy auf einem verteilten Key Value gespeichert bereitgestellt werden.[13 | ||
== '''1.2 Loadbalancing (Lastenausgleich)''' ==<p>Ein Load Balancer verteilt die Arbeitslast Ihres Systems auf mehrere Einzelsysteme oder eine Gruppe von Systemen, um die Belastung eines einzelnen Systems zu verringern, was wiederum die Zuverlässigkeit, Effizienz und Verfügbarkeit Ihrer Unternehmensanwendung oder Website erhöht.</p> | == '''1.2 Loadbalancing (Lastenausgleich)''' == | ||
<p>Ein Load Balancer verteilt die Arbeitslast Ihres Systems auf mehrere Einzelsysteme oder eine Gruppe von Systemen, um die Belastung eines einzelnen Systems zu verringern, was wiederum die Zuverlässigkeit, Effizienz und Verfügbarkeit Ihrer Unternehmensanwendung oder Website erhöht.</p> | |||
<p>Er fungiert als Vermittler/Regler, der vor den Servern sitzt und Anfragen an alle Server weiterleitet, die in der Lage sind, diese Anfragen in einer Weise zu erfüllen, welche die Geschwindigkeit und die Kapazitätsauslastung maximieren und sicherstellen. Somit wird sichergestellt, dass kein einzelner Server überlastet wird, und die Performance beeinträchtigt werden könnte. </p> | <p>Er fungiert als Vermittler/Regler, der vor den Servern sitzt und Anfragen an alle Server weiterleitet, die in der Lage sind, diese Anfragen in einer Weise zu erfüllen, welche die Geschwindigkeit und die Kapazitätsauslastung maximieren und sicherstellen. Somit wird sichergestellt, dass kein einzelner Server überlastet wird, und die Performance beeinträchtigt werden könnte. </p> | ||
<p>Falls ein einzelner Server ausfällt, leitet der Load Balancer den Datenverkehr auf die verbleibenden Online-Server um. Wenn ein neuer Server zur Servergruppe hinzugefügt wird, beginnt der Load Balancer automatisch, Anfragen an ihn zu senden.</p> | <p>Falls ein einzelner Server ausfällt, leitet der Load Balancer den Datenverkehr auf die verbleibenden Online-Server um. Wenn ein neuer Server zur Servergruppe hinzugefügt wird, beginnt der Load Balancer automatisch, Anfragen an ihn zu senden.</p> | ||
Zeile 47: | Zeile 49: | ||
*Security<p>Load Balancer und Reverse Proxys können beide zum Schutz vor DDoS-Angriffen beitragen, aber Reverse Proxys haben den zusätzlichen Vorteil, dass diese Anonymität bieten. Sie können nämlich die IP-Adresse des Ursprungs-Servers verbergen, indem diese den gesamten externen Datenverkehr zunächst an den Reverse-Proxy weiterleiten. Dadurch wird es für Angreifer schwieriger, den Ursprungsserver zu identifizieren.</p> | *Security<p>Load Balancer und Reverse Proxys können beide zum Schutz vor DDoS-Angriffen beitragen, aber Reverse Proxys haben den zusätzlichen Vorteil, dass diese Anonymität bieten. Sie können nämlich die IP-Adresse des Ursprungs-Servers verbergen, indem diese den gesamten externen Datenverkehr zunächst an den Reverse-Proxy weiterleiten. Dadurch wird es für Angreifer schwieriger, den Ursprungsserver zu identifizieren.</p> | ||
*Datenverkehr im Netz<p>Nochmals die bereits erwähnten Fakten. Die Hauptfunktion eines Load Balancer darin, den Netzwerkverkehr gleichmäßig auf mehrere Server zu verteilen. Dies ist besonders in Umgebungen nützlich, in denen mehrere Server ein hohes Verkehrsaufkommen bewältigen müssen. Reverse Proxies hingegen sind darauf ausgelegt, Inhalte zwischenzuspeichern und diese effizient an die Clients zu liefern. Daher eignen sie sich besser für die Bearbeitung von Anfragen nach statischen Inhalten von einem einzigen Server.</p> | *Datenverkehr im Netz<p>Nochmals die bereits erwähnten Fakten. Die Hauptfunktion eines Load Balancer darin, den Netzwerkverkehr gleichmäßig auf mehrere Server zu verteilen. Dies ist besonders in Umgebungen nützlich, in denen mehrere Server ein hohes Verkehrsaufkommen bewältigen müssen. Reverse Proxies hingegen sind darauf ausgelegt, Inhalte zwischenzuspeichern und diese effizient an die Clients zu liefern. Daher eignen sie sich besser für die Bearbeitung von Anfragen nach statischen Inhalten von einem einzigen Server.</p> | ||
== '''2.3 Apache Webserver als Reverse Proxy''' ==<p>Der Apache HTTP Server bietet eine breite Palette von Modulen und Erweiterungen, die speziell für die Unterstützung verschiedener Proxy-Funktionen entwickelt wurden.</p> | |||
== '''2.3 Apache Webserver als Reverse Proxy''' == | |||
<p>Der Apache HTTP Server bietet eine breite Palette von Modulen und Erweiterungen, die speziell für die Unterstützung verschiedener Proxy-Funktionen entwickelt wurden.</p> | |||
<p>Mit dem Modul '''''mod_proxy''''' kann der Apache-Webserver als '''''Reverse-Proxy''''' fungieren, indem er Anfragen an einen anderen Server weiterleitet und die Antwort an den Client zurückgibt. Dies erweist sich als nützlich in Szenarien, in denen mehrere Webserver vorhanden sind und die Arbeitslast auf diese verteilt werden muss. Es verbessert die Leistung und baut eine Hochverfügbarkeitsarchitektur für die Web-Infrastruktur auf.</p> | <p>Mit dem Modul '''''mod_proxy''''' kann der Apache-Webserver als '''''Reverse-Proxy''''' fungieren, indem er Anfragen an einen anderen Server weiterleitet und die Antwort an den Client zurückgibt. Dies erweist sich als nützlich in Szenarien, in denen mehrere Webserver vorhanden sind und die Arbeitslast auf diese verteilt werden muss. Es verbessert die Leistung und baut eine Hochverfügbarkeitsarchitektur für die Web-Infrastruktur auf.</p> | ||
<p>Apache '''''mod_proxy '''''besteht aus mehreren Modulen, von denen jedes seine eigene Funktionalität hat. Hier sind einige der wichtigsten Module:</p> | <p>Apache '''''mod_proxy '''''besteht aus mehreren Modulen, von denen jedes seine eigene Funktionalität hat. Hier sind einige der wichtigsten Module:</p> | ||
Zeile 60: | Zeile 64: | ||
**'''''mod_headers''''': Zur Änderung von HTTP-Header-Zeilen. | **'''''mod_headers''''': Zur Änderung von HTTP-Header-Zeilen. | ||
**'''''mod_deflate''''': Komprimiert HTTP-Antworten. | **'''''mod_deflate''''': Komprimiert HTTP-Antworten. | ||
== | |||
== '''2.4 Content Delivery Network ''' == | |||
<p>Ein Content Delivery Network (CDN) ist ein System von Servern, welches via verschiedener Rechenzentren weltweit verteilt(vgl. Adrew. S Tanenbaum - Distributed Systwms) sind. EinProxy-Server-Netzwerk ist optimal, um die Reichweite von Webseiten zu erhöhen. Die Verwendung eines solchen Netzwerks bedeutet, dass ein Webserver in Verbund mit einigen/vielen Servern verbunden ist. Mit Hilfe eines Verteilungssystems können die statischen Inhalte des Webserver auf Replikationsserver übertragen werden. Ein Anforderungsroutingsystem bestimmt, welcher Replikationsserver im CDN am Besten dafür geeignet ist, um die Daten/Dateien rasch auszuliefern, wenn Benutzer auf bestimmte Inhalte Ihrer Website zugreifen. Je nach Anbieter unterscheiden sich CDNs in mehreren Punkten: Die Verteilung und Anzahl der Server sowie der Grad der Integration leistungsstarker Backbone-Netzwerke sind nur einige Beispiele dafür, wie sie sich unterscheiden können.</p> | |||
<p>Der Hauptzweck eines CDN besteht darin, die Latenzzeit zu verringern und die Zeit zu minimieren, die es dauert, bis die Inhalte die Nutzer erreichen. Dies wird durch die Platzierung von Servern in mehreren Datenzentren auf der ganzen Welt erreicht, die sich strategisch in der Nähe der wichtigsten Internetaustauschpunkte befinden. Wenn ein Benutzer Inhalte anfordert, leitet das CDN die Anforderung an den Server weiter, der dem Benutzer geografisch am nächsten liegt, wodurch die Entfernung, die die Daten zurücklegen müssen, verringert und somit die Antwortzeiten verbessert werden. CDNs tragen auch dazu bei, die Last auf Webservern zu verteilen, indem sie Inhalte in ihrem Netzwerk zwischenspeichern und vervielfältigen. Wenn Inhalte angefordert werden, kann der CDN-Server, der dem Nutzer am nächsten ist, die zwischengespeicherte Version der Inhalte bereitstellen, anstatt diese jedes Mal vom Ursprungsserver abzurufen. Dadurch wird der Ursprungsserver entlastet und die Skalierbarkeit verbessert. Darüber hinaus bieten CDNs weitere Funktionen wie Lastausgleich, SSL/TLS-Terminierung, DDoS-Schutz und Sicherheitsmaßnahmen zum Schutz vor bösartigen Angriffen. Sie können die Bereitstellung von Inhalten optimieren, indem sie Dateien komprimieren, Code minifizieren und Techniken wie Bildoptimierung und Browser-Caching nutzen. Durch den Einsatz eines CDN können Websites und Anwendungen von einer verbesserten Leistung, schnelleren Seitenladezeiten, höherer Verfügbarkeit und besserer Skalierbarkeit profitieren. Sie sind besonders nützlich für Websites mit einem globalen Publikum oder solchen, die große Mengen an medienintensiven Inhalten bereitstellen. [16]</p> | <p>Der Hauptzweck eines CDN besteht darin, die Latenzzeit zu verringern und die Zeit zu minimieren, die es dauert, bis die Inhalte die Nutzer erreichen. Dies wird durch die Platzierung von Servern in mehreren Datenzentren auf der ganzen Welt erreicht, die sich strategisch in der Nähe der wichtigsten Internetaustauschpunkte befinden. Wenn ein Benutzer Inhalte anfordert, leitet das CDN die Anforderung an den Server weiter, der dem Benutzer geografisch am nächsten liegt, wodurch die Entfernung, die die Daten zurücklegen müssen, verringert und somit die Antwortzeiten verbessert werden. CDNs tragen auch dazu bei, die Last auf Webservern zu verteilen, indem sie Inhalte in ihrem Netzwerk zwischenspeichern und vervielfältigen. Wenn Inhalte angefordert werden, kann der CDN-Server, der dem Nutzer am nächsten ist, die zwischengespeicherte Version der Inhalte bereitstellen, anstatt diese jedes Mal vom Ursprungsserver abzurufen. Dadurch wird der Ursprungsserver entlastet und die Skalierbarkeit verbessert. Darüber hinaus bieten CDNs weitere Funktionen wie Lastausgleich, SSL/TLS-Terminierung, DDoS-Schutz und Sicherheitsmaßnahmen zum Schutz vor bösartigen Angriffen. Sie können die Bereitstellung von Inhalten optimieren, indem sie Dateien komprimieren, Code minifizieren und Techniken wie Bildoptimierung und Browser-Caching nutzen. Durch den Einsatz eines CDN können Websites und Anwendungen von einer verbesserten Leistung, schnelleren Seitenladezeiten, höherer Verfügbarkeit und besserer Skalierbarkeit profitieren. Sie sind besonders nützlich für Websites mit einem globalen Publikum oder solchen, die große Mengen an medienintensiven Inhalten bereitstellen. [16]</p> | ||
<p>Der Originserver in einem CDN dient als zentrales Repository für die Originalinhalte und interagiert mit der CDN-Infrastruktur, um Inhalte bereitzustellen und zu aktualisieren. Er spielt eine wichtige Rolle bei der Bereitstellung von Inhalten, bei Caching-Richtlinien, bei der Ungültigkeitserklärung von Inhalten und bei der Handhabung der dynamischen Inhaltsgenerierung. Der Originserver arbeitet mit den Edge-Servern im CDN zusammen, um eine effiziente und zuverlässige Bereitstellung der Inhalte für die Endbenutzer zu gewährleisten.</p> | <p>Der Originserver in einem CDN dient als zentrales Repository für die Originalinhalte und interagiert mit der CDN-Infrastruktur, um Inhalte bereitzustellen und zu aktualisieren. Er spielt eine wichtige Rolle bei der Bereitstellung von Inhalten, bei Caching-Richtlinien, bei der Ungültigkeitserklärung von Inhalten und bei der Handhabung der dynamischen Inhaltsgenerierung. Der Originserver arbeitet mit den Edge-Servern im CDN zusammen, um eine effiziente und zuverlässige Bereitstellung der Inhalte für die Endbenutzer zu gewährleisten.</p> | ||
=== '''2.4.1 Originserver in CDNs''' ===<p>In einem Content-Delivery-Network (CDN) ist der Originserver, sprich der Ursprungsserver, der zentrale Server, auf dem das Original oder die maßgebliche Kopie des Webinhalts gespeichert ist. Der Originserver spielt eine entscheidende Rolle bei der Bereitstellung von Inhalten und interagiert mit der CDN-Infrastruktur.</p> | |||
==== '''2. | === '''2.4.1 Originserver in CDNs''' === | ||
<p>In einem Content-Delivery-Network (CDN) ist der Originserver, sprich der Ursprungsserver, der zentrale Server, auf dem das Original oder die maßgebliche Kopie des Webinhalts gespeichert ist. Der Originserver spielt eine entscheidende Rolle bei der Bereitstellung von Inhalten und interagiert mit der CDN-Infrastruktur.</p> | |||
==== '''2.4.1.1 Aufgaben/Funktion des Origin''' ==== | |||
<p style="margin-left: 25px;">'''Quelle der Inhalte''': Der Originserver ist die Hauptquelle der Inhalte, die über das CDN verbreitet werden. Er speichert die Originaldateien, z. B. HTML-Seiten, Bilder, Videos, Skripte und andere Medieninhalte, aus denen eine Website oder Anwendung besteht.</p> | |||
<p style="margin-left: 25px;">'''Verteilung von Inhalten''': Wenn ein CDN eine Inhaltsanforderung erhält, prüft es, ob der angeforderte Inhalt im Cache des Edge-Servers verfügbar ist, der dem Benutzer am nächsten ist. Wenn der Inhalt im Cache nicht verfügbar oder abgelaufen ist, holt das CDN den Inhalt vom Originserver ab.</p> | <p style="margin-left: 25px;">'''Verteilung von Inhalten''': Wenn ein CDN eine Inhaltsanforderung erhält, prüft es, ob der angeforderte Inhalt im Cache des Edge-Servers verfügbar ist, der dem Benutzer am nächsten ist. Wenn der Inhalt im Cache nicht verfügbar oder abgelaufen ist, holt das CDN den Inhalt vom Originserver ab.</p> | ||
<p style="margin-left: 25px;">'''Bereitstellung von Inhalten''': Der Originserver ist dafür verantwortlich, dem CDN die erforderlichen Inhalte zur Verteilung bereitzustellen. Dazu gehört das Hochladen und Aktualisieren der Inhalte auf dem Originserver, sobald Änderungen oder Aktualisierungen auftreten. Die Anbieter von Inhalten interagieren in der Regel direkt mit dem Originserver, um ihre Inhalte zu verwalten.</p> | <p style="margin-left: 25px;">'''Bereitstellung von Inhalten''': Der Originserver ist dafür verantwortlich, dem CDN die erforderlichen Inhalte zur Verteilung bereitzustellen. Dazu gehört das Hochladen und Aktualisieren der Inhalte auf dem Originserver, sobald Änderungen oder Aktualisierungen auftreten. Die Anbieter von Inhalten interagieren in der Regel direkt mit dem Originserver, um ihre Inhalte zu verwalten.</p> | ||
Zeile 79: | Zeile 89: | ||
<div style="margin-left: 25px;">'''Bereinigung und Ungültigkeit von Inhalten''': CDNs bieten Mechanismen zur Verwaltung des Cache und zur Gewährleistung der Aktualität von Inhalten. Wenn Inhalte auf dem Ursprungsserver aktualisiert werden oder aus dem Cache entfernt werden müssen, bieten CDNs Methoden zur Bereinigung und Invalidierung des Caches an. Diese Mechanismen ermöglichen es Inhaltsanbietern, die Entfernung von im Cache gespeicherten Inhalten von Edge-Servern manuell auszulösen, um sicherzustellen, dass die Benutzer die aktuellsten Inhalte erhalten.<br></div> | <div style="margin-left: 25px;">'''Bereinigung und Ungültigkeit von Inhalten''': CDNs bieten Mechanismen zur Verwaltung des Cache und zur Gewährleistung der Aktualität von Inhalten. Wenn Inhalte auf dem Ursprungsserver aktualisiert werden oder aus dem Cache entfernt werden müssen, bieten CDNs Methoden zur Bereinigung und Invalidierung des Caches an. Diese Mechanismen ermöglichen es Inhaltsanbietern, die Entfernung von im Cache gespeicherten Inhalten von Edge-Servern manuell auszulösen, um sicherzustellen, dass die Benutzer die aktuellsten Inhalte erhalten.<br></div> | ||
<div style="margin-left: 25px;">'''Zusätzliche Funktionen''': Edge-Server in CDNs bieten oft zusätzliche Funktionen, um die Leistung und Sicherheit zu verbessern, z. B. SSL/TLS-Terminierung, DDoS-Schutz und Web Application Firewall (WAF)-Funktionen. Diese Funktionen tragen dazu bei, die CDN-Infrastruktur und die bereitgestellten Inhalte vor potenziellen Bedrohungen und Angriffen zu schützen. Edge-Server sind das Rückgrat von CDNs, die für die Bereitstellung von zwischengespeicherten Inhalten und die Optimierung der Bereitstellung von Inhalten für Endbenutzer verantwortlich sind. Durch die strategische Platzierung von Edge-Servern weltweit verbessern CDNs die Leistung, Verfügbarkeit und Skalierbarkeit der Bereitstellung von Webinhalten erheblich.<br></div> | <div style="margin-left: 25px;">'''Zusätzliche Funktionen''': Edge-Server in CDNs bieten oft zusätzliche Funktionen, um die Leistung und Sicherheit zu verbessern, z. B. SSL/TLS-Terminierung, DDoS-Schutz und Web Application Firewall (WAF)-Funktionen. Diese Funktionen tragen dazu bei, die CDN-Infrastruktur und die bereitgestellten Inhalte vor potenziellen Bedrohungen und Angriffen zu schützen. Edge-Server sind das Rückgrat von CDNs, die für die Bereitstellung von zwischengespeicherten Inhalten und die Optimierung der Bereitstellung von Inhalten für Endbenutzer verantwortlich sind. Durch die strategische Platzierung von Edge-Servern weltweit verbessern CDNs die Leistung, Verfügbarkeit und Skalierbarkeit der Bereitstellung von Webinhalten erheblich.<br></div> | ||
=== '''2.4.3 Routing in CDNs''' ===<p>Die Weiterleitung von Inhalten ist ein wichtiger Aspekt von Content Delivery Networks (CDNs), der bestimmt, wie Benutzeranfragen nach Inhalten an die entsprechenden Edge-Server für eine effiziente Bereitstellung weitergeleitet werden. Content-Routing-Algorithmen helfen bei der Optimierung der Auswahl des am besten geeigneten Edge-Servers auf der Grundlage von Faktoren wie Nähe, Netzwerkbedingungen, Serverauslastung und Verfügbarkeit.</p> | |||
=== '''2.4.3 Routing in CDNs''' === | |||
<p>Die Weiterleitung von Inhalten ist ein wichtiger Aspekt von Content Delivery Networks (CDNs), der bestimmt, wie Benutzeranfragen nach Inhalten an die entsprechenden Edge-Server für eine effiziente Bereitstellung weitergeleitet werden. Content-Routing-Algorithmen helfen bei der Optimierung der Auswahl des am besten geeigneten Edge-Servers auf der Grundlage von Faktoren wie Nähe, Netzwerkbedingungen, Serverauslastung und Verfügbarkeit.</p> | |||
<div>:'''Analyse der Anfrage''': Wenn ein Benutzer eine Anfrage nach Inhalten stellt, analysiert die CDN-Infrastruktur die Anfrage, um relevante Informationen zu sammeln. Diese Informationen können den geografischen Standort des Nutzers, die IP-Adresse, den Browsertyp, das Gerät und andere Parameter umfassen, die den Prozess der Inhaltsbereitstellung beeinflussen können.</div> | <div>:'''Analyse der Anfrage''': Wenn ein Benutzer eine Anfrage nach Inhalten stellt, analysiert die CDN-Infrastruktur die Anfrage, um relevante Informationen zu sammeln. Diese Informationen können den geografischen Standort des Nutzers, die IP-Adresse, den Browsertyp, das Gerät und andere Parameter umfassen, die den Prozess der Inhaltsbereitstellung beeinflussen können.</div> | ||
<div style="margin-left: 25px;">'''Intelligente Weiterleitung:''' CDN setzen intelligente Routing-Algorithmen ein, um den besten Edge-Server für die Bearbeitung der Benutzeranforderung zu ermitteln. Diese Algorithmen berücksichtigen verschiedene Faktoren, um eine fundierte Entscheidung zu treffen. Zum Beispiel: Proximity (Nähe): Das CDN versucht, die Anfrage an einen Edge-Server zu leiten, der dem Benutzer geografisch am nächsten liegt. Die Minimierung der physischen Entfernung zwischen dem Benutzer und dem Server trägt zur Verringerung der Latenzzeit und zur Verbesserung der Leistung bei.<br></div> | <div style="margin-left: 25px;">'''Intelligente Weiterleitung:''' CDN setzen intelligente Routing-Algorithmen ein, um den besten Edge-Server für die Bearbeitung der Benutzeranforderung zu ermitteln. Diese Algorithmen berücksichtigen verschiedene Faktoren, um eine fundierte Entscheidung zu treffen. Zum Beispiel: Proximity (Nähe): Das CDN versucht, die Anfrage an einen Edge-Server zu leiten, der dem Benutzer geografisch am nächsten liegt. Die Minimierung der physischen Entfernung zwischen dem Benutzer und dem Server trägt zur Verringerung der Latenzzeit und zur Verbesserung der Leistung bei.<br></div> | ||
Zeile 89: | Zeile 101: | ||
'''Zeit-Überwachung:''' CDNs überwachen kontinuierlich die Leistung und Verfügbarkeit von Edge-Servern. Wenn ein bestimmter Edge-Server Probleme hat oder nicht mehr verfügbar ist, kann der Routing-Algorithmus die Anfragen dynamisch an andere geeignete Server umleiten. | '''Zeit-Überwachung:''' CDNs überwachen kontinuierlich die Leistung und Verfügbarkeit von Edge-Servern. Wenn ein bestimmter Edge-Server Probleme hat oder nicht mehr verfügbar ist, kann der Routing-Algorithmus die Anfragen dynamisch an andere geeignete Server umleiten. | ||
'''Anycast-Routing: '''CDNs verwenden häufig Anycast-Routing, eine Technik, die es mehreren Edge-Servern ermöglicht, dieselbe IP-Adresse zu nutzen. Anycast ermöglicht die Weiterleitung von Anfragen an den nächstgelegenen Edge-Server auf der Grundlage der Netzwerktopologie. Wenn ein Benutzer eine Anfrage stellt, wählt die Routing-Infrastruktur den nächstgelegenen Anycast-Node aus und stellt so sicher, dass die Anfrage an den in Bezug auf die Netzwerkentfernung nächstgelegenen Edge-Server geleitet wird. | '''Anycast-Routing: '''CDNs verwenden häufig Anycast-Routing, eine Technik, die es mehreren Edge-Servern ermöglicht, dieselbe IP-Adresse zu nutzen. Anycast ermöglicht die Weiterleitung von Anfragen an den nächstgelegenen Edge-Server auf der Grundlage der Netzwerktopologie. Wenn ein Benutzer eine Anfrage stellt, wählt die Routing-Infrastruktur den nächstgelegenen Anycast-Node aus und stellt so sicher, dass die Anfrage an den in Bezug auf die Netzwerkentfernung nächstgelegenen Edge-Server geleitet wird. | ||
=== '''2.4.4 Caching''' ===<p>In einem Content Delivery Network (CDN) werden Caching-Algorithmen verwendet, um zu bestimmen, welche Inhalte in den Edge-Servern zwischengespeichert werden sollen und wie der Cache verwaltet werden soll. Diese Algorithmen spielen eine entscheidende Rolle bei der Optimierung der Cache-Nutzung, der Sicherstellung der Verfügbarkeit von häufig abgerufenen Inhalten und der Verbesserung der Gesamtleistung des CDN. Im Folgenden werden einige gängige Caching-Algorithmen vorgestellt, die in CDNs verwendet werden:´. Cache ist eine grundlegende Komponente von Content Delivery Networks (CDNs). Im Zusammenhang mit CDNs bezieht sich Caching auf den Prozess der Speicherung von Kopien von Webinhalten auf den Edge-Servern des CDN-Netzwerks.</p> | === '''2.4.4 Caching''' === | ||
</div> | |||
<p>In einem Content Delivery Network (CDN) werden Caching-Algorithmen verwendet, um zu bestimmen, welche Inhalte in den Edge-Servern zwischengespeichert werden sollen und wie der Cache verwaltet werden soll. Diese Algorithmen spielen eine entscheidende Rolle bei der Optimierung der Cache-Nutzung, der Sicherstellung der Verfügbarkeit von häufig abgerufenen Inhalten und der Verbesserung der Gesamtleistung des CDN. Im Folgenden werden einige gängige Caching-Algorithmen vorgestellt, die in CDNs verwendet werden:´. Cache ist eine grundlegende Komponente von Content Delivery Networks (CDNs). Im Zusammenhang mit CDNs bezieht sich Caching auf den Prozess der Speicherung von Kopien von Webinhalten auf den Edge-Servern des CDN-Netzwerks.</p> | |||
<p>Nachstehend einige Caching Algorithmen:</p> | <p>Nachstehend einige Caching Algorithmen:</p> | ||
<p style="margin-left: 50px;">Least Recently Used (LRU)</p> | <p style="margin-left: 50px;">Least Recently Used (LRU)</p> | ||
Zeile 125: | Zeile 139: | ||
[[File:19Docker.jpg]] [27]=== '''3.1.1 Der Docker-Daemon''' ===<div>Ein Daemon**) ist ein Hintergrundprozess, der anderen Anwendungen, den Clients, verschiedene Dienste zur Verfügung stellt. Der Docker-Daemon**) ( dockerd) wartet auf Docker-API-Anfragen und verwaltet Docker-Objekte wie Images, Container, Netzwerke und Volumes. Ein Daemon kann auch mit anderen Daemons kommunizieren, um Docker-Dienste zu verwalten.'''''**)''' Daemon ist ein Begriff aus der Unix-Welt in der Windows-Wellt wird dieser Dienst bzw. Service genannt.''<br></div> | [[File:19Docker.jpg]] [27]=== '''3.1.1 Der Docker-Daemon''' ===<div>Ein Daemon**) ist ein Hintergrundprozess, der anderen Anwendungen, den Clients, verschiedene Dienste zur Verfügung stellt. Der Docker-Daemon**) ( dockerd) wartet auf Docker-API-Anfragen und verwaltet Docker-Objekte wie Images, Container, Netzwerke und Volumes. Ein Daemon kann auch mit anderen Daemons kommunizieren, um Docker-Dienste zu verwalten.'''''**)''' Daemon ist ein Begriff aus der Unix-Welt in der Windows-Wellt wird dieser Dienst bzw. Service genannt.''<br></div> | ||
<div> | <div> | ||
'''3.1.2 Der Docker-Client'''</div> | |||
=== '''3.1.2 Der Docker-Client''' === | |||
</div> | |||
<div>Der Docker-Client ( docker) ist für viele Docker-Benutzer die primäre Methode zur Interaktion mit Docker. Wenn z.B. der Befehl ''docker run'' verwendet wird, sendet der Client diese Befehle an <span style="text-decoration: underline;">dockerd</span>, der sie ausführt. Ein ''docker'' Befehl verwendet die Docker-API. Der Docker-Client kann mit mehr als einem Daemon kommunizieren.</div> | <div>Der Docker-Client ( docker) ist für viele Docker-Benutzer die primäre Methode zur Interaktion mit Docker. Wenn z.B. der Befehl ''docker run'' verwendet wird, sendet der Client diese Befehle an <span style="text-decoration: underline;">dockerd</span>, der sie ausführt. Ein ''docker'' Befehl verwendet die Docker-API. Der Docker-Client kann mit mehr als einem Daemon kommunizieren.</div> | ||
<div><strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.3 Docker-Registry</strong><br></div> | <div> | ||
=== <strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.3 Docker-Registry</strong><br> === | |||
</div> | |||
<div>in der Docker-Registry werden die Docker-Images gespeichert. <span style="text-decoration: underline;">Docker Hub</span> **)ist eine öffentliches Registry, das jeder verwenden kann,denn Docker sucht standardmäßig auf Docker Hub nach Images. Dort kann auch ein eigenes privates Register betrieben werden. Mittels der Befehle ''docker pull'' oder '' docker run'', ruft Docker die erforderlichen Images aus der konfigurierten Registrierung ab. Wird der ''docker push'' Befehl verwenden, überträgt Docker das Image in die konfigurierte Registry.</div> | <div>in der Docker-Registry werden die Docker-Images gespeichert. <span style="text-decoration: underline;">Docker Hub</span> **)ist eine öffentliches Registry, das jeder verwenden kann,denn Docker sucht standardmäßig auf Docker Hub nach Images. Dort kann auch ein eigenes privates Register betrieben werden. Mittels der Befehle ''docker pull'' oder '' docker run'', ruft Docker die erforderlichen Images aus der konfigurierten Registrierung ab. Wird der ''docker push'' Befehl verwenden, überträgt Docker das Image in die konfigurierte Registry.</div> | ||
<div>''** )Die offizielle Seite für Docker Hub ist - https://www.docker.com/communıty-edıtıon#/add_ons''</div> | <div>''** )Die offizielle Seite für Docker Hub ist - https://www.docker.com/communıty-edıtıon#/add_ons''</div> | ||
<div> | <div> | ||
<strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.4 Docker-Objekte</strong><br></div> | |||
=== | |||
<strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.4 Docker-Objekte</strong><br> === | |||
</div> | |||
<div>Wenn Docker verwendet wird , erstellt und verwendet man Images, Container, Netzwerke, Volumes, Plugins und andere Objekte. </div> | <div>Wenn Docker verwendet wird , erstellt und verwendet man Images, Container, Netzwerke, Volumes, Plugins und andere Objekte. </div> | ||
<div> | <div> | ||
<strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.4.1 Docker-Image</strong><br></div> | |||
==== | |||
<strong style="color: rgb(0, 0, 0); font-size: 18.432px;">3.1.4.1 Docker-Image</strong><br> ==== | |||
</div> | |||
<div>Ein Image ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines Docker-Containers. Häufig basiert ein Image auf einem anderen Image mit einigen zusätzlichen Anpassungen. Man kann beispielsweise ein Image erstellen, das auf dem ubuntu Image basiert, aber den Apache- Webserver und Ihre Anwendung sowie die Konfigurationsdetails installiert, die zum Ausführen Ihrer Anwendung erforderlich sind. Man kann die eigenen Images erstellen oder nur die von anderen erstellten und in einerr Registry veröffentlichten Images verwenden. Um ein eigenes Image zu erstellen, erstellt man ein Dockerfile mit einer einfachen Syntax zum Definieren der zum Erstellen und Ausführen des Images erforderlichen Schritte. Jede Anweisung in einem Dockerfile erstellt eine Ebene im Image. Wenn man das Dockerfile ändern und das Image neu erstellen, werden nur die geänderten Ebenen neu erstellt. Dies ist einer der Gründe, warum Images im Vergleich zu anderen Virtualisierungstechnologien so leicht, klein und schnell sind.<div>Docker-Images sind in sich geschlossene Vorlagen, die zur Erstellung von Containern verwendet werden. Sie nutzen ein mehrstufiges Dateisystem, um Daten effektiv zu speichern. Jede Schicht, die Anweisungen wie das Herunterladen von Softwarepaketen oder die Übertragung von Konfigurationsdateien enthält, steht für eine bestimmte Phase im Prozess der Image-Erstellung. Nur die aktualisierten Schichten müssen neu erstellt und ausgeliefert werden, so dass die Schichtung eine effektive Methode zur gemeinsamen Nutzung und Aktualisierung von Images darstellt.Die Grundlage für ein Docker-Image bildet eine Textdatei, das so genannte Dockerfile. In dieser Datei sind die Anweisungen für die Erstellung des Images Schicht für Schicht enthalten. In den meisten Fällen beginnt eine Anweisung mit einem Begriff wie „FROM“, um das Basis-Image zu identifizieren, bei dem es sich normalerweise um eine minimale Linux-Distribution handelt. Befehle wie „RUN“ werden dann verwendet, um bestimmte Operationen innerhalb einer Schicht auszuführen. Auf diese Weise kann die Umgebung innerhalb des Containers genau verwaltet werden[31][26].</div> | <div>Ein Image ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines Docker-Containers. Häufig basiert ein Image auf einem anderen Image mit einigen zusätzlichen Anpassungen. Man kann beispielsweise ein Image erstellen, das auf dem ubuntu Image basiert, aber den Apache- Webserver und Ihre Anwendung sowie die Konfigurationsdetails installiert, die zum Ausführen Ihrer Anwendung erforderlich sind. Man kann die eigenen Images erstellen oder nur die von anderen erstellten und in einerr Registry veröffentlichten Images verwenden. Um ein eigenes Image zu erstellen, erstellt man ein Dockerfile mit einer einfachen Syntax zum Definieren der zum Erstellen und Ausführen des Images erforderlichen Schritte. Jede Anweisung in einem Dockerfile erstellt eine Ebene im Image. Wenn man das Dockerfile ändern und das Image neu erstellen, werden nur die geänderten Ebenen neu erstellt. Dies ist einer der Gründe, warum Images im Vergleich zu anderen Virtualisierungstechnologien so leicht, klein und schnell sind.<div>Docker-Images sind in sich geschlossene Vorlagen, die zur Erstellung von Containern verwendet werden. Sie nutzen ein mehrstufiges Dateisystem, um Daten effektiv zu speichern. Jede Schicht, die Anweisungen wie das Herunterladen von Softwarepaketen oder die Übertragung von Konfigurationsdateien enthält, steht für eine bestimmte Phase im Prozess der Image-Erstellung. Nur die aktualisierten Schichten müssen neu erstellt und ausgeliefert werden, so dass die Schichtung eine effektive Methode zur gemeinsamen Nutzung und Aktualisierung von Images darstellt.Die Grundlage für ein Docker-Image bildet eine Textdatei, das so genannte Dockerfile. In dieser Datei sind die Anweisungen für die Erstellung des Images Schicht für Schicht enthalten. In den meisten Fällen beginnt eine Anweisung mit einem Begriff wie „FROM“, um das Basis-Image zu identifizieren, bei dem es sich normalerweise um eine minimale Linux-Distribution handelt. Befehle wie „RUN“ werden dann verwendet, um bestimmte Operationen innerhalb einer Schicht auszuführen. Auf diese Weise kann die Umgebung innerhalb des Containers genau verwaltet werden[31][26].</div> | ||
<div>Nachstehend einige Basis-Komponenten:</div> | <div>Nachstehend einige Basis-Komponenten:</div> | ||
Zeile 160: | Zeile 185: | ||
Zur Leistungsoptimierung verwendet Docker beim Erstellen von Images das Layer-Caching.</div></div></div> | Zur Leistungsoptimierung verwendet Docker beim Erstellen von Images das Layer-Caching.</div></div></div> | ||
<div><div> | <div><div> | ||
<strong style="color: #000000; font-size: 18.432px;">3.1.4.2 Docker Container</strong><br></div> | |||
==== | |||
<strong style="color: #000000; font-size: 18.432px;">3.1.4.2 Docker Container</strong><br> ==== | |||
</div> | |||
<div>'''Docker-Containe'''r sind die leichtgewichtige Alternativen zur virtuellen Maschine. Sie ermöglichen es Entwicklern, die Anwendung mit all ihren Komponenten und Abhängigkeiten zu verpacken und als einzelnes Paket zu versenden. Der Vorteil der Verwendung eines Docker-Containers besteht darin, dass Sie keinen RAM- und Speicherplatz für die Anwendungen reservieren müssen. Es generiert automatisch Speicher und Platz entsprechend den Anforderungen der Anwendung. Nachstehend die '''Abgrenzung zur virtual machine (VM).''' Eine virtuelle Maschine ist eine Software, die es ermöglicht, andere Betriebssysteme (Windows, Linux ,etc. gleichzeitig auf unserem Rechner zu installieren und zu verwenden.<br></div> | <div>'''Docker-Containe'''r sind die leichtgewichtige Alternativen zur virtuellen Maschine. Sie ermöglichen es Entwicklern, die Anwendung mit all ihren Komponenten und Abhängigkeiten zu verpacken und als einzelnes Paket zu versenden. Der Vorteil der Verwendung eines Docker-Containers besteht darin, dass Sie keinen RAM- und Speicherplatz für die Anwendungen reservieren müssen. Es generiert automatisch Speicher und Platz entsprechend den Anforderungen der Anwendung. Nachstehend die '''Abgrenzung zur virtual machine (VM).''' Eine virtuelle Maschine ist eine Software, die es ermöglicht, andere Betriebssysteme (Windows, Linux ,etc. gleichzeitig auf unserem Rechner zu installieren und zu verwenden.<br></div> | ||
'''''Ein Container ist eine ausführbare Instanz''''' eines Images. Container können mithilfe der Docker-API oder CLI erstellt, gestartet, gestoppt, verschoben oder gelöscht werden. Er kann sich mit einem oder mehreren Netzwerken verbinden, Speicher an ihn anhängen oder sogar basierend auf dem aktuellen Status ein neues Image erstellen.Standardmäßig ist ein Container relativ gut von anderen Containern und seinem Hostcomputer isoliert und können steuern, wie isoliert das Netzwerk, der Speicher oder andere zugrunde liegende Subsysteme eines Containers von anderen Containern oder vom Hostcomputer sind. Ein Container wird durch sein Image sowie alle Konfigurationsoptionen definiert, die ihm beim Erstellen oder Starten zur Verfügung gestellt/angegeben werden. Wenn ein Container entfernt wird, entschwinden alle Änderungen an seinem Status, die nicht im permanenten Speicher gespeichert sind. | |||
[[File:28vm_container.jpg]] | [[File:28vm_container.jpg]] | ||
Vorteile von Container: [35]<br>-- Container nutzen im Vergleich zu virtuellen Maschinen deutlich weniger Systemressourcen, da sie ohne vollständiges Betriebssystem auskommen.<br>-- Dank der Containerisierung lassen sich Anwendungen mühelos über verschiedeneBetriebssysteme und Hardwareumgebungen hinweg einsetzen.<br>-- Durch den Einsatz von Containern lassen sich Anwendungen schneller ausrollen,aktualisieren und skalieren.<br>-- Sie beschleunigen auch den Entwicklungsprozess, und durch die Portabilitätder Images können sie auf jedem Entwicklerrechner ausgeführt werden. | Vorteile von Container: [35]<br>-- Container nutzen im Vergleich zu virtuellen Maschinen deutlich weniger Systemressourcen, da sie ohne vollständiges Betriebssystem auskommen.<br>-- Dank der Containerisierung lassen sich Anwendungen mühelos über verschiedeneBetriebssysteme und Hardwareumgebungen hinweg einsetzen.<br>-- Durch den Einsatz von Containern lassen sich Anwendungen schneller ausrollen,aktualisieren und skalieren.<br>-- Sie beschleunigen auch den Entwicklungsprozess, und durch die Portabilitätder Images können sie auf jedem Entwicklerrechner ausgeführt werden. | ||
<strong style="color: #000000; font-size: 18.432px;">3.1.4.3 Docker-Container Ausführung</strong | <strong style="color: #000000; font-size: 18.432px;">3.1.4.3 Docker-Container Ausführung</strong> | ||
<div style="">Container können in verschiedenen Modi betrieben werden und zwar als [29] | <div style="">Container können in verschiedenen Modi betrieben werden und zwar als [29] | ||
Zeile 173: | Zeile 201: | ||
<strong style="color: #000000; font-size: 18.432px;"><span style="font-size: 12pt;">Interactivecontainer -</span> </strong>Dieser eignet sich zum Testen, da man sich interactiv über das z.B. CLI mit einer Anwendung im Container verbinden kann. | <strong style="color: #000000; font-size: 18.432px;"><span style="font-size: 12pt;">Interactivecontainer -</span> </strong>Dieser eignet sich zum Testen, da man sich interactiv über das z.B. CLI mit einer Anwendung im Container verbinden kann. | ||
<strong style="color: #000000; font-size: 18.432px;"><span style="font-size: 12pt;">Taskcontainer -</span> </strong>Dieser enthält den Code mit sämtlichen Abhängigkeiten, der gekapselt ist und dazu verwendet wird, diesen code auszuführen, In lartext z.B. ein Shellscript befindet, mit ggf. vielen Paketabhängihkeiten, der eine Umgebung aufbaut. Nach der Ausführung wird dieser Container wieder beendet. Der Vorteil dieses Conainer ist, dass er sich gut zur Automatisierung eignet.</div> | <strong style="color: #000000; font-size: 18.432px;"><span style="font-size: 12pt;">Taskcontainer -</span> </strong>Dieser enthält den Code mit sämtlichen Abhängigkeiten, der gekapselt ist und dazu verwendet wird, diesen code auszuführen, In lartext z.B. ein Shellscript befindet, mit ggf. vielen Paketabhängihkeiten, der eine Umgebung aufbaut. Nach der Ausführung wird dieser Container wieder beendet. Der Vorteil dieses Conainer ist, dass er sich gut zur Automatisierung eignet.</div> | ||
<strong style="color: #000000; font-size: 18.432px;">3.1.5 Docker-Desktop</strong><br | <strong style="color: #000000; font-size: 18.432px;">3.1.5 Docker-Desktop</strong><br> | ||
<div>Docker Desktop ist eine einfach zu installierende Anwendung für die Mac-, Windows- oder Linux-Umgebung, mit der containerisierte Anwendungen und Microservices erstellt und freigeben werden. | <div>Docker Desktop ist eine einfach zu installierende Anwendung für die Mac-, Windows- oder Linux-Umgebung, mit der containerisierte Anwendungen und Microservices erstellt und freigeben werden. | ||
Zeile 339: | Zeile 367: | ||
:''Abrufen von Container-Images '' | :''Abrufen von Container-Images '' | ||
:''Verwalten von Lebenszyklusoperationen(Starten und Stoppen von Containern)'' | :''Verwalten von Lebenszyklusoperationen(Starten und Stoppen von Containern)'' | ||
Auf jedem Arbeitsknoten läuft ein Kube-Proxy-Dienst, der die Vernetzung des Clusters implementiert und den Datenverkehr zu den auf dem Knoten laufenden Aufgaben ausgleicht.<div> | Auf jedem Arbeitsknoten läuft ein Kube-Proxy-Dienst, der die Vernetzung des Clusters implementiert und den Datenverkehr zu den auf dem Knoten laufenden Aufgaben ausgleicht.</div> | ||
<strong style="color: #000000; font-size: 18.432px;">4.3.7. Kubernetes - Applikationen</strong></div> | <div></div> | ||
<div>< | <div><div> | ||
=== | |||
<strong style="color: #000000; font-size: 18.432px;">4.3.7. Kubernetes - Applikationen</strong> === | |||
</div> | |||
<div><h3 class="mwt-heading" >Kubernetes führt Container und VMs, aus. Allerdings müssen die alle in Pods verpackt werden, Sobald die in einem Pod verpackt sind, übergeben diese die Anwendung an Kubernetes, und Kubernetes führt sie aus. Dazu gehört auch die komplexe Logistik der Auswahl geeigneter Knoten, das Verbinden von Netzwerken, das Anhängen von Volumes und vieles mehr. Man kann sogar Anwendungen abfragen und Änderungen vornehmen. Das Vorgehensmodell ist an sich trivial<br> | |||
::1.eine Anwendung in einer bevorzugten Sprache schreiben | ::1.eine Anwendung in einer bevorzugten Sprache schreiben | ||
::2."containerisieren" | ::2."containerisieren" | ||
Zeile 347: | Zeile 379: | ||
::4. verpacken in einen Pod (meist ein Controller-Objekt wie z. B. ein Deployment) | ::4. verpacken in einen Pod (meist ein Controller-Objekt wie z. B. ein Deployment) | ||
::5. an Kubernetes übergeben<br> | ::5. an Kubernetes übergeben<br> | ||
<strong style="color: #000000; font-size: 18.432px;">4.3.8. Kubernetes - Config Maps</strong></ | <strong style="color: #000000; font-size: 18.432px;">4.3.8. Kubernetes - Config Maps</strong></h3> | ||
<div>Um einen Container in unterschiedlichen Umgebungen deployenstellt Kobernetes ein Tool(ConfigMap) zur Verfügung. Mithilfe der ''ConfigMap'' werden die Konfigurationen der Anwendungen mit Kubernetes umgesetzt und dadurch entkoppeln man die Konfiguration und das Container-Image. Eine ConfigMap ist ein Kubernetes-API-Objekt, das einfach eine Liste von Schlüssel/Wert-Paaren enthält. Die Werte können von kurzen Zeichenfolgen bis zu großen Blöcken strukturierten Textes reichen, die Sie normalerweise in einer Anwendungskonfigurationsdatei finden. Pods können auf einen oder mehrere dieser Schlüssel/Wert-Einträge in der ConfigMap verweisen. Ein Pod kann auf mehrere ConfigMaps verweisen, und mehrere Pods können dieselbe ConfigMap verwenden.[35] | <div>Um einen Container in unterschiedlichen Umgebungen deployenstellt Kobernetes ein Tool(ConfigMap) zur Verfügung. Mithilfe der ''ConfigMap'' werden die Konfigurationen der Anwendungen mit Kubernetes umgesetzt und dadurch entkoppeln man die Konfiguration und das Container-Image. Eine ConfigMap ist ein Kubernetes-API-Objekt, das einfach eine Liste von Schlüssel/Wert-Paaren enthält. Die Werte können von kurzen Zeichenfolgen bis zu großen Blöcken strukturierten Textes reichen, die Sie normalerweise in einer Anwendungskonfigurationsdatei finden. Pods können auf einen oder mehrere dieser Schlüssel/Wert-Einträge in der ConfigMap verweisen. Ein Pod kann auf mehrere ConfigMaps verweisen, und mehrere Pods können dieselbe ConfigMap verwenden.[35] | ||
Zeile 353: | Zeile 385: | ||
<div>Unabhängig davon, wie eine Anwendung Konfigurationszuordnungen verwendet, kann man die Konfiguration durch Speichern der Konfiguration in einem separaten Objekt statt im Pod für verschiedene Umgebungen getrennt halten.</div> | <div>Unabhängig davon, wie eine Anwendung Konfigurationszuordnungen verwendet, kann man die Konfiguration durch Speichern der Konfiguration in einem separaten Objekt statt im Pod für verschiedene Umgebungen getrennt halten.</div> | ||
<div> [[File:29configmap.jpg]] Konfigurationszuordnung zum Entkoppeln der Konfiguration vom Pod<div> | <div> [[File:29configmap.jpg]] Konfigurationszuordnung zum Entkoppeln der Konfiguration vom Pod<div> | ||
<strong style="color: #000000; font-size: 18.432px;">4.3. | === | ||
<strong style="color: #000000; font-size: 18.432px;">4.3.9. Kubernetes - Pod</strong> === | |||
</div> | |||
<div><div>Der Kubernetes Pod ist die kleinste Einheit für die Planung ist in der VMware-Welt die virtuelle Maschine (VM). In der Docker-Welt ist es der Container. In Kubernetes ist es der Pod. Ja, Kubernetes führt Container, VMs, Wasm-Anwendungen und mehr aus. Aber sie alle müssen in Pods verpackt werden. Pods und Container In den einfachsten Konfigurationen wird ein einzelner Container pro Pod ausgeführt, weshalb wir die Begriffe Pod und Container manchmal synonym verwenden. Es gibt jedoch leistungsstarke Anwendungsfälle für Pods mit mehreren Containern, darunter: Service Meshes Hilfsdienste, die App-Umgebungen initialisieren Apps mit eng gekoppelten Hilfsfunktionen</div> | <div><div>Der Kubernetes Pod ist die kleinste Einheit für die Planung ist in der VMware-Welt die virtuelle Maschine (VM). In der Docker-Welt ist es der Container. In Kubernetes ist es der Pod. Ja, Kubernetes führt Container, VMs, Wasm-Anwendungen und mehr aus. Aber sie alle müssen in Pods verpackt werden. Pods und Container In den einfachsten Konfigurationen wird ein einzelner Container pro Pod ausgeführt, weshalb wir die Begriffe Pod und Container manchmal synonym verwenden. Es gibt jedoch leistungsstarke Anwendungsfälle für Pods mit mehreren Containern, darunter: Service Meshes Hilfsdienste, die App-Umgebungen initialisieren Apps mit eng gekoppelten Hilfsfunktionen</div> | ||
<div><div>Die Vorteile eines einzelnen Containers pro Pod sind[35]:</div> | <div><div>Die Vorteile eines einzelnen Containers pro Pod sind[35]:</div> | ||
Zeile 371: | Zeile 405: | ||
<p>Dieser Pod verfügt über zwei Container sowie 2 Volumes und einen Pause.</p> | <p>Dieser Pod verfügt über zwei Container sowie 2 Volumes und einen Pause.</p> | ||
==== '''4.3. | ==== '''4.3.9.1 Pod - Ablauf''' ==== | ||
<p>Der Pod startet zuerst den Pause-Container und initialisiert die IP sowie den Namespace und die cgroups und hält diese, bis der Pod terminiert wird. Jeder weitere Container innerhalb des Pods kann sich auf die initialisierten Ressourcen verlassen und den über die IP eingehenden Traffic erhalten.<br>Der Vorteil des Pause Container ist, dass selbst wenn die Anwendungscontainer neu gestartet werdendie Ip weiterhin bestehen bleibt. Der Pause-Container bleibt hidden und wird am CLI nicht angezeigt. Dieser läuft jedoch auf dem Node, und ist aber über die Container Runtime zu sehen. Auch die Volumes können von beiden Containern verwendet werden. Sie greifen ggf. gleichzeitig darauf zu um z.B. einen Datenaustausch vorzunehmen. Davei ist es wichtigm dass es zu keinen Konflikten kommt, denn diese werden von Kubernetes nicht verhindert oder überwacht.<span style="text-decoration: underline;">TIPPzur Implementierung</span> : ein Container für r/w und er Andere ist read-only. Da Kubernetes nur das Pod-Objekt managt, werden natürlich alle Container innerhalb eines Pods auf dem gleichen Node gestartet. Nur so können die Container innerhalb eines Pods auch die Ressourcen wie Netzwerk und Storage miteinander teilen.</p> | <p>Der Pod startet zuerst den Pause-Container und initialisiert die IP sowie den Namespace und die cgroups und hält diese, bis der Pod terminiert wird. Jeder weitere Container innerhalb des Pods kann sich auf die initialisierten Ressourcen verlassen und den über die IP eingehenden Traffic erhalten.<br>Der Vorteil des Pause Container ist, dass selbst wenn die Anwendungscontainer neu gestartet werdendie Ip weiterhin bestehen bleibt. Der Pause-Container bleibt hidden und wird am CLI nicht angezeigt. Dieser läuft jedoch auf dem Node, und ist aber über die Container Runtime zu sehen. Auch die Volumes können von beiden Containern verwendet werden. Sie greifen ggf. gleichzeitig darauf zu um z.B. einen Datenaustausch vorzunehmen. Davei ist es wichtigm dass es zu keinen Konflikten kommt, denn diese werden von Kubernetes nicht verhindert oder überwacht.<span style="text-decoration: underline;">TIPPzur Implementierung</span> : ein Container für r/w und er Andere ist read-only. Da Kubernetes nur das Pod-Objekt managt, werden natürlich alle Container innerhalb eines Pods auf dem gleichen Node gestartet. Nur so können die Container innerhalb eines Pods auch die Ressourcen wie Netzwerk und Storage miteinander teilen.</p> | ||
=== '''4.3. | === '''4.3.10 Kubernetes Deployment''' === | ||
<p>Wenn Kubernetes mit Pods arbeitet, werden diese fast immer über übergeordnete Controller wie Deployments, StatefulSets(für die Verwaltung von zustandsbehafteten Anwendungen) und DaemonSets(um einen Pod auf jedem Node im Cluster auszuführen). bereitgestellt. Diese laufen alle auf der Steuerungsebene und arbeiten als Hintergrundüberwachungsschleifen, die den beobachteten Zustand mit dem gewünschten Zustand abgleichen. Deployments fügen zustandslosen Anwendungen Selbstheilung, Skalierung, rollende Updates und versionierte Rollbacks hinzu. Das Deployment ist dabei das oberste Objekt, verwaltet ein '''''ReplicaSet''''' und beauftragt das ReplicaSet damit, die Pods zu verwalten und zu überwachen.</p> | <p>Wenn Kubernetes mit Pods arbeitet, werden diese fast immer über übergeordnete Controller wie Deployments, StatefulSets(für die Verwaltung von zustandsbehafteten Anwendungen) und DaemonSets(um einen Pod auf jedem Node im Cluster auszuführen). bereitgestellt. Diese laufen alle auf der Steuerungsebene und arbeiten als Hintergrundüberwachungsschleifen, die den beobachteten Zustand mit dem gewünschten Zustand abgleichen. Deployments fügen zustandslosen Anwendungen Selbstheilung, Skalierung, rollende Updates und versionierte Rollbacks hinzu. Das Deployment ist dabei das oberste Objekt, verwaltet ein '''''ReplicaSet''''' und beauftragt das ReplicaSet damit, die Pods zu verwalten und zu überwachen.</p> | ||
<p>Das Deployment: [35]<br>- verwaltet den Lebenszyklus von Pods und ReplicaSets.</p> | <p>Das Deployment: [35]<br>- verwaltet den Lebenszyklus von Pods und ReplicaSets.</p> |
Aktuelle Version vom 23. September 2024, 16:19 Uhr
1. Allgemein
Die Skalierbarkeit und der Lastausgleich sind zwei entscheidende Aspekte in It-Systemen. Skalierbarkeit bezieht sich auf die Fähigkeit eines Systems, mit steigender Last oder Anforderungen umzugehen, ohne dass die Leistung beeinträchtigt wird. D.h. die IT-Infrastruktur ist ggf. flexibel anzupassen und zu erweitern, um mit dem Wachstum und den Anforderungen an die IT Schritt zu halten.Skalierbarkeit bezeichnet die Fähigkeit eines Systems, wachsende quantitative Anforderungen durch Hinzuügen von Ressourcen auszugleichen, ohne dasseine Änderung von Systemkomponenten notwendig wird. Zentrale Lösungen stoßen hier in der Regel schnell an ihre Grenzen( .z.B.Bestell- oder Buchungssysteme) [11]
Der Lastausgleich hingegen verteilt die Arbeitslast gleichmäßig auf mehrere Ressourcen, um die Leistung und Verfügbarkeit zu verbessern und Ausfälle zu vermeiden.
1.1 Skalierung
- Skalierung von einem Serversystem ist notwendig, da der Server ein Bottleneck und Single Point of Failure ist. Ein Client kann bei Systemen mit mehreren Servern auf verschiedene Weisen an die Daten
kommen: [12]
• rekursiv --> Client fragt einen Server, dieser fragt rekursiv andere Server.etc., etc. bis der Zielserver erreicht ist, der Client erhält die Antwort vom befragten Server
• transitiv --> Client bekommt die Antwort direkt vom Zielserver - Server können klassifiziert werden als:
• Proxy --> Schnittstelle zwischen Client und anderen Servern, die die Anfragen cached, geeignet für sich wiederholende Anfragen
• Broker --> Teilt Clients einem Server entsprechend der geforderten Aufgaben zu
– Vorteil: Location/Replication transparency
– Nachteil: Single-Point-Of-Failure
• Trader --> wählt den passenden Server aus, falls mehrere Server denselben Service in unterschiedlicher Qualität anbieten
• Balancer --> Verteilt Workload gleichmäßig auf alle Server
• Agent --> Splittet komplexe Anfragen auf, sendet die simpleren Anfragen an andere Server und kombiniert die Antworten zu einer Antwort
1.1.1 Web-Caching
Web-Caching dient der Skalierbarkeit und bereitet geringe Latenz.Das definierende Merkmal aller Web-Caches ist, dass diese HTTP-Caching-Metadaten transparent als Read-Through-Caches interpretieren. Das bedeutet, dass bei einem Cache-Miss die Anfrage an den nächsten Cache oder den Ursprungsserver
weitergeleitet und dann die Antwort gemäß der bereitgestellten TTL zwischengespeichert wird. Web-Caches leiten immer Schreibanfragen weiter, da diese in Form von undurchsichtigen POST, PUT und DELETE-Anfragen kommen, deren Semantik implizite Eigenschaften einer REST/HTTP-API sind.
Globale Netze von Web-Caches können in CDNs auf Inter-Cluster Austausch hinsichtlich Geo-Replikation vertrauen. In der Praxis nutzen CDN-Anbieter die Tatsache, dass eine Cache-Suche nach einer URL gut zu einer Schlüssel-Wert-Schnittstelle passt. Dies ermöglicht das Skalieren von Cache-Clustern, indem Web-Caches als Proxy auf einem verteilten Key Value gespeichert bereitgestellt werden.[13
1.2 Loadbalancing (Lastenausgleich)
Ein Load Balancer verteilt die Arbeitslast Ihres Systems auf mehrere Einzelsysteme oder eine Gruppe von Systemen, um die Belastung eines einzelnen Systems zu verringern, was wiederum die Zuverlässigkeit, Effizienz und Verfügbarkeit Ihrer Unternehmensanwendung oder Website erhöht.
Er fungiert als Vermittler/Regler, der vor den Servern sitzt und Anfragen an alle Server weiterleitet, die in der Lage sind, diese Anfragen in einer Weise zu erfüllen, welche die Geschwindigkeit und die Kapazitätsauslastung maximieren und sicherstellen. Somit wird sichergestellt, dass kein einzelner Server überlastet wird, und die Performance beeinträchtigt werden könnte.
Falls ein einzelner Server ausfällt, leitet der Load Balancer den Datenverkehr auf die verbleibenden Online-Server um. Wenn ein neuer Server zur Servergruppe hinzugefügt wird, beginnt der Load Balancer automatisch, Anfragen an ihn zu senden.
Load Balancer verwenden Algorithmen wie Round-Robin, Sticky Sessions und inhaltsbasiertes Routing, um den Datenverkehr zu verteilen. Dadurch wird sichergestellt, dass kein einzelner Server mit Anfragen überlastet wird, was zu einer verbesserten Leistung und Skalierbarkeit führt.
Die aufgaben des Load Balancer:
- a) Verteilt Client-Anfragen bzw.r die Netzwerklast effizient auf einen weiteren oder mehrere Server.
- b) Überwacht den Zustand, die Verfügbarkeit und die Ausfallzeiten der Server
- c) Sorgt für hohe Verfügbarkeit und Zuverlässigkeit, indem er Anfragen nur an Server sendet, die online sind.
- d) Bietet die Flexibilität, je nach Bedarf Server hinzuzufügen oder zu entfernen
Vorteile des Lastausgleichs:
- Verringerung der Arbeitslast auf einem einzelnen Server.
- Durch Gleichzeitigkeit wird eine größere Menge an Arbeit in der gleichen Zeit erledigt.
- Gesteigerte Leistung Ihrer Anwendung durch schnellere Reaktion.
- Kein einzelner Ausfallpunkt. In einer Umgebung mit Lastausgleich ist die Anwendung bei Ausfall eines Servers immer noch verfügbar und wird von den anderen Servern im Cluster bedient.
- Wenn ein geeigneter Lastausgleichsalgorithmus verwendet wird, führt dies zu einer optimalen und effizienten Nutzung der Ressourcen, da das Szenario, dass einige Serverressourcen mehr genutzt werden als andere, vermieden wird.
- Skalierbarkeit: Wir können die Anzahl der Server im laufenden Betrieb erhöhen oder verringern, ohne die Anwendung zu beeinträchtigen.
- Lastausgleich erhöht die Zuverlässigkeit Ihrer Unternehmensanwendung
- Erhöhte Sicherheit, da die physischen Server und IPs in bestimmten Fällen abstrakt sind.
Es gibt zwei Arten von Load Balancern, die unterschiedliche Planungsalgorithmen und Routing-Mechanismen implementieren.
Der Software Load - Balancer läuft auf virtuellen Maschinen (VMs) oder White-Box-Servern, meist als Application-Delivery-Controller-Funktion (ADC). ADCs bieten in der Regel zusätzliche Funktionen, darunter Caching, Komprimierung und Traffic Shaping. Der in Cloud-Umgebungen beliebte virtuelle Lastenausgleich bietet ein hohes Maß an Flexibilität. Er ermöglicht es den Benutzern beispielsweise, den Datenverkehr automatisch nach oben oder unten zu skalieren, um Verkehrsspitzen oder einen Rückgang der Netzwerkaktivität zu spiegeln.
Der Hardware - Load-Balancer ist ein Gerät mit spezieller und meist proprietär integrierter Software, welche zum Bewältigen großer Datenmengen des Anwendungsverkehrs ausgelegt ist. Diese Art des Load Balancer verfügt u.a. über eine Virtualisierungsfunktion und ermöglicht die Verwendung von Instanzen eines virtuellen Load Balancers.
2. Verwendung von Reverse Proxies und Content Delivery Networks (CDNs)
2.1 Reverse Proxy
Reverse Proxies fungieren als Vermittler zwischen Clients und Webservern, verbessern die Leistung von Websites durch Caching und bieten zusätzliche Sicherheit, indem diese die IP-Adresse des Ursprungs-Servers verbergen.
Ein Reverse Proxy ist ein Server, der sich zwischen das Internet und einen Webserver schaltet, Anfragen von Clients entgegennehmen und sie an den entsprechenden Server weiterleitet. Dies kann in verschiedenen Situationen nützlich sein, z. B. wenn man mehrere Webserver hat, die unterschiedliche Arten von Inhalten anbieten (z. B. statische Dateien gegenüber dynamischen Inhalten), oder wenn diese die SSL-Verschlüsselung vom Webserver auf den Reverse-Proxy verlagern wollen.
Einer der Hauptvorteile eines Reverse-Proxys besteht darin, dass er die Leistung einer Website verbessern kann, indem er häufig angeforderte Inhalte zwischenspeichert und die direkt ausliefert, ohne diese vom Webserver anfordern zu müssen. Dies kann die Belastung des Webservers erheblich verringern und die Antwortzeiten für die Kunden verbessern.
=== 2.1.1 Funktionsweise ===
Wenn ein Client eine Anfrage für den Zugriff auf eine Website sendet, durchläuft dieser zunächst den Reverse Proxy. Der Proxy prüft in seinem Zwischenspeicher, ob er den vom Client angeforderten Inhalt bereits hat. Ist dies der Fall, kann er den Inhalt direkt an den Client ausliefern. Ist dies nicht der Fall, leitet er die Anfrage an den Ursprungsserver weiter, um die Inhalte abzurufen. Sobald der Inhalt abgerufen wurde, speichert der Reverse-Proxy ihn im Zwischenspeicher, so dass künftige Anfragen schneller bedient werden können.
Reverse Proxys können auch dazu verwendet werden, den Datenverkehr auf mehrere Server zu verteilen. Dieser Prozess wird als Lastausgleich bezeichnet und ist ein wesentlicher Bestandteil der Netzwerkarchitektur.
Darüber hinaus kann ein Reverse-Proxy auch zusätzliche Sicherheit bieten, indem er die IP-Adresse des Ursprungs-Servers verbirgt und vor DDoS-Angriffen schützt. Indem er als Schutzschild zwischen dem Internet und dem Webserver fungiert, kann der Reverse-Proxy Angreifer daran hindern, direkt auf den Webserver zu zielen und möglicherweise sensible Daten zu kompromittieren.
2.2 Reverse-Proxy Funktionen versus Load-Balancer Funktionen
- Hochverfügbarkeit sowie Skalierbarkeit
Einer der Hauptvorteile von Load Balancern besteht darin, dass sie den Datenverkehr und die Ressourcen auf mehrere Server verteilen können, was die Skalierung bei Bedarf erleichtert. Dies ist besonders nützlich in Umgebungen, in denen ein hohes Verkehrsaufkommen zu bewältigen ist. Reverse Proxies hingegen sind nicht für eine einfache Skalierung ausgelegt, da sie den Datenverkehr im Allgemeinen an einen einzigen Server leiten. Sie können jedoch häufig angeforderte Inhalte im Cache speichern, um die Leistung zu verbessern.
One of the main benefits of load balancers is their ability to distribute traffic and resources across multiple servers, making it easier to scale up as needed. This is particularly useful in environments where there is a high volume of traffic that needs to be handled. Reverse proxies, on the other hand, are not designed for easy scaling since they generally direct traffic to a single server. However, they can still cache frequently requested content to improve performance.
- SSL-Terminierung
Sowohl Load Balancer als auch Reverse Proxies können die SSL-Terminierung durchführen, bei der SSL-verschlüsselter Datenverkehr entschlüsselt und an den entsprechenden Server weitergeleitet wird. In einer Load-Balancing-Umgebung kann die SSL-Terminierung auf dem Load Balancer durchgeführt werden, während in einer Reverse-Proxy-Umgebung die SSL-Terminierung in der Regel auf dem Proxy-Server selbst erfolgt.
- Security
Load Balancer und Reverse Proxys können beide zum Schutz vor DDoS-Angriffen beitragen, aber Reverse Proxys haben den zusätzlichen Vorteil, dass diese Anonymität bieten. Sie können nämlich die IP-Adresse des Ursprungs-Servers verbergen, indem diese den gesamten externen Datenverkehr zunächst an den Reverse-Proxy weiterleiten. Dadurch wird es für Angreifer schwieriger, den Ursprungsserver zu identifizieren.
- Datenverkehr im Netz
Nochmals die bereits erwähnten Fakten. Die Hauptfunktion eines Load Balancer darin, den Netzwerkverkehr gleichmäßig auf mehrere Server zu verteilen. Dies ist besonders in Umgebungen nützlich, in denen mehrere Server ein hohes Verkehrsaufkommen bewältigen müssen. Reverse Proxies hingegen sind darauf ausgelegt, Inhalte zwischenzuspeichern und diese effizient an die Clients zu liefern. Daher eignen sie sich besser für die Bearbeitung von Anfragen nach statischen Inhalten von einem einzigen Server.
2.3 Apache Webserver als Reverse Proxy
Der Apache HTTP Server bietet eine breite Palette von Modulen und Erweiterungen, die speziell für die Unterstützung verschiedener Proxy-Funktionen entwickelt wurden.
Mit dem Modul mod_proxy kann der Apache-Webserver als Reverse-Proxy fungieren, indem er Anfragen an einen anderen Server weiterleitet und die Antwort an den Client zurückgibt. Dies erweist sich als nützlich in Szenarien, in denen mehrere Webserver vorhanden sind und die Arbeitslast auf diese verteilt werden muss. Es verbessert die Leistung und baut eine Hochverfügbarkeitsarchitektur für die Web-Infrastruktur auf.
Apache mod_proxy besteht aus mehreren Modulen, von denen jedes seine eigene Funktionalität hat. Hier sind einige der wichtigsten Module:
- mod_proxy: Stellt die Kernfunktionalität des Reverse-Proxys bereit und leitet Anfragen an einen anderen Server weiter.
- mod_proxy_http: Bietet Proxy-Funktionalität für HTTP- und HTTPS-Protokolle.
- mod_proxy_ftp: Bietet Proxy-Funktionen für das FTP-Protokoll.
- mod_proxy_connect: Für SSL-verschlüsselte Verbindungen.
- mod_proxy_ajp: Dient der Weiterleitung von Anfragen an AJP-fähige Anwendungsserver.
- mod_proxy_wstunnel: Für die Verwendung von Web-Sockets
- mod_proxy_balancer: Bietet Lastausgleichsfunktionen.
- mod_cache: Unterstützt verschiedene Cache-Methoden.
- mod_headers: Zur Änderung von HTTP-Header-Zeilen.
- mod_deflate: Komprimiert HTTP-Antworten.
2.4 Content Delivery Network
Ein Content Delivery Network (CDN) ist ein System von Servern, welches via verschiedener Rechenzentren weltweit verteilt(vgl. Adrew. S Tanenbaum - Distributed Systwms) sind. EinProxy-Server-Netzwerk ist optimal, um die Reichweite von Webseiten zu erhöhen. Die Verwendung eines solchen Netzwerks bedeutet, dass ein Webserver in Verbund mit einigen/vielen Servern verbunden ist. Mit Hilfe eines Verteilungssystems können die statischen Inhalte des Webserver auf Replikationsserver übertragen werden. Ein Anforderungsroutingsystem bestimmt, welcher Replikationsserver im CDN am Besten dafür geeignet ist, um die Daten/Dateien rasch auszuliefern, wenn Benutzer auf bestimmte Inhalte Ihrer Website zugreifen. Je nach Anbieter unterscheiden sich CDNs in mehreren Punkten: Die Verteilung und Anzahl der Server sowie der Grad der Integration leistungsstarker Backbone-Netzwerke sind nur einige Beispiele dafür, wie sie sich unterscheiden können.
Der Hauptzweck eines CDN besteht darin, die Latenzzeit zu verringern und die Zeit zu minimieren, die es dauert, bis die Inhalte die Nutzer erreichen. Dies wird durch die Platzierung von Servern in mehreren Datenzentren auf der ganzen Welt erreicht, die sich strategisch in der Nähe der wichtigsten Internetaustauschpunkte befinden. Wenn ein Benutzer Inhalte anfordert, leitet das CDN die Anforderung an den Server weiter, der dem Benutzer geografisch am nächsten liegt, wodurch die Entfernung, die die Daten zurücklegen müssen, verringert und somit die Antwortzeiten verbessert werden. CDNs tragen auch dazu bei, die Last auf Webservern zu verteilen, indem sie Inhalte in ihrem Netzwerk zwischenspeichern und vervielfältigen. Wenn Inhalte angefordert werden, kann der CDN-Server, der dem Nutzer am nächsten ist, die zwischengespeicherte Version der Inhalte bereitstellen, anstatt diese jedes Mal vom Ursprungsserver abzurufen. Dadurch wird der Ursprungsserver entlastet und die Skalierbarkeit verbessert. Darüber hinaus bieten CDNs weitere Funktionen wie Lastausgleich, SSL/TLS-Terminierung, DDoS-Schutz und Sicherheitsmaßnahmen zum Schutz vor bösartigen Angriffen. Sie können die Bereitstellung von Inhalten optimieren, indem sie Dateien komprimieren, Code minifizieren und Techniken wie Bildoptimierung und Browser-Caching nutzen. Durch den Einsatz eines CDN können Websites und Anwendungen von einer verbesserten Leistung, schnelleren Seitenladezeiten, höherer Verfügbarkeit und besserer Skalierbarkeit profitieren. Sie sind besonders nützlich für Websites mit einem globalen Publikum oder solchen, die große Mengen an medienintensiven Inhalten bereitstellen. [16]
Der Originserver in einem CDN dient als zentrales Repository für die Originalinhalte und interagiert mit der CDN-Infrastruktur, um Inhalte bereitzustellen und zu aktualisieren. Er spielt eine wichtige Rolle bei der Bereitstellung von Inhalten, bei Caching-Richtlinien, bei der Ungültigkeitserklärung von Inhalten und bei der Handhabung der dynamischen Inhaltsgenerierung. Der Originserver arbeitet mit den Edge-Servern im CDN zusammen, um eine effiziente und zuverlässige Bereitstellung der Inhalte für die Endbenutzer zu gewährleisten.
2.4.1 Originserver in CDNs
In einem Content-Delivery-Network (CDN) ist der Originserver, sprich der Ursprungsserver, der zentrale Server, auf dem das Original oder die maßgebliche Kopie des Webinhalts gespeichert ist. Der Originserver spielt eine entscheidende Rolle bei der Bereitstellung von Inhalten und interagiert mit der CDN-Infrastruktur.
2.4.1.1 Aufgaben/Funktion des Origin
Quelle der Inhalte: Der Originserver ist die Hauptquelle der Inhalte, die über das CDN verbreitet werden. Er speichert die Originaldateien, z. B. HTML-Seiten, Bilder, Videos, Skripte und andere Medieninhalte, aus denen eine Website oder Anwendung besteht.
Verteilung von Inhalten: Wenn ein CDN eine Inhaltsanforderung erhält, prüft es, ob der angeforderte Inhalt im Cache des Edge-Servers verfügbar ist, der dem Benutzer am nächsten ist. Wenn der Inhalt im Cache nicht verfügbar oder abgelaufen ist, holt das CDN den Inhalt vom Originserver ab.
Bereitstellung von Inhalten: Der Originserver ist dafür verantwortlich, dem CDN die erforderlichen Inhalte zur Verteilung bereitzustellen. Dazu gehört das Hochladen und Aktualisieren der Inhalte auf dem Originserver, sobald Änderungen oder Aktualisierungen auftreten. Die Anbieter von Inhalten interagieren in der Regel direkt mit dem Originserver, um ihre Inhalte zu verwalten.
Caching-Richtlinien: Der Originserver kann Caching-Richtlinien oder -Regeln angeben, die das CDN befolgen soll. Dazu gehören Informationen wie Cache-Kontroll-Header, Cache-Ablaufzeiten und Cache-Validierungsmechanismen. Mit Hilfe der Caching-Richtlinien wird festgelegt, wie lange der Inhalt im Cache der Edge-Server gespeichert werden kann, bevor er vom Originserver aktualisiert werden muss.
Inhaltsvalidierung: Wenn Inhalte auf dem Originserver geändert, aktualisiert oder gelöscht werden, kann der Originserver die Invalidierung der Inhalte im CDN auslösen. Dadurch wird sichergestellt, dass die zwischengespeicherten Kopien des Inhalts auf den Edge-Servern gelöscht und durch die aktualisierte Version ersetzt werden. Dynamisch
Generierung von Inhalten: CDNs eignen sich zwar hervorragend für die Bereitstellung statischer Inhalte, können aber auch dynamische, vom Originserver generierte Inhalte verarbeiten. Dazu gehören Inhalte, die auf der Grundlage von Benutzerinteraktionen oder Echtzeitdaten personalisiert werden. CDNs können mit dem Originserver zusammenarbeiten, um die Bereitstellung dynamischer Inhalte zu optimieren, indem sie Techniken wie Edge-Side Scripting (ESS) oder Dynamic Content Caching einsetzen.
2.4.2 EdgeServer in CDNs
In einem Content-Delivery-Network (CDN) bezieht sich ein Edge-Server auf die Server, die sich am Rande des Netzes befinden, näher an den Endnutzern. Diese Server spielen eine entscheidende Rolle bei der effizienten Bereitstellung von Inhalten und sind eine Schlüsselkomponente der CDN-Infrastruktur.==== 2.3.2.1 Aufgaben/Funktion des Edge: ====
Zweck von Edge-Servern: Der Hauptzweck von Edge-Servern besteht darin, zwischengespeicherte Kopien von Webinhalten zu speichern und den Endnutzern bereitzustellen. Durch die Platzierung von Servern an verschiedenen geografisch verteilten Standorten verringern CDNs die Entfernung zwischen den Inhalten und den Nutzern, wodurch die Latenzzeit minimiert und die Leistung verbessert wird.
Zwischenspeicherung von Inhalten: Edge-Server speichern häufig aufgerufene Inhalte vom Ursprungsserver im Cache. Wenn ein Benutzer Inhalte anfordert, prüft das CDN, ob der Inhalt im Cache des Edge-Servers verfügbar ist. Ist dies der Fall, kann der Edge-Server den Inhalt direkt an den Benutzer liefern und muss ihn nicht erst vom Ursprungsserver abrufen. Dieser Caching-Mechanismus entlastet den Ursprungsserver und verbessert die Antwortzeiten.
Routing: CDNs verwenden intelligente Routing-Algorithmen, um den besten Edge-Server für die Bearbeitung einer Benutzeranfrage zu ermitteln. Dabei werden Faktoren wie der geografische Standort des Benutzers, die Netzwerkbedingungen, die Serverauslastung und die Verfügbarkeit berücksichtigt. Ziel ist es, die Anfrage an den Edge-Server zu leiten, der den Inhalt am effizientesten bereitstellen kann, wodurch die Latenzzeit minimiert und die Leistung maximiert wird.
Lastausgleich: Edge-Server spielen auch eine Rolle beim Lastausgleich innerhalb der CDN-Infrastruktur. CDNs verteilen Benutzeranfragen auf mehrere Edge-Server, um die Ressourcennutzung zu optimieren und Skalierbarkeit zu gewährleisten. Dadurch wird verhindert, dass ein einzelner Server überlastet wird, und es wird sichergestellt, dass der Prozess der Inhaltsbereitstellung effizient und zuverlässig ist.
2.4.3 Routing in CDNs
Die Weiterleitung von Inhalten ist ein wichtiger Aspekt von Content Delivery Networks (CDNs), der bestimmt, wie Benutzeranfragen nach Inhalten an die entsprechenden Edge-Server für eine effiziente Bereitstellung weitergeleitet werden. Content-Routing-Algorithmen helfen bei der Optimierung der Auswahl des am besten geeigneten Edge-Servers auf der Grundlage von Faktoren wie Nähe, Netzwerkbedingungen, Serverauslastung und Verfügbarkeit.
Load-Balancing: CDNs verteilen die Last auf mehrere Edge-Server, um eine effiziente Ressourcennutzung zu gewährleisten. Der Routing-Algorithmus berücksichtigt die aktuelle Last und Verfügbarkeit der Edge-Server und leitet die Anfrage an einen Server mit geringerer Last und höherer Kapazität weiter. Echtzeit-
Zeit-Überwachung: CDNs überwachen kontinuierlich die Leistung und Verfügbarkeit von Edge-Servern. Wenn ein bestimmter Edge-Server Probleme hat oder nicht mehr verfügbar ist, kann der Routing-Algorithmus die Anfragen dynamisch an andere geeignete Server umleiten.
Anycast-Routing: CDNs verwenden häufig Anycast-Routing, eine Technik, die es mehreren Edge-Servern ermöglicht, dieselbe IP-Adresse zu nutzen. Anycast ermöglicht die Weiterleitung von Anfragen an den nächstgelegenen Edge-Server auf der Grundlage der Netzwerktopologie. Wenn ein Benutzer eine Anfrage stellt, wählt die Routing-Infrastruktur den nächstgelegenen Anycast-Node aus und stellt so sicher, dass die Anfrage an den in Bezug auf die Netzwerkentfernung nächstgelegenen Edge-Server geleitet wird.
2.4.4 Caching
In einem Content Delivery Network (CDN) werden Caching-Algorithmen verwendet, um zu bestimmen, welche Inhalte in den Edge-Servern zwischengespeichert werden sollen und wie der Cache verwaltet werden soll. Diese Algorithmen spielen eine entscheidende Rolle bei der Optimierung der Cache-Nutzung, der Sicherstellung der Verfügbarkeit von häufig abgerufenen Inhalten und der Verbesserung der Gesamtleistung des CDN. Im Folgenden werden einige gängige Caching-Algorithmen vorgestellt, die in CDNs verwendet werden:´. Cache ist eine grundlegende Komponente von Content Delivery Networks (CDNs). Im Zusammenhang mit CDNs bezieht sich Caching auf den Prozess der Speicherung von Kopien von Webinhalten auf den Edge-Servern des CDN-Netzwerks.
Nachstehend einige Caching Algorithmen:
Least Recently Used (LRU)
Least Frequently Used (LFU)
First-In-First-Out (FIFO)
Random Replacement
Adaptive Replacement Cache (ARC)
Greedy Dual-Size Frequency (GDSF)
Multi-Level Caching
3. Grundlagen von Docker
Docker ist eine zentrale Plattform für das Verpacken, Bereitstellen und Ausführen von Anwendungenund bedients sich des Containering. Containervirtualisierung bzw Containeringist eine Methode, um mehrere Instanzen eines Betriebssystems als Host isoliert voneinander den Kernel des Hostbetriebssystem nutzen zu lassen. Die Idee von Docker ist es, dass Entwickler auf einfache Weise Anwendungen entwickeln und die auf Container packen können, welche dann überall eingesetzt werden können. Die Container stellen sicher, dass unsere Anwendung in jeder Umgebung wie Entwicklung, Test oder Produktion funktioniert Docker ermöglicht es , Software einfach zu installieren und auszuführen, ohne sich um die Einrichtung oder Abhängigkeiten zu kümmern. Docker ist ein Dienst zur Verwaltung von Containern. Die Docker Container sind nicht für die Ausführung von typischen Client-Anwendungen wie Excel oder Word gedacht. In Dockercontainern laufen nur Server-Applikationen, welche über interfaces mit Protokollen interagieren/kommunizieren.[25] Dabei können Anwendungen mit verschiedenen Programmiersprachen, wie Java, PHP. Perl, Ruby, Python, Scala, etc. erstellen und ausführen (siehe das Beispiel unter 3.1.7.2).
Anmerkung: Da Webserver zu 75-80 auf Linux/Unix-Derivaten laufen[4], basieren ggf. darauf nachstehende Beispiele
Die offizielle Website für Docker ist https://www.docker.com/. Die Website enthält alle Informationen und Dokumente über die Docker-Software und auch die Download-Links für verschiedene Betriebssysteme.
ABGRENZUNG zu einer VM siehe Kapitel Docker Container in . 3.1.4.2
'
3.1 Die Architektur
Docker folgt der Client-Server-Architektur. Die Archıtektur besteht aus drei Teilen. [26]
- 1) Clıent: Docker stellt dem Client Command Lıne Interface (CLI) Tools zur Verfügung, um mit dem Docker-Daemon zu interagieren. Clıent kann Anwendungen erstellen, ausführen und stoppen. Clıent kann auch aus der Ferne mit dem Dockerhost interagieren.
- 2) Host: Er enthält Contaıner, Images und Docker-Daemon. Er bietet eine vollständige Umgebung für die Ausführung und den Betrieb Ihrer Anwendung.
- 3) Regıstry: Es ist ein globales Reposıtory von Images.
Der Docker-Client kommuniziert mit dem Docker-Daemon, der das Erstellen, Ausführen und Verteilen der Docker-Container übernimmt. Der Docker-Client und -Daemon können auf demgeichen System ausgeführt werden.Der Docker-Client und -Daemon kommunizieren über eine REST-API, über UNIX-Sockets oder eine Netzwerkschnittstelle. Ein weiterer Docker-Client ist Docker Compose, mit demmit Anwendungen gearbeitet werden können, die aus einer Folge von Containern bestehen.
[27]=== 3.1.1 Der Docker-Daemon ===
3.1.2 Der Docker-Client
3.1.3 Docker-Registry
=
3.1.4 Docker-Objekte
===
==
3.1.4.1 Docker-Image
====
Image-Registrierung
Docker-Images können entweder in öffentlichen oder privaten Registern gespeichert werden, z. B. Azure Container Registry (ACR), Google Container Registry (GCR), Amazon Elastic Container Registry (ECR) und Docker Hub.
Tagging
Ein Repository-Name und ein Tag bilden zusammen eine eindeutige Identifikation für Docker-Images. Tags werden verwendet, um zwischen verschiedenen Image-Versionen zu unterscheiden. Wenn kein Tag angegeben wird, verwendet Docker standardmäßig das neueste“ Tag.
Image Pulling und Pushing
Der Befehl docker pull wird verwendet um Docker-Images von der Registry auf ein lokales System herunterzuladen --> docker push , um Images von einem lokalen Rechner zu einer Registry zu pushen.
Layer-Caching
Zur Leistungsoptimierung verwendet Docker beim Erstellen von Images das Layer-Caching.==
3.1.4.2 Docker Container
====
Ein Container ist eine ausführbare Instanz eines Images. Container können mithilfe der Docker-API oder CLI erstellt, gestartet, gestoppt, verschoben oder gelöscht werden. Er kann sich mit einem oder mehreren Netzwerken verbinden, Speicher an ihn anhängen oder sogar basierend auf dem aktuellen Status ein neues Image erstellen.Standardmäßig ist ein Container relativ gut von anderen Containern und seinem Hostcomputer isoliert und können steuern, wie isoliert das Netzwerk, der Speicher oder andere zugrunde liegende Subsysteme eines Containers von anderen Containern oder vom Hostcomputer sind. Ein Container wird durch sein Image sowie alle Konfigurationsoptionen definiert, die ihm beim Erstellen oder Starten zur Verfügung gestellt/angegeben werden. Wenn ein Container entfernt wird, entschwinden alle Änderungen an seinem Status, die nicht im permanenten Speicher gespeichert sind.
Vorteile von Container: [35]
-- Container nutzen im Vergleich zu virtuellen Maschinen deutlich weniger Systemressourcen, da sie ohne vollständiges Betriebssystem auskommen.
-- Dank der Containerisierung lassen sich Anwendungen mühelos über verschiedeneBetriebssysteme und Hardwareumgebungen hinweg einsetzen.
-- Durch den Einsatz von Containern lassen sich Anwendungen schneller ausrollen,aktualisieren und skalieren.
-- Sie beschleunigen auch den Entwicklungsprozess, und durch die Portabilitätder Images können sie auf jedem Entwicklerrechner ausgeführt werden.
3.1.4.3 Docker-Container Ausführung
Backgroundcontainer - Dafür sind insbesonders Webserver und DB-Server geeignet, da diese über einen "Dauerloop" verfügen. Der vorteil ist, dass ein Programm im Container nich automatisch beendet wird, da socnst auch der Container gestoppt wird Interactivecontainer - Dieser eignet sich zum Testen, da man sich interactiv über das z.B. CLI mit einer Anwendung im Container verbinden kann.
Taskcontainer - Dieser enthält den Code mit sämtlichen Abhängigkeiten, der gekapselt ist und dazu verwendet wird, diesen code auszuführen, In lartext z.B. ein Shellscript befindet, mit ggf. vielen Paketabhängihkeiten, der eine Umgebung aufbaut. Nach der Ausführung wird dieser Container wieder beendet. Der Vorteil dieses Conainer ist, dass er sich gut zur Automatisierung eignet.3.1.5 Docker-Desktop
- Docker Desktop umfasst:
- Docker-Daemon ( dockerd),
- den Docker-Client ( docker),
- Docker Compose,
- Docker Content Trust,
- Kubernetes,
- Credential Helper.
3.1.6 Docker-Netzwerk
Zum Verinden richtet Docker standardmäig drei Neetzwerke ein:
BRIDGE --> es wirch auch manchmal als docker 0 bezeichnet. Darin wird jeder Container, falls nicht anders definiert, eingehängt.
HOST --> ist der Host selbst, er wird direkt an die IP-Adresse gebunden
NONE --> ist eigentlich keine Netzwerkverbindung 3.1.7 Docker-File
Docker kann Images automatisch erstellen, indem es die Anweisungen aus einem Dockerfile liest.3.1.7.1 Docker-File Referenz
Diese gibt einen Überblick über die Befehle und Anweisungen [30]
3.1.7.1 Docker-File Referenz
Diese gibt einen Überblick über die Befehle und Anweisungen [30]$count++;
}3) In diesem das Docker-File erstellen mit dem Namen dockerfile
COPY . /var/www/html/shop/public_html/
CMD [ "php", "./index.php"]

Einfache Scripte können auch ohne ein Dockerfile ausgeführt werden docker run -it --rm --name dummy_php_demo -v "$PWD":/var/www/html/shop/public_html -w /var/www/html/shop/public_html php:8.2-cli php index.php
Anmerkung: der Parameter --rm löscht den Container wieder3.1.8 Docker-Hub
Docker Hub ist ein cloudbasierter Repository-Dienst, der von Docker angeboten wird und eine Fülle von Funktionen bietet[31]:
- Centralized Repository − Es ermöglicht die Suche, den Zugriff und die gemeinsame Nutzung von containerisierten Anwendungen und Diensten.
- Vast Library of Images − Es bietet Zugriff auf eine riesige Bibliothek von vorgefertigten Docker-Images. Dazu gehören beliebte Webserver, Datenbanken, Programmiersprachen und Frameworks sowie andere Software und Dienste.
- Open Collaboration − Es fördert eine Umgebung der offenen Zusammenarbeit. Es ermöglicht Entwicklern, ihre eigenen Docker-Images mit der Community zu teilen.
- Automation Tools − Es bietet Tools für die Automatisierung von Build, Test und Bereitstellung von Docker-Images, u.a. Funktionen wie die Integration mit CI/CD-Pipelines für reibungslose kontinuierliche Integrations- und Bereitstellungsabläufe. Darüber hinaus bietet es Unterstützung für automatisierte Builds, die automatisch gestartet werden, sobald Änderungen an einem Repository vorgenommen werden.
- Versioning & Tagging − Es ermöglicht die Versionierung und das Tagging von Docker-Images. Dies vereinfacht die Verwaltung und Verfolgung der verschiedenen Iterationen eines Dienstes oder einer Anwendung im Laufe der Zeit. Dies macht es einfacher, bei Bedarf auf frühere Versionen zurückzugreifen, und garantiert Konsistenz und Reproduzierbarkeit in verschiedenen Umgebungen.
- Access Control & Permissions − verfügt über einige leistungsstarke Funktionen zur Verwaltung von Zugriffskontrolle und Berechtigungen. Damit kann man regeln, wer Docker-Images anzeigen, bearbeiten und freigeben darf. Dies ist vor allem für Teams von Vorteil, die an vertraulichen oder proprietären Anwendungen arbeiten, da so die Sicherheit und Integrität von containerisierten Bereitstellungen gewährleistet werden kann.
- Scalability & Performance − Dieser Cloud-basierter Dienst, ermöglicht eine leistungsstarke Infrastruktur und Skalierbarkeit für das Hosting und die Verteilung von Docker-Images.
Integration - Docker Ecosystem − Es bietet eine einheitliche Plattform für die Entwicklung, den Start und die Überwachung von containerisierten Anwendungen von der Entwicklung bis zur Produktion. Dies geschieht durch die nahtlose Integration in das größere Docker-Ökosystem, das Docker Engine, Docker Compose und Docker Swarm umfasst.
3.1.9 Docker-Compose
In Docker Compose stellt einige grundlegende Konzepte vor. Dazu gehören die Architektur einer in YAML geschriebenen Docker Compose-Datei, Dienste, Netzwerke, Volumes und Umgebungsvariablen. Es ist ein Werkzeug, um die Dienste unserer Anwendung zu konfigurieren. und für die Entwicklung, den Test und die Inszenierung von Umgebungen. Es stellt die folgenden Befehle für die Verwaltung des gesamten Lebenszyklus unserer Anwendung zur Verfügung:
- Starten, Stoppen und Wiederherstellen von Diensten
Anzeige des Status laufender Dienste
Streamen der Protokollausgabe von laufenden Diensten
Ausführen eines einmaligen Befehls auf einem Dienst
- Starten, Stoppen und Wiederherstellen von Diensten
Anmerkung: Hinsichtlich eines konstrktivistischen Ansatzes, gibt es im Web gibt es Anleitungen dazu. So z.B. Ubuntu 22.04 u. Docker --> https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
4. Kubernetes
Kubernetes oder kurz k8s, wurde von Google-Ingenieuren auf der Grundlage der Erfahrungen entwickelt, diese beim jahrelangen Betrieb von Containern in großem Maßstab gesammelt haben. Es wurde der Community als Open-Source-Projekt zur Verfügung gestellt und ist heute die Standardplattform für die Bereitstellung und Verwaltung von Cloud-nativen Anwendungen. Es läuft in jeder Cloud und in jedem Rechenzentrum vor Ort und abstrahiert die zugrunde liegende Infrastruktur. Dies ermöglicht den Aufbau hybrider Clouds sowie die Migration in, aus und zwischen verschiedenen Clouds. Es steht unter der Apache 2.0-Lizenz als Open Source zur Verfügung und wird von der Cloud Native Computing Foundation (CNCF) betrieben und verwaltet. Kubernetes ist ein Orchestrator für containerisierte, cloud-native Microservices-Anwendungen. Ein Orchestrator ist ein System oder eine Plattform, die Anwendungen bereitstellt und dynamisch auf Änderungen reagiert. Um eine Microservices-Anwendung zu erstellen, muss jede Funktion als eigene kleine Anwendung entworfen, entwickelt, bereitstellt und verwaltet werden. Diese kleinen Anwendungen werden als Microservice bezeichnet.[28]. Es begann als einfaches Container-Orchestrierungstool, hatsich aber zu einer Cloud-nativen Plattform entwickelt.
Kubernetes ist der "key enabler" für:
Hybride Cloud
Multi-Cloud
Cloud-Migrationen
Kubernetes ist sowohl Cluster, als auch Orchestrator. Bei beiden Typen kann es sich um physische Server, virtuelle Maschinen oder Cloud-Instanzen handeln, und beide können auf ARM und AMD64/x86-64 laufen. Control-Plane-Knoten müssen Linux sein, Worker-Knoten können jedoch Linux oder Windows sein.
4.1 Kubernetes und Docker
Alle frühen Versionen von Kubernetes wurden mit Docker ausgeliefert und verwendeten es als Laufzeitumgebung. Das Kubernetes-Projekt hat die Container-Laufzeitschnittstelle (CRI) entwickelt, um die Laufzeitschicht anpassbar zu machen. Mit Kubernetes 1.24 wurde die Unterstützung für Docker als Laufzeitumgebung endgültig abgeschafft, da sie aufgebläht und für die Anforderungen von Kubernetes zu umfangreich war. Seitdem werden die meisten neuen Kubernetes-Cluster mit containerd (ausgesprochen "container dee") als Standard-Laufzeitumgebung ausgeliefert. Glücklicherweise handelt es sich bei containerd um eine abgespeckte Version von Docker, die für Kubernetes optimiert wurde und von Docker containerisierte Anwendungen vollständig unterstützt. Tatsächlich arbeiten Docker, containerd und Kubernetes alle mit Images und Containern, die die Standards der Open Container Initiative (OCI) implementieren.Ubuntu ist die Referenzplattform für Kubernetes in allen wichtigen öffentlichen Clouds.
4.2 Kubernetes ein OS ?
Kubernetes ist die De-facto-Plattform für Cloud-native Anwendungen, und es wird manchmal "das Betriebssystem der Cloud" genannt. Das liegt daran, dass Kubernetes die Unterschiede zwischen Cloud-Plattformen auf die gleiche Weise abstrahiert, wie Betriebssysteme wie Linux und Windows die Unterschiede zwischen Servern abstrahieren:
- -- Linux und Windows abstrahieren Serverressourcen und planen Anwendungsprozesse
- -- Kubernetes abstrahiert Cloud-Ressourcen und plant Anwendungs-Microservices.
4.2 Kubernetes - allgemeine Fuktionen
Die Bereitstellung von Kubernetes umfasst Cluster , die Bausteine der Kubernetes-Architektur. Cluster bestehen aus Knoten, von denen jeder einen einzelnen Compute-Host darstellt, entweder eine physische Maschine (Bare-Metal-Server) oder eine VM.
Kubernetes plant und automatisiert containerbezogene Aufgaben während des gesamten Anwendungslebenszyklus:Einsatz -- eine bestimmte Anzahl von Containern auf einem bestimmten Host wird bereitgestellt .
Rollouts -- eine Änderung an einer Bereitstellung und/oder initiieren, anhalten, fortsetzen oder rückgängig machen dieser
Diensterkennung -- einen Container automatisch dem Internet oder anderen Containern zugänglich machen, indem es einen DNS- Namen oder eine IP verwendet
Memoryverwaltung -- damit bei Bedarf dauerhafter lokaler oder Cloud-Speicher für Ihre Container bereitgestellt wird.
Loadbalanceing -- basierend auf der CPU-Auslastung oder benutzerdefinierten Metriken
Speicherbereitstellung -- damit bei Bedarf dauerhafter lokaler oder Cloud-Speicher für Ihre Container bereitgestellt wird.
Automatische Skalierung -- bei Verkehrsspitzen kann die automatische Skalierung nach Bedarf neue Cluster hochfahren, um die zusätzliche Arbeitslast zu bewältigen.
Selbstheilung für hohe Verfügbarkeit -- wenn ein Container ausfällt, kann dieser neu gestartetn oder ersetzt werden, um Ausfallzeiten zu vermeiden. Container werden heruntergefahren, welche die Integritätsprüfungsanforderungen nicht erfüllen.
4.3 Kubernetes - Technologien
Nachstehend einige Technologien von Kubernetes:
- Control-Plane-Knoten und Worker-Knoten
Paketierung von Anwendungen
Das deklarative Modell und der gewünschte Zustand
Pods
Deployments Dienste
4.3.2. Kubernetes - Control Plane
Die Steuerebene ist eine Sammlung von Systemdiensten, die das Herzstück von Kubernetes bilden. Sie stellt die API bereit, plant Aufgaben, implementiert die Selbstheilung, verwaltet Skalierungsvorgänge und vieles mehr. Bei den einfachsten Konfigurationen wird nur ein einziger Control-Plane-Knoten ausgeführt, der sich am besten für Labore und Tests eignet. Wie bereits erwähnt, sollten jedoch in Produktionsumgebungen drei oder besser fünf Control-Plane-Knoten betreiben und diese für eine hohe Verfügbarkeit über Verfügbarkeitszonen verteilen,
Datei:21Kubernetes controlplane.jpg [28]
Obige Abbildung zeigt eine generische Kubernetes-Architektur mit einer Steuerungsebene auf der linken Seite, die aus API-Modul, Cloud-Controller-Modul, Controller-Manager und dem Scheduler besteht. Die Steuerebene bietet die globalen Operationen für die Kubernetes-Architektur, wie Scheduling, Skalierung und Steuerung von Pods. Auf der rechten Seite befinden sich drei Worker-Nodes, die aus einem Kubelet 3 und einem Proxy-Modul bestehen. Diese stellen den Pods, die die containerisierte Anwendung enthalten, Funktionen und Netzwerkfähigkeiten zur Verfügung. Ein Worker Node kann mehrere Pods gleichzeitig verwalten. Ein Pod kann mehrere Container beherbergen.
[28]
4.3.2.1 Kubernetes - API Server
4.3.3. Kubernetes - Cluster Store
- Abrufen von Container-Images
- Verwalten von Lebenszyklusoperationen(Starten und Stoppen von Containern)
=
4.3.7. Kubernetes - Applikationen ===
Kubernetes führt Container und VMs, aus. Allerdings müssen die alle in Pods verpackt werden, Sobald die in einem Pod verpackt sind, übergeben diese die Anwendung an Kubernetes, und Kubernetes führt sie aus. Dazu gehört auch die komplexe Logistik der Auswahl geeigneter Knoten, das Verbinden von Netzwerken, das Anhängen von Volumes und vieles mehr. Man kann sogar Anwendungen abfragen und Änderungen vornehmen. Das Vorgehensmodell ist an sich trivial
- 1.eine Anwendung in einer bevorzugten Sprache schreiben
- 2."containerisieren"
- 3. bergebenan eine Registry
- 4. verpacken in einen Pod (meist ein Controller-Objekt wie z. B. ein Deployment)
- 5. an Kubernetes übergeben
4.3.8. Kubernetes - Config Maps
- 1.eine Anwendung in einer bevorzugten Sprache schreiben
- 2."containerisieren"
- 3. bergebenan eine Registry
- 4. verpacken in einen Pod (meist ein Controller-Objekt wie z. B. ein Deployment)
- 5. an Kubernetes übergeben

=
4.3.9. Kubernetes - Pod ===
**) wird oft für Monitoring und/oder Logging verwendet
Dieser Pod verfügt über zwei Container sowie 2 Volumes und einen Pause.
4.3.9.1 Pod - Ablauf
Der Pod startet zuerst den Pause-Container und initialisiert die IP sowie den Namespace und die cgroups und hält diese, bis der Pod terminiert wird. Jeder weitere Container innerhalb des Pods kann sich auf die initialisierten Ressourcen verlassen und den über die IP eingehenden Traffic erhalten.
Der Vorteil des Pause Container ist, dass selbst wenn die Anwendungscontainer neu gestartet werdendie Ip weiterhin bestehen bleibt. Der Pause-Container bleibt hidden und wird am CLI nicht angezeigt. Dieser läuft jedoch auf dem Node, und ist aber über die Container Runtime zu sehen. Auch die Volumes können von beiden Containern verwendet werden. Sie greifen ggf. gleichzeitig darauf zu um z.B. einen Datenaustausch vorzunehmen. Davei ist es wichtigm dass es zu keinen Konflikten kommt, denn diese werden von Kubernetes nicht verhindert oder überwacht.TIPPzur Implementierung : ein Container für r/w und er Andere ist read-only. Da Kubernetes nur das Pod-Objekt managt, werden natürlich alle Container innerhalb eines Pods auf dem gleichen Node gestartet. Nur so können die Container innerhalb eines Pods auch die Ressourcen wie Netzwerk und Storage miteinander teilen.
4.3.10 Kubernetes Deployment
Wenn Kubernetes mit Pods arbeitet, werden diese fast immer über übergeordnete Controller wie Deployments, StatefulSets(für die Verwaltung von zustandsbehafteten Anwendungen) und DaemonSets(um einen Pod auf jedem Node im Cluster auszuführen). bereitgestellt. Diese laufen alle auf der Steuerungsebene und arbeiten als Hintergrundüberwachungsschleifen, die den beobachteten Zustand mit dem gewünschten Zustand abgleichen. Deployments fügen zustandslosen Anwendungen Selbstheilung, Skalierung, rollende Updates und versionierte Rollbacks hinzu. Das Deployment ist dabei das oberste Objekt, verwaltet ein ReplicaSet und beauftragt das ReplicaSet damit, die Pods zu verwalten und zu überwachen.
Das Deployment: [35]
- verwaltet den Lebenszyklus von Pods und ReplicaSets.
- ReplicaSets erstellen, überwachen und aufräumen.
- eine neue Version von Pods ausrollen, indem es ein neues ReplicaSet erzeugt.
- ermöglicht kontrollierte Aktualisierungen durch Rolling Updates.
- ermöglicht Rollbacks zu früheren Versionen.
Das ReplicaSet **)
- stellt sicher, dass die spezifizierte Anzahl von Pods läuft.
- überwacht die Pods und tauscht fehlerhafte aus.
Beide Objekte kontrollieren immer den aktuellen Zustand im Hinblick auf den gewünschten Zustand. Ist etwas nicht so wie gewünscht, dann versuchen die Objekte, den Zustand wiederherzustellen.
**) ist ein Schlüsselobjekt für die Stabilität
Ein ReplicaSet gewährleistet, dass immer eine bestimmte Anzahl von Pods im Containerslaufen.Anmerkung: Kubernetes empfiehlt, das ReplicaSet nie ohne Deployment zu verwenden, da die zusätzlichen Funktionen das Betreiben einer Anwendung wesentlich vereinfacht.[36]
5 Anwendungsbeispiel
Die Hardwareanforderungen eines »echten« Kubernetes-Clusters bemessen sich natürlich an der Anzahl der Container, jedoch kann dies z.B. mit Einplatinencomputer, wie dem z.B. Raspberry Pi, Zum Testen realisiert werden. Dazu reichen zwei Stück Raspberry Pi 4, 4 GB Memory.
Eine Anleitung hinsichtlich Ubuntu und Raspberry Pi liefert z.B. dieser Link --> https://ubuntu.com/tutorials/how-to-kubernetes-cluster-on-raspberry-pi#1-overview
Eine leichtgewichtige Kubernetes Variante liefert dieser Link --> https://docs.k3s.io/ Der setzt aber wesentlich mehr an Vorwissen voraus