RSS-Kubernetes-Blog Notiz

RSS-Kubernetes-Blog

Die offizielle Homepage von Kubernetes, einem Container-Orchestrierungssystem für die Automatisierung der Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen. Diese Plattform bietet umfassende Dokumentation zu Kubernetes, ein von der Cloud Native Computing Foundation gepflegtes Projekt. Es enthält Details zum Ausführen von stateless und stateful Anwendungen, Batch-Jobs und CI/CD-Arbeitsabläufen mit Kubernetes. Die Webseite enthält detaillierte Anleitungen, Tutorials, Referenzmaterial, API-Dokumentation und Initiativen für die Community-Engagement, um Benutzer bei der Arbeit mit Kubernetes zu unterstützen und die Funktionsweise effektiv zu nutzen, um cloudbasierte Anwendungen effizient zu verwalten.

Notizfaden

CdXz5zHNQW_c7B4Nv7Eh7.png
Eine neue Alpha-Funktion in Kubernetes erweitert das Storage-Ökosystem um Changed Block Tracking. Dieser Mechanismus ermöglicht es CSI-Storage-Treibern, geänderte Blöcke innerhalb von PersistentVolume-Snapshots effizient zu identifizieren. Durch die Verfolgung von Änderungen auf Blockebene werden Backup-Operationen deutlich schneller und ressourcenschonender. Anstatt ganze Volumes zu scannen, können Backups nun ausschließlich auf die veränderten Daten fokussiert werden. Diese Verbesserung ist in die Container Storage Interface (CSI) und die Kubernetes-Storage-Unterstützung integriert. Die Funktion ist derzeit auf Block-Volumes beschränkt und unterstützt keine File-Volumes. Traditionelle Backup-Methoden kämpfen mit langen Backup-Fenstern, hoher Ressourcenauslastung und erhöhten Speicherkosten aufgrund redundanter Daten. Die Changed Block Tracking API bietet native Kubernetes-Unterstützung für inkrementelle Backups über die CSI-Schnittstelle. Zu den Schlüsselkomponenten gehören die CSI SnapshotMetadata Service API, eine Kubernetes CustomResourceDefinition und ein External Snapshot Metadata Sidecar. Storage-Anbieter müssen spezifische CSI-RPCs implementieren und über Backend-Fähigkeiten zur Verfolgung von Blockänderungen verfügen. Backup-Lösungen müssen die Authentifizierung handhaben, Streaming-Client-Code implementieren und ihre Workflows optimieren, um diese neuen Metadaten zu nutzen. Um die Funktion zu nutzen, stellen Sie sicher, dass Ihr CSI-Treiber Snapshots und Metadaten-Fähigkeiten unterstützt und dass die SnapshotMetadataService Custom Resource registriert ist. Die API bietet die Funktionen GetMetadataAllocated und GetMetadataDelta zur Identifizierung von Blöcken. Zukünftige Pläne beinhalten die Überführung dieser Implementierung in die Beta-Phase basierend auf Feedback und Akzeptanz.
Kubernetes v1.34 führt eine wesentliche Verbesserung ein: die automatische Wiederherstellung nach fehlgeschlagener Volumenerweiterung. Zuvor erforderte die Korrektur von Erweiterungsfehlern, wie z. B. die Angabe einer falschen Speichergröße, manuelles Eingreifen und Cluster-Admin-Rechte. Diese neue Funktion ermöglicht es Benutzern, die angeforderte PVC-Größe zu reduzieren, wenn bei der Erweiterung ein Fehler gemacht wurde, solange die Erweiterung noch nicht abgeschlossen ist. Kubernetes korrigiert dann automatisch die Größe, gibt alle verbrauchten Quoten zurück und ändert die Größe des PersistentVolume. Ein Beispiel veranschaulicht, wie ein Benutzer einen Tippfehler in der Speicheranforderung korrigieren kann. Die korrigierte Größe muss immer noch größer sein als die ursprüngliche Volume-Größe, da das Verkleinern von Volumes nicht unterstützt wird. Die Implementierung umfasste eine komplette Überarbeitung der Volumenerweiterung und die Einführung neuer API-Felder zur Überwachung des Fortschritts der Erweiterung. Verbesserte Fehlerbehandlung und -berichterstattung sind jetzt vorhanden, wobei Fehler als PVC-Bedingungen bestehen bleiben und fehlgeschlagene Erweiterungen mit einer langsameren Rate wiederholt werden. Diese Funktion behebt auch langjährige Fehler im Größenänderungs-Workflow. Benutzer werden gebeten, alle aufgetretenen Probleme zu melden. Die Entwicklung dieser Funktion profitierte von dem Feedback und den Beiträgen verschiedener Personen und der Kubernetes-Community.
Dynamische Ressourcenallokation (DRA) in Kubernetes verwaltet knappe Ressourcen wie Geräte für Pods und geht über die einfache Gerätezuweisung hinaus. DRA ermöglicht Anfragen nach bestimmten Geräten mit benutzerdefinierten Konfigurationen, einschließlich der gemeinsamen Nutzung von Ressourcen. Dieser Blog beschreibt die neue Funktion der verbrauchbaren Kapazität von DRA in Kubernetes 1.34, die für eine feinere Gerätefreigabe entscheidend ist. Die verbrauchbare Kapazität ermöglicht die gemeinsame Nutzung eines Geräts über mehrere ResourceClaims oder DeviceRequests hinweg, auch über Namespaces hinweg. Der Scheduler unterstützt jetzt die Zuweisung von Teilen der Geräteressourcen und verwaltet die Gesamtkapazität. Eine neue DistinctAttribute-Einschränkung verhindert, dass ein einzelnes Gerät innerhalb desselben Claims mehrfach zugewiesen wird. Diese Funktion erfordert die Aktivierung des DRAConsumableCapacity-Feature-Gates in verschiedenen Kubernetes-Komponenten. Entwickler können mehrere Zuweisungen zulassen, indem sie AllowMultipleAllocations festlegen, und können Richtlinien für Gerätekapazitätsanforderungen definieren. Benutzer können Geräteteile über ResourceClaims anfordern, und der Gerätestatus kann dynamische Informationen wie IP-Adressen enthalten. Diese Erweiterung unterstützt bandbreitenbewusstes Networking und die gemeinsame Nutzung von Geräten durch mehrere Mandanten und verbessert die Planung und Ressourcenkontrolle. Der Blog ermutigt zu Experimenten und Feedback, um DRA weiter zu verfeinern.
Die Konfiguration des cgroup-Treibers war für Kubernetes-Benutzer historisch gesehen ein komplexes Problem. Linux-Systeme verwenden zwei cgroup-Treiber: cgroupfs und systemd. Zuvor mussten sowohl der Kubelet als auch die CRI-Implementierung, wie z. B. containerd oder CRI-O, identisch konfiguriert werden, um Kubelet-Fehlfunktionen ohne klare Fehlermeldungen zu vermeiden. Dies führte oft zu erheblicher Frustration bei Cluster-Administratoren.In Kubernetes v1.28.0 wurde das Feature-Gate KubeletCgroupDriverFromCRI eingeführt. Dies ermöglicht es dem Kubelet, die CRI-Implementierung nach ihrem bevorzugten cgroup-Treiber abzufragen. Nach mehreren Release-Zyklen hat dieses Feature nun in Kubernetes 1.34.0 den General Availability (GA)-Status erreicht. Um dies zu nutzen, müssen Administratoren sicherstellen, dass ihre CRI-Implementierung ausreichend aktualisiert ist.Containerd benötigt Version v2.0.0 oder höher, während CRI-O Version v1.28.0 oder höher benötigt. Kubernetes stellt die Unterstützung für containerd v1.y-Versionen ein. Während sich CRI-O-Releases an den Kubernetes-Versionen orientieren, hat containerd seinen eigenen Release-Zyklus, wobei die Feature-Unterstützung nur in v2.0 und höher vorhanden ist. Kubernetes 1.34 unterstützt weiterhin ältere containerd LTS-Releases wie v1.7.Die Kubernetes SIG Node Community hat einen Zeitplan für die schrittweise Einstellung der Unterstützung für containerd v1.y festgelegt. Die letzte Kubernetes-Version, die diese Unterstützung enthalten wird, ist die finale Version von v1.35, wobei die Unterstützung in v1.36.0 endet. Um diesen Übergang zu erleichtern, kann eine Metrik namens kubelet_cri_losing_support überwacht werden. Wenn diese Metrik eine containerd-Version von 1.36.0 anzeigt, signalisiert dies, dass die containerd-Laufzeitumgebung für zukünftige Anforderungen veraltet ist. Administratoren müssen containerd auf v2.0 oder eine neuere Version aktualisieren, bevor oder gleichzeitig mit dem Upgrade des Kubelet auf v1.36.0.
Die Fähigkeit von CSI-Treibern, die Anzahl der an Knoten anhängbaren Volumes zu aktualisieren, wurde in Kubernetes v1.34 von Alpha auf Beta hochgestuft. Dieses Feature zielt darauf ab, die Genauigkeit der Planung von zustandsbehafteten Pods zu verbessern. Zuvor meldeten CSI-Treiber statische Volume-Limits, die veraltet sein konnten. Gründe für veraltete Informationen sind externe Volume-Operationen, der Hardwareverbrauch von Slots und Interaktionen zwischen mehreren Treibern. Diese Ungenauigkeit konnte dazu führen, dass Pods nicht gestartet werden konnten und im Zustand ContainerCreating stecken blieben. Die neue Funktionalität ermöglicht es CSI-Treibern, die Kapazitäten für die Knotenanhängung zur Laufzeit dynamisch zu melden. Kubernetes unterstützt nun zwei Update-Mechanismen: periodische Aktualisierungen und sofortige Aktualisierungen bei Fehlern beim Anhängen. Um dieses Beta-Feature zu aktivieren, muss das MutableCSINodeAllocatableCount-Feature-Gate auf kube-apiserver und kubelet aktiviert werden. CSI-Treiber können mit nodeAllocatableUpdatePeriodSeconds für periodische Aktualisierungen konfiguriert werden, wobei ein Mindestintervall erzwungen wird. Sofortige Aktualisierungen werden durch ResourceExhausted-Fehler während des Anhängens von Volumes ausgelöst, wodurch Pods vor permanenten Fehlern geschützt werden. Benutzer werden ermutigt, dieses Feature in v1.34 zu aktivieren und zu testen und Feedback für seine Weiterentwicklung zur allgemeinen Verfügbarkeit zu geben.
Kubernetes verwendet traditionell ConfigMaps und Secrets für Umgebungsvariablen, was Komplexität und zusätzliche API-Aufrufe verursacht. Die separate Verwaltung von Pods und ihren Konfigurationen, insbesondere bei Updates, kann eine Herausforderung darstellen. Dies gilt insbesondere für Vendor-Container, die Umgebungsvariablen benötigen, ohne diese hart zu codieren oder Volume-Mounts zu verwenden.Ein neues Alpha-Feature namens EnvFiles bietet eine alternative Lösung für diese Szenarien. Wenn das EnvFiles-Feature-Gate aktiviert ist, kann das Kubelet Umgebungsvariablen für einen Container direkt aus einer Datei innerhalb eines emptyDir-Volumes laden. Dies eliminiert die Notwendigkeit, die Datei in den Container selbst zu mounten. Die Kernfunktionalität ermöglicht es Kubernetes, eine Datei zu parsen, die oft von einem Init-Container generiert wird, und beim Start Umgebungsvariablen für den Hauptcontainer festzulegen.Die Datei befindet sich in einem emptyDir-Volume, einem temporären Speicher, der für die Lebensdauer des Pods gilt. Der Hauptcontainer muss dieses Volume nicht mounten; das Kubelet übernimmt das Lesen der Datei und das Injizieren der Variablen. Die Definition dieser Variablen beinhaltet die Verwendung des fileKeyRef-Felds in der Pod-Spec, das den Dateipfad und den zu extrahierenden Schlüssel angibt.Das Dateiformat unterstützt eine KEY=VALUE-Syntax, und für diese Alpha-Phase muss es in ein emptyDir-Volume geschrieben werden. Ein Init-Container ist erforderlich, um die Datei in das emptyDir-Volume zu schreiben, aber der Hauptanwendungscontainer benötigt keinen Zugriff auf das Volume. Obwohl dieses Feature sensible Daten verarbeiten kann, ist es wichtig zu beachten, dass Knotenbetreiber mit Dateisystemzugriff diese Daten potenziell aus emptyDir-Volumes abrufen könnten. Daher sind robuste Cluster-Sicherheitsrichtlinien unerlässlich, um Knoten vor unbefugtem Zugriff zu schützen, wenn sensible Informationen gespeichert werden. Dieses EnvFiles-Feature vereinfacht die Erstellung von Anwendungen und ermöglicht neue Anwendungsfälle durch die Reduzierung komplexer Workarounds.
Kubernetes hat die Stabilität und Leistung des API-Servers erheblich verbessert, indem Probleme mit Listenanforderungen behoben wurden. Ein großer Fortschritt ist der Snapshottable-API-Server-Cache, der sich jetzt in v1.34 in der Beta-Phase befindet und es ermöglicht, die meisten Leseanforderungen direkt aus dem Speicher des API-Servers zu bedienen. Diese Funktion baut auf früheren Verbesserungen wie konsistenten Lesevorgängen aus dem Watch-Cache auf, der in v1.31 eingeführt wurde und es ermöglichte, gefilterte Sammlungen an etcd vorbeizuleiten. In v1.33 wurden Streaming-Encoder hinzugefügt, um große Antworten effizient zu verarbeiten, indem Elemente einzeln gesendet wurden, wodurch Speicher-Spitzen verhindert wurden. Der Snapshottable-Cache schließt die letzte Lücke, indem er historische LIST-Anforderungen, die häufig für die Paginierung verwendet werden, ebenfalls aus dem Cache bedienen kann. Dies geschieht durch die Erstellung von leichten, speichereffizienten Snapshots des Cache-Zustands für jedes Update. Wenn eine historische Anfrage eintrifft, ruft der API-Server den relevanten Snapshot ab und bedient die Daten direkt aus dem Speicher. Diese Synergie von Funktionen reduziert den Speicherbedarf des API-Servers und die Belastung von etcd drastisch. Folglich sind Kubernetes-Steuerungsebenen jetzt stabiler, skalierbarer und zuverlässiger. Die SnapshottableCache-Funktion ist in Kubernetes v1.34 standardmäßig aktiviert, sodass keine Benutzeraktion erforderlich ist, um von diesen Verbesserungen zu profitieren.
Kubernetes v1.34 fördert die Service-Konto-Token-Integration für Kubelet-Anmeldeinformationsanbieter auf Beta-Status. Diese Erweiterung ermöglicht es Anmeldeinformationsanbietern, werklastspezifische Service-Konto-Tokens für Registrierungsanmeldeinformationen zu verwenden und ersetzt damit langfristige Bildziehgeheimnisse. Die Beta-Version führt ein obligatorisches cacheType-Feld für Anmeldeinformationsanbieterkonfigurationen ein. Zwei Cachestrategien stehen zur Verfügung: Token für Anmeldeinformationen, die an die Token-Lebensdauer gebunden sind, und ServiceAccount für Anmeldeinformationen, die für alle Pods gültig sind, die dasselbe Service-Konto verwenden. Die Beta-Version bietet auch eine verbesserte Sicherheitsisolierung, die sicherstellt, dass Pods nur auf Bilder zugreifen können, die mit ihren autorisierten ServiceAccounts gezogen wurden. Dieses System verfolgt die ServiceAccount-Identität und überprüft sie, wenn ein Pod ein zwischengespeichertes Bild verwendet. Administratoren können den Bildzugriff widerrufen, indem sie ServiceAccounts löschen und neu erstellen. Die Funktion baut auf der Service-Konto-Node-Audience-Einschränkung für sichere Tokenanforderungen auf. Um die Beta-Funktion zu verwenden, stellen Sie sicher, dass Kubernetes v1.34 oder später verwendet wird und aktualisieren Sie die Anmeldeinformationsanbieter. Die Migration von Alpha erfordert das Hinzufügen des cacheType-Felds und die Überprüfung der Cachestrategien. Die Kubernetes-Community sucht nach Feedback zu dieser Funktion, insbesondere von Anmeldeinformationsanbieter-Implementierern. Weitere Entwicklungen und Feedback-Sammlungen sind für zukünftige Versionen geplant.
"Kubernetes v1.34 führt die Beta-Funktion "prefer-align-cpus-by-uncorecache" für die statische Richtlinie des CPU-Managers ein. Diese Option optimiert Workloads auf Prozessoren mit geteilten Uncore-Cache-Architekturen. Der Uncore-Cache, auch bekannt als Last-Level-Cache, wird über CPU-Kerne hinweg gemeinsam genutzt. Moderne Prozessoren verwenden geteilte Uncore-Caches, um die Latenz zu reduzieren, indem sie den Cache unter den CPU-Gruppierungen aufteilen. Die Funktion ermöglicht es Kubernetes, Container-CPU innerhalb desselben Uncore-Caches zu platzieren, wodurch die Latenz und der Wettbewerb minimiert werden. Diese cache-bewusste Platzierung verbessert die Durchsatzrate für empfindliche Anwendungen. Standardmäßig verwendet Kubernetes eine gepackte Methode, die zu Problemen mit "lauten Nachbarn" und Cross-Cache-Latenz führen kann. Durch die Aktivierung dieser Funktion werden Container auf einzelne Caches isoliert, wodurch der Wettbewerb gelöst wird. Anwendungsfälle umfassen Telco-Anwendungen wie vRAN, aber die Vorteile hängen von der Workload ab, insbesondere für an Memory-Bandbreite gebundene Anwendungen. Um diese Funktion zu aktivieren, muss die CPU-Manager-Richtlinie auf "statisch" gesetzt und CPUManagerPolicyBetaOptions aktiviert werden. Die Konfiguration beinhaltet die Änderung der Kubelet-Konfigurationsdatei, um die Richtlinie und Optionen festzulegen. Die Funktion funktioniert auf Prozessoren mit monolithischem Uncore-Cache, indem sie eine Socket-Ausrichtung emuliert."
CdXz5zHNQW_2op822IEU2.png
"Kubernetes 1.34 bringt bedeutende Verbesserungen bei der dynamischen Ressourcenallokation (DRA). Die Kernfunktionalität von DRA hat den Status der allgemeinen Verfügbarkeit (General Availability – GA) erreicht, was bedeutet, dass sie stabil und für die langfristige Nutzung bereit ist. DRA ermöglicht eine flexible Verwaltung spezialisierter Hardware wie GPUs, indem es Workloads erlaubt, Geräteanforderungen zu spezifizieren und dem Scheduler die Zuweisung tatsächlicher Geräte überlässt. Mit der GA-Freigabe ist DRA standardmäßig aktiviert, ebenso wie zuvor im Beta-Stadium befindliche Funktionen.Mehrere Features sind in die Beta-Phase übergegangen. Dazu gehört das "Admin Access Labeling", mit dem autorisierte Benutzer die missbräuchliche Nutzung bestimmter Gerätefunktionen einschränken können. "Prioritized Lists" erlauben Workloads, mehrere akzeptable Gerätealternativen anzugeben, um eine flexiblere Planung zu ermöglichen. Die Kubelet-API wurde aktualisiert, um DRA-zugewiesene Pod-Ressourcen zu melden, was die Knotenüberwachung verbessert.Neue Alpha-Features geben einen Einblick in die Zukunft von DRA. "Extended Resource Mapping" unterstützt die Werbung von DRA-verwalteten Ressourcen als erweiterte Ressourcen, was die Nutzung für bestehende Workloads vereinfacht. "Consumable Capacity" führt eine flexible Gerätefreigabe ein, die es mehreren, nicht miteinander verbundenen Pods erlaubt, ein einzelnes physisches Gerät basierend auf vom Administrator definierten Richtlinien gemeinsam zu nutzen. "Binding Conditions" verbessern die Zuverlässigkeit der Planung, indem sie die Pod-Bindung verzögern, bis externe Ressourcen als bereit bestätigt sind. Schließlich verbessert der "Resource Health Status" für DRA die Beobachtbarkeit, indem er den Gerätezustand über den Pod-Status preisgibt. Das Team plant, weitere Alpha- und Beta-Features in zukünftigen Releases auf GA zu bringen."
Die Benutzereinstellungen für Kubectl erreichen in Kubernetes v1.34 die Beta-Phase und bieten Anpassungsoptionen. Diese Funktionalität ermöglicht es Benutzern, benutzerdefinierte Einstellungen für Kubectl-Befehle zu definieren. Eine Datei für Benutzereinstellungen, typischerweise mit dem Namen kuberc, befindet sich im Standard-Kubeconfig-Verzeichnis, $HOME/.kube. Diese Datei verwendet eine apiVersion und kind Struktur, ähnlich wie Kubernetes-Manifeste. Der defaults Abschnitt ermöglicht das Festlegen von Standardwerten für Kubectl-Befehlsoptionen, wie z. B. die immer interaktive Löschung. Diese Standardwerte können überschrieben werden, indem beim Ausführen von Befehlen explizit andere Optionen angegeben werden. Ein weiterer empfohlener Standard ist die Aktivierung von Server-Side Apply für Kubectl apply Befehle. Der aliases Abschnitt ermöglicht es Benutzern, Abkürzungen für häufig verwendete Befehle zu erstellen, was Zeit und Mühe spart. Aliase können so definiert werden, dass sie spezifischen Kubectl-Befehlen mit vordefinierten Argumenten und Optionen zugeordnet werden. Der Mechanismus unterstützt sowohl das Voranstellen als auch das Anhängen von Argumenten an den zugrunde liegenden Kubectl-Befehl. Debugging-Informationen für diese Funktion können mit erhöhter Ausführlichkeit abgerufen werden, z. B. mit -v=5. Benutzerfeedback wird dringend gewünscht, während die Funktion weiterentwickelt wird, und Benutzer können sich über Slack, GitHub Issues oder Community-Meetings beteiligen.
Die Kubernetes v1.34-Veröffentlichung mit dem Motto "Of Wind & Will" (Von Wind und Wille) führt 58 Verbesserungen ein, von denen 23 in den stabilen Zustand übergehen. Dynamische Ressourcenallokation (DRA) für die Geräteverwaltung ist jetzt allgemein verfügbar und ermöglicht eine flexiblere Geräteauswahl und -konfiguration. Projizierte ServiceAccount-Tokens für kubelet Image-Credential-Provider bieten erhöhte Sicherheit durch die Verwendung kurzlebiger, arbeitslastspezifischer Tokens. Ein neues Ausgabeformat, KYAML, wird als Alpha-Funktion für kubectl eingeführt und zielt auf sichereres und eindeutigeres YAML für Kubernetes ab. Job-Controller verfügen nun über eine verzögerte Erstellung von Pods, um gleichzeitige Ausführung und Ressourcenkonflikte zu verhindern. Die Wiederherstellung von Fehlern bei der Volume-Erweiterung ist stabil und ermöglicht es Benutzern, Volume-Erweiterungen abzubrechen und erneut zu versuchen. VolumeAttributesClass ist ebenfalls stabil und bietet eine Kubernetes-native API zur Änderung von Volume-Parametern. Die strukturierte Authentifizierungskonfiguration ist nun stabil und verbessert die Verwaltbarkeit und Überprüfbarkeit der API-Server-Client-Authentifizierung. Eine feingranularere Autorisierung basierend auf Selektoren erhöht die Sicherheit und ermöglicht Regeln des geringsten Privilegs. Anonyme Anfragen können auf bestimmte Endpunkte beschränkt werden, was die Sicherheit verbessert, ohne externe Probes zu beeinträchtigen. Eine effizientere Wiederaufnahme für nicht planbare Pods reduziert unnötige Wiederholungsversuche und verbessert den Durchsatz der Planung. Die geordnete Löschung von Namespaces gewährleistet eine deterministische und sichere Entfernung von Ressourcen und mindert Sicherheitsrisiken. Streaming von Listenantworten verbessert die Skalierbarkeit, indem der Speicherbedarf des API-Servers reduziert wird. Eine robuste Initialisierung des Watch-Caches erhöht die Robustheit der Steuerungsebene, indem der Initialisierungsprozess des Watch-Caches widerstandsfähiger gegen Fehler gemacht wird.
CdXz5zHNQW_2M0WB6HN35.png
Das Kubernetes-Feature NodeSwap, das bald stabil werden soll, ermöglicht es Linux-Knoten, Swap-Speicher für zusätzliches virtuelles Speicher zu nutzen. Dies soll die Ressourcenauslastung verbessern und Out-of-Memory-(OOM)-Beendigungen reduzieren, wenn der physische RAM-Arbeitspeicher erschöpft ist. Die Wirksamkeit hängt jedoch von der Einstellung spezifischer Linux-Kernel-Parameter wie vm.swappiness, vm.min_free_kbytes und vm.watermark_scale_factor ab. Der Parameter vm.swappiness steuert die Präferenz des Kernels zwischen dem Austausch anonymen Speichers und der Rückgewinnung von dateibasiertem Speicher. vm.min_free_kbytes wirkt als Sicherheitspuffer und beeinflusst, wann aggressive Seitenrückgewinnung beginnt. vm.watermark_scale_factor passt den Abstand zwischen den freien Speicher-Wasserzeichen an, was den Austausch-Fenster beeinflusst. Tests haben gezeigt, dass die Standard-Kernel-Parameter zu OOM-Beendigungen und Neustarts von Knoten unter Speicherdruck führen können. Das Erhöhen von vm.min_free_kbytes und vm.watermark_scale_factor hat sich als entscheidend erwiesen, um vorzeitige Vertreibungen und OOM-Beendigungen zu vermeiden, indem dem Kernel mehr Zeit zum Austausch gegeben wird. Eine höhere Swappiness kann zu signifikanten I/O-Wartezeiten führen, während eine niedrigere Swappiness den Abwurf des Datei-Caches priorisiert. Die ordnungsgemäße Einstellung dieser Parameter zusammen mit den Vertreibungsschwellen des Kubelet erstellt eine ausgewogene Strategie für die Speicherdruckverwaltung. Risiken umfassen Leistungseinbußen aufgrund langsamer Swap-Zugriffe und die Maskierung von Speicherlecks.
CdXz5zHNQW_LEZYliBqbk.png
Post-Quanten-Kryptographie (PQC) ist eine Antwort auf die Bedrohung durch Quantencomputer, die aktuelle kryptografische Standards brechen könnten. PQC-Algorithmen sind so konzipiert, dass sie sowohl gegen Angriffe von klassischen als auch von Quantencomputern sicher sind. Die Industrie arbeitet daran, PQC-Algorithmen zu standardisieren und einzuführen, wobei der erste standardisierte Algorithmus der Module-Lattice Key Encapsulation Mechanism (ML-KEM) ist. Der Übergang zu PQC-Standards wird voraussichtlich zwischen 2030 und 2035 stattfinden. In TLS sind der Schlüsselaustausch und digitale Signaturen zwei Hauptkryptographieoperationen, die gesichert werden müssen, wobei der Schlüsselaustausch aufgrund des Angriffsrisikos eine höhere Priorität hat. Hybride Schlüsselaustauschmechanismen, die klassische und PQC-Algorithmen kombinieren, werden zur Sicherung des Schlüsselaustauschs eingesetzt. Die Unterstützung für PQC-Schlüsselaustauschmechanismen verbessert sich im gesamten Ökosystem rapide, wobei Go, Browser, OpenSSL und Apple die Unterstützung für das ML-KEM-basierte hybride Schema hinzufügen. Kubernetes v1.33, das Go 1.24 verwendet, unterstützt standardmäßig den hybriden Post-Quanten-X25519MLKEM768 für TLS-Verbindungen, was einen wichtigen Schritt darstellt, um Kubernetes quantensicher zu machen. Es gibt jedoch noch Einschränkungen und potenzielle Fallstricke, wie z. B. Inkompatibilitäten bei Go-Versionen und Probleme mit Paketgrößen, die angegangen werden müssen. PQC-digitale Signaturen befinden sich noch in den frühen Phasen der Entwicklung und Einführung, wobei Herausforderungen wie größere Schlüssel- und Signaturgrößen, Leistungsprobleme und eingeschränkte Toolchain-Unterstützung bestehen.
In Branchen wie Telekommunikation und Hochleistungsrechnen benötigen containerisierte Anwendungen spezifische Betriebssystemkonfigurationen oder Hardware-Präsenz. Trotz der Open Container Initiative (OCI) gab es eine Lücke bei der Ausdruck von Kompatibilitätsanforderungen. Das Kubernetes-Projekt Node Feature Discovery (NFD) löst dieses Problem, indem es Hardware- und Systemmerkmale von Cluster-Knoten erkennt und meldet. NFD hilft bei der Planung von Workloads auf Knoten, die spezifische Systemanforderungen erfüllen, was für Anwendungen mit strengen Hardware- oder Betriebssystem-Abhängigkeiten entscheidend ist. Container-Images, die auf Basis-Images aufbauen, können Kompatibilitätsprobleme mit dem Host-Betriebssystem haben, die sich in Abhängigkeiten von Treibern, Bibliotheken, Kernel-Modulen oder Funktionen manifestieren. Die Definition von Kompatibilität kann sich auf andere Container-Technologien und OCI-Artefakte erstrecken. Die Arbeitsgruppe Image Compatibility zielt darauf ab, einen Standard für Kompatibilitäts-Metadaten in Container-Images einzuführen, damit Container-Autoren erforderliche Host-Betriebssystem-Funktionen deklarieren können. Die Spezifikation, die in Kubernetes Node Feature Discovery implementiert ist, definiert eine strukturierte Möglichkeit, Kompatibilität in OCI-Image-Manifesten auszudrücken. Die Lösung integriert Kompatibilitäts-Metadaten in Kubernetes, ermöglicht intelligente Planung und Workload-Optimierung. Die Übernahme von Kompatibilitäts-Metadaten wird die Zuverlässigkeit und Leistung spezieller containerisierter Anwendungen verbessern.
CdXz5zHNQW_kfCNjV0yHl.png
Der Kubernetes-Slack wird seinen Sonderstatus verlieren und wird am 20. Juni in einen standardmäßigen kostenlosen Slack umgewandelt. Später in diesem Jahr wird unsere Gemeinschaft wahrscheinlich zu einer neuen Plattform wechseln. Wenn Sie für einen Kanal oder einen privaten Kanal verantwortlich sind oder Mitglied einer Benutzergruppe sind, müssen Sie einige Aktionen so schnell wie möglich ausführen.Im letzten Jahrzehnt hat Slack unseren Projekt mit einem kostenlosen benutzerdefinierten Enterprise-Konto unterstützt. Sie haben uns mitgeteilt, dass sie dies nicht länger tun können, da unser Slack einer der größten und aktivsten auf der Plattform ist. Daher werden sie ihn auf einen standardmäßigen kostenlosen Slack herabstufen, während wir andere Optionen entscheiden und implementieren.Am Freitag, den 20. Juni, werden wir den Funktionsbeschränkungen unterliegen. Die primären, die uns betreffen werden, sind die Begrenzung auf 90 Tage Historie und die Deaktivierung mehrerer Apps und Workflows, die wir derzeit verwenden. Das Slack-Admin-Team wird sein Bestes tun, um diese Beschränkungen zu managen.Verantwortliche Kanalbesitzer, Mitglieder privater Kanäle und Mitglieder von Benutzergruppen sollten einige Aktionen ausführen, um sich auf das Upgrade vorzubereiten und zu erhalten, so schnell wie möglich.Das CNCF-Projektpersonal hat vorgeschlagen, dass unsere Gemeinschaft nach Discord migrieren sollte. Da wir die Grenzen von Slack bereits überschritten haben, haben sie bereits untersucht, wie ein Kubernetes-Discord aussehen würde. Discord würde es uns ermöglichen, neue Tools und Integrationen zu implementieren, die der Gemeinschaft helfen würden, wie z.B. die Synchronisierung von GitHub-Gruppenmitgliedschaften. Der Lenkungsausschuss diskutieren und entscheiden über unsere zukünftige Plattform.Bitte sehen Sie unsere FAQ und überprüfen Sie die Mailingliste kubernetes-dev und den #announcements-Kanal für weitere Nachrichten. Wenn Sie spezifisches Feedback zu unserem Slack-Status haben, beteiligen Sie sich an der Diskussion auf GitHub.
Kubernetes-Ereignisse bieten wertvolle Einblicke in Cluster-Operationen, aber das Management und die Analyse werden herausfordernd, wenn Cluster wachsen. Die Herausforderungen umfassen das Ereignisvolumen, die begrenzte Aufbewahrung, den Mangel an Korrelation, Klassifizierung und Aggregation. Ein benutzerdefiniertes Ereignis-Aggregations-System kann Ingenieur-Teams helfen, das Cluster-Verhalten besser zu verstehen und Probleme effektiver zu beheben. Das System besteht aus drei Hauptkomponenten: einem Ereignis-Beobachter, einem Ereignis-Prozessor und einem Speicher-Backend. Der Ereignis-Beobachter überwacht die Kubernetes-API auf neue Ereignisse, der Ereignis-Prozessor verarbeitet, kategorisiert und korreliert Ereignisse, und das Speicher-Backend speichert verarbeitete Ereignisse für eine längere Aufbewahrung. Der Ereignis-Prozessor bereichert Ereignisse mit zusätzlichem Kontext und Klassifizierung, und das Speicher-Backend unterstützt effiziente Abfragen großer Ereignisvolumina, flexible Aufbewahrungsrichtlinien und Unterstützung für Aggregationsabfragen. Die Implementierung guter Praktiken für Ereignis-Management, wie Ressourceneffizienz, Skalierbarkeit und Zuverlässigkeit, ist entscheidend. Erweiterte Funktionen wie Mustererkennung und Echtzeit-Benachrichtigungen können implementiert werden, um wiederkehrende Probleme zu identifizieren und darauf effektiver zu reagieren. Ein gut konzipiertes Ereignis-Aggregations-System kann die Cluster-Beobachtbarkeit und die Fehlersuche-Fähigkeiten erheblich verbessern, und zukünftige Verbesserungen könnten die Verwendung von Machine-Learning für Anomalie-Erkennung, die Integration mit beliebten Beobachtungsplattformen und benutzerdefinierte Ereignis-APIs für anwendungsspezifische Ereignisse umfassen.
Das Kubernetes-Projekt hat bekannt gegeben, dass das Feature zur Platzierung von Pods in situ auf Beta-Status hochgestuft wurde und standardmäßig in der Kubernetes-Version 1.33 aktiviert sein wird. Dieses Feature ermöglicht es Benutzern, die CPU- und Speicherressourcen, die einem Container zugewiesen sind, ohne Neustart des Containers zu ändern. Die Platzierung von Pods in situ entscheidet sich für mehrere Schlüsselvorteile bei der vertikalen Skalierung, einschließlich reduzierter Störungen, verbesserter Ressourcenauslastung und schnellerer Skalierung. Das Feature hat seit seiner Alpha-Version bedeutende Änderungen erfahren, einschließlich der Einführung eines Resize-Subressourcen, des Resize-Status über Bedingungen und der Unterstützung von Sidecars. Die Stabilität und Zuverlässigkeit des Features wurden durch die Verfeinerung der zugewiesenen Ressourcenmanagement, die Verbesserung des Checkpointing und des Status-Trackings und die schnellere Erkennung von Resize-Vorgängen verbessert. Die Community konzentriert sich auf die nächsten Schritte, einschließlich der Stabilität und Produktion, der Beseitigung von Einschränkungen und der Integration mit VerticalPodAutoscaler. Benutzer können bereits mit der Platzierung von Pods in situ experimentieren, wenn das Feature standardmäßig aktiviert ist. Rückmeldung ist entscheidend, und Benutzer können Probleme melden oder ihre Erfahrungen über GitHub-Issues, Mailinglisten und Slack teilen. Die vollständigen, tiefgreifenden Design-Details finden sich in der KEP-1287: In-place-Update von Pod-Ressourcen. Die Kubernetes-Community freut sich darauf, wie Benutzer die Platzierung von Pods in situ nutzen, um effizientere und resilientere Anwendungen zu erstellen.
Die imagePullPolicy in Kubernetes weist ein überraschendes Verhalten auf, das seit über 10 Jahren ein Problem darstellt und es Pods ermöglicht, auf authentifizierte Images ohne Anmeldeinformationen zuzugreifen. Die IfNotPresent-Policy ermöglichte es einem Pod, ein bereits auf einem Knoten vorhandenes Image zu verwenden, selbst wenn er keine Anmeldeinformationen zum Abrufen des Images bereitstellte. Dies ist ein Sicherheitsproblem, da Pods ohne Anmeldeinformationen auf private Images zugreifen können. In Kubernetes v1.33 wurde die IfNotPresent-Policy aktualisiert, um sicherzustellen, dass Pods Anmeldeinformationen bereitstellen müssen, um ein zuvor abgerufenes privates Image zu verwenden. Der Kubelet überprüft die Anmeldeinformationen des Pods, bevor er ihm erlaubt, das Image zu verwenden. Die Option imagePullPolicy: Never ruft keine Images ab, erfordert aber Anmeldeinformationen, um ein bereits vorhandenes Image zu verwenden. Die Option imagePullPolicy: Always hat immer wie beabsichtigt funktioniert und erfordert eine Authentifizierung für jede Image-Anforderung. Das neue Feature verwendet persistente, dateibasierte Caches auf jedem Knoten, um die Anmeldeinformationen des Pods zu überprüfen. Das Feature basiert auf der Aufzeichnung der Absicht, ein Image abzurufen, der Extraktion von Anmeldeinformationen und der Erstellung eines Datensatzes erfolgreicher Abrufe. Das Feature ist in Kubernetes v1.33 verfügbar und kann durch Aktivieren des Feature Gate KubeletEnsureSecretPulledImages aktiviert werden.
Die Verwaltung der Stabilität von Kubernetes-Clustern ist entscheidend, wenn die Infrastruktur wächst, und das Handling großer Listenanforderungen kann die Stabilität des Clusters beeinträchtigen. Die Kubernetes-Community hat die Streaming-Codierung für Listenantworten eingeführt, um das Problem des unnötigen Speicherverbrauchs bei großen Ressourcen anzugehen. Aktuelle API-Antwortencodierer speichern die gesamte Antwortdaten als einen einzelnen Puffer, was die inkrementelle Freigabe von Speicher während der Übertragung verhindert. Dieser Ansatz wird ineffizient bei großem Maßstab, was zu hohem und langanhaltendem Speicherverbrauch im kube-apiserver-Prozess führt. Die encoding/json-Paket und Protocol Buffers haben Einschränkungen bei der Verarbeitung großer Datensätze, was die Notwendigkeit von streaming-basierten Ansätzen hervorhebt Streaming-Encoder verarbeitet und überträgt jedes Element einzeln, was es ermöglicht, den Speicher schrittweise freizugeben, während Frames oder Chunks übertragen werden. Dieser Ansatz reduziert den Speicheraufwand, der vom API-Server benötigt wird, und hält den Speicherverbrauch vorhersehbar und handhabbar. Der Streaming-Encoder ist rückwärts kompatibel, garantierend byte-für-byte-Konsistenz mit dem ursprünglichen Encoder, und unterstützt alle Kubernetes-Listentypen ohne clientseitige Änderungen erforderlich. Die Einführung der Streaming-Codierung hat zu signifikanten Leistungsverbesserungen geführt, einschließlich reduziertem Speicherverbrauch, verbesserter Skalierbarkeit und erhöhter Stabilität. Benchmark-Ergebnisse haben eine 20-fache Verbesserung des Speicherverbrauchs gezeigt, reduziert von 70-80 GB auf 3 GB, was die Wirksamkeit des neuen Streaming-Codiermechanismus demonstriert.
CdXz5zHNQW_33gY637s8A.png
Kubernetes hat sich weiterentwickelt, um seine Abhängigkeit von langlebigen Anmeldeinformationen, die in der API gespeichert sind, zu verringern. Ein bemerkenswertes Beispiel ist die Umstellung von Kubernetes Service Account Tokens von statischen auf ephemere Tokens mit OpenID Connect-kompatibler Semantik. Eine große Lücke besteht jedoch weiterhin bei der Authentifizierung für das Pullen von Images, wo Kubernetes-Cluster derzeit auf langlebige Image-Pull-Secrets oder kubelet-Credential-Provider auf Knotenebene angewiesen sind. Dies birgt Sicherheits- und betriebliche Herausforderungen, da Image-Pull-Secrets schwer zu rotieren sind und eine Kompromittierung zu unbefugtem Zugriff auf Images führen kann. Um dieses Problem anzugehen, führt Kubernetes die Service Account Token Integration für Kubelet Credential Providers ein, die es Credential-Providern ermöglicht, pod-spezifische Service Account Tokens zu verwenden, um Registry-Anmeldeinformationen zu erhalten. Diese Verbesserung beseitigt die Notwendigkeit von langlebigen Image-Pull-Secrets und bietet Workload-spezifische Authentifizierung, ephemere Anmeldeinformationen und eine nahtlose Integration mit bestehenden Kubernetes-Authentifizierungsmechanismen. Der neue Ansatz ermöglicht es kubelet-Credential-Providern, Workload Identity zu verwenden, wenn sie Image-Registry-Anmeldeinformationen abrufen, was Vorteile wie Sicherheit, granulare Zugriffskontrolle und betriebliche Einfachheit bietet. Das Feature ist derzeit in Alpha verfügbar und soll in Beta für Kubernetes v1.34 ausgeliefert werden. Die weitere Entwicklung konzentriert sich auf die Implementierung von Caching-Mechanismen und die Verbesserung der Flexibilität für Credential-Provider. Benutzer können das Feature ausprobieren, indem sie das Feature-Gate ServiceAccountTokenForKubeletCredentialProviders aktivieren und ihren Credential-Provider so modifizieren, dass er Service Account Tokens für die Authentifizierung verwendet. Die Kubernetes-Community freut sich über Feedback und ermutigt Benutzer, sich über den SIG Auth-Kanal auf Kubernetes Slack an der Entwicklung dieses Features zu beteiligen.
Kubernetes hat eine neue Funktion namens supplementalGroupsPolicy eingeführt, die eine präzisere Steuerung von Supplemental Groups in Containern ermöglicht und so die Sicherheitslage und Transparenz von UID/GID-Details verbessert. Diese Funktion ist in Kubernetes v1.33 von Alpha zu Beta übergegangen. Die Funktion ermöglicht die Implementierung einer präziseren Steuerung von Supplemental Groups in Containern, insbesondere beim Zugriff auf Volumes. Standardmäßig führt Kubernetes Gruppeninformationen aus dem Pod mit Informationen zusammen, die in /etc/group im Container-Image definiert sind, was zu Sicherheitsrisiken führen kann. Das Feld supplementalGroupsPolicy im Sicherheitskontext des Pods ermöglicht die Steuerung, wie Kubernetes ergänzende Gruppen für Containerprozesse innerhalb eines Pods berechnet. Die Strict-Richtlinie ignoriert Gruppenmitgliedschaften, die in /etc/group für den primären Benutzer des Containers definiert sind, und stellt sicher, dass nur die angegebenen Gruppen-IDs als Supplemental Groups an die Containerprozesse angehängt werden. Diese Funktion macht auch die Prozessidentität, die an den ersten Containerprozess des Containers angehängt ist, über das Feld .status.containerStatuses[].user.linux verfügbar. Die supplementalGroupsPolicy beeinflusst nur die anfängliche Prozessidentität, und ein Container mit ausreichenden Berechtigungen kann seine Prozessidentität ändern. Die Strict-Richtlinie erfordert eine CRI-Laufzeitumgebung, die diese Funktion unterstützt, z. B. containerd v2.0 oder höher und CRI-O v1.31 oder höher.
"Kubernetes v1.33 hat ein Feature zur Vermeidung von PersistentVolume-Lecks bei der Löschung in der falschen Reihenfolge zur allgemeinen Verfügbarkeit (General Availability, GA) befördert. Es stellt sicher, dass Speicherressourcen ordnungsgemäß freigegeben werden, um unerwünschte Lecks zu vermeiden. In früheren Kubernetes-Versionen verhinderte das Löschen eines PersistentVolumes (PV) vor seinem gebundenen PersistentVolumeClaim (PVC), dass die Konfigurationsrichtlinie für die Rückgewinnung von Ressourcen (Reclaim-Policy) beachtet wurde. Dies führte dazu, dass das zugehörige Speicher-Asset in der externen Infrastruktur nicht entfernt wurde. Mit Kubernetes v1.33 ist dieses Problem jetzt behoben, und die konfigurierte Lösch-Rückgewinnungsrichtlinie wird zuverlässig beachtet, selbst wenn PVs vor ihren gebundenen PVCs gelöscht werden. Dies wird durch die Verwendung von Finalizern erreicht, die sicherstellen, dass der Speicher-Backend die zugewiesene Speicherressource wie beabsichtigt freigibt. Bei CSI-Volumes) wird ein Finalizer für neue und bestehende PVs hinzugefügt, der nur entfernt wird, nachdem der Speicher vom Backend gelöscht wurde. Das Feature gilt nicht für statisch bereitgestellte in-Tree-Plugin-Volumes. Um das neue Verhalten nutzen zu können, müssen Benutzer ihr Cluster auf Kubernetes v1.33 upgraden und die CSI-External-Provisioner-Version 5.0.1 oder höher ausführen. Die Kubernetes-Speicher-Spezial-Gruppe (SIG) begrüßt neue Mitwirkende, die sich am Design und der Entwicklung von CSI oder irgendeinem Teil des Kubernetes-Speichersystems beteiligen möchten.