Grundlegende Kubernetes-Konzepte für Azure Kubernetes Service (AKS)Kubernetes core concepts for Azure Kubernetes Service (AKS)

Da die Anwendungsentwicklung zunehmend auf eine containerbasierte Vorgehensweise setzt, ist es wichtig, die Ressourcen zu orchestrieren und zu verwalten.As application development moves towards a container-based approach, the need to orchestrate and manage resources is important. Kubernetes ist die führende Plattform, die Funktionen bietet, um eine zuverlässige Planung fehlertoleranter Anwendungsworkloads bereitzustellen.Kubernetes is the leading platform that provides the ability to provide reliable scheduling of fault-tolerant application workloads. Azure Kubernetes Service (AKS) ist ein Managed Kubernetes-Angebot, das die containerbasierte Anwendungsbereitstellung und -verwaltung weiter vereinfacht.Azure Kubernetes Service (AKS) is a managed Kubernetes offering that further simplifies container-based application deployment and management.

In diesem Artikel werden die grundlegenden Kubernetes-Infrastrukturkomponenten wie Steuerungsebene, Knoten und Knotenpools vorgestellt.This article introduces the core Kubernetes infrastructure components such as the control plane, nodes, and node pools. Darüber hinaus werden Workloadressourcen wie Pods, Bereitstellungen und Sets erläutert, und es wird beschrieben, wie Sie Ressourcen in Namespaces gruppieren.Workload resources such as pods, deployments, and sets are also introduced, along with how to group resources into namespaces.

Was ist Kubernetes?What is Kubernetes?

Kubernetes ist eine schnell wachsende Plattform, die containerbasierte Anwendungen und die zugehörigen Netzwerk- und Speicherkomponenten verwaltet.Kubernetes is a rapidly evolving platform that manages container-based applications and their associated networking and storage components. Der Fokus liegt auf den Anwendungsworkloads, nicht auf den zugrunde liegenden Infrastrukturkomponenten.The focus is on the application workloads, not the underlying infrastructure components. Kubernetes bietet einen deklarativen Ansatz für Bereitstellungen und wird durch einen stabilen Satz an APIs für Verwaltungsvorgänge unterstützt.Kubernetes provides a declarative approach to deployments, backed by a robust set of APIs for management operations.

Sie können moderne, portierbare, auf Microservices basierende Anwendungen erstellen und ausführen, die von Kubernetes-Funktionen für die Orchestrierung und Verwaltung der Verfügbarkeit dieser Anwendungskomponenten profitieren.You can build and run modern, portable, microservices-based applications that benefit from Kubernetes orchestrating and managing the availability of those application components. Kubernetes unterstützt sowohl zustandslose als auch zustandsbehaftete Anwendungen für Teams, die zunehmend auf Microservices basierende Anwendungen entwickeln.Kubernetes supports both stateless and stateful applications as teams progress through the adoption of microservices-based applications.

Als offene Plattform ermöglicht Kubernetes Ihnen, Ihre Anwendungen mit Ihren bevorzugten Programmiersprachen, Betriebssystemen, Bibliotheken oder Messagingbussen zu erstellen.As an open platform, Kubernetes allows you to build your applications with your preferred programming language, OS, libraries, or messaging bus. Vorhandene CI/CD-Tools (Continuous Integration/Continuous Delivery) können in Kubernetes integriert werden, um Releases zu planen und bereitzustellen.Existing continuous integration and continuous delivery (CI/CD) tools can integrate with Kubernetes to schedule and deploy releases.

Azure Kubernetes Service (AKS) ist ein Managed Kubernetes-Dienst, der die Komplexität von Bereitstellungs- und wichtigen Verwaltungsaufgaben reduziert – beispielsweise die Koordination von Upgrades.Azure Kubernetes Service (AKS) provides a managed Kubernetes service that reduces the complexity for deployment and core management tasks, including coordinating upgrades. Die AKS-Steuerungsebene wird von der Azure-Plattform verwaltet, und Sie zahlen nur für die AKS-Knoten, die Ihre Anwendungen ausführen.The AKS control plane is managed by the Azure platform, and you only pay for the AKS nodes that run your applications. AKS baut auf der Open-Source-Engine von Azure Kubernetes Service (aks-engine) auf.AKS is built on top of the open-source Azure Kubernetes Service Engine (aks-engine).

Kubernetes-Cluster – ArchitekturKubernetes cluster architecture

Ein Kubernetes-Cluster ist in zwei Komponenten unterteilt:A Kubernetes cluster is divided into two components:

  • Knoten auf Steuerungsebene stellen die grundlegenden Kubernetes-Dienste und Orchestrierungsfunktionen für Anwendungsworkloads bereit.Control plane nodes provide the core Kubernetes services and orchestration of application workloads.
  • Knoten führen Ihre Anwendungsworkloads aus.Nodes run your application workloads.

Kubernetes-Steuerungsebene und Knoten – Komponenten

SteuerungsebeneControl plane

Wenn Sie einen AKS-Cluster erstellen, wird automatisch eine Steuerungsebene erstellt und konfiguriert.When you create an AKS cluster, a control plane is automatically created and configured. Diese Steuerungsebene wird als verwaltete Azure-Ressource bereitgestellt, die für den Benutzer abstrahiert wird.This control plane is provided as a managed Azure resource abstracted from the user. Für die Steuerungsebene fallen keine Kosten an. Nur die Knoten, die Teil des AKS-Clusters sind, werden in Rechnung gestellt.There's no cost for the control plane, only the nodes that are part of the AKS cluster.

Die Steuerungsebene umfasst die folgenden Kubernetes-Kernkomponenten:The control plane includes the following core Kubernetes components:

  • kube-apiserver: Die zugrunde liegenden Kubernetes-APIs werden auf dem API-Server verfügbar gemacht.kube-apiserver - The API server is how the underlying Kubernetes APIs are exposed. Diese Komponente ermöglicht die Interaktion für Verwaltungstools, z.B. kubectl oder das Kubernetes-Dashboard.This component provides the interaction for management tools, such as kubectl or the Kubernetes dashboard.
  • etcd: Für die Verwaltung des Zustands Ihres Kubernetes-Clusters und Ihrer Kubernetes-Konfiguration ist etcd ein hoch verfügbarer Schlüssel-Wert-Speicher in Kubernetes.etcd - To maintain the state of your Kubernetes cluster and configuration, the highly available etcd is a key value store within Kubernetes.
  • kube-scheduler: Wenn Sie Anwendungen erstellen oder skalieren, ermittelt der Scheduler, welche Knoten die Workload ausführen können, und startet diese.kube-scheduler - When you create or scale applications, the Scheduler determines what nodes can run the workload and starts them.
  • kube-controller-manager: Der Controller Manager überwacht eine Reihe kleinerer Controller, die Aktionen wie beispielsweise das Replizieren von Pods und das Verarbeiten von Knotenvorgängen ausführen.kube-controller-manager - The Controller Manager oversees a number of smaller Controllers that perform actions such as replicating pods and handling node operations.

AKS stellt eine Steuerungsebene mit Einzelmandant, einem dedizierten API-Server, einem Scheduler usw. bereit. Sie definieren die Anzahl und Größe der Knoten, und die Azure-Plattform konfiguriert die sichere Kommunikation zwischen Steuerungsebene und Knoten.AKS provides a single-tenant control plane, with a dedicated API server, Scheduler, etc. You define the number and size of the nodes, and the Azure platform configures the secure communication between the control plane and nodes. Die Interaktion mit der Steuerungsebene erfolgt über Kubernetes-APIs, z.B. kubectl, oder das Kubernetes-Dashboard.Interaction with the control plane occurs through Kubernetes APIs, such as kubectl or the Kubernetes dashboard.

Diese verwaltete Steuerungsebene bedeutet, dass Sie Komponenten wie einen hoch verfügbaren etcd-Speicher nicht konfigurieren müssen. Sie bedeutet aber auch, dass Sie nicht direkt auf die Steuerungsebene zugreifen können.This managed control plane means that you don't need to configure components like a highly available etcd store, but it also means that you can't access the control plane directly. Upgrades für Kubernetes werden über die Azure CLI oder das Azure-Portal orchestriert. Ein Upgrade erfolgt erst auf der Steuerungsebene, dann auf den Knoten.Upgrades to Kubernetes are orchestrated through the Azure CLI or Azure portal, which upgrades the control plane and then the nodes. Zum Beheben möglicher Probleme können Sie über Azure Monitor-Protokolle die Steuerungsebenenprotokolle überprüfen.To troubleshoot possible issues, you can review the control plane logs through Azure Monitor logs.

Wenn Sie die Steuerungsebene auf eine bestimmte Weise konfigurieren müssen oder direkten Zugriff benötigen, können Sie mit aks-engine selbst einen Kubernetes-Cluster bereitstellen.If you need to configure the control plane in a particular way or need direct access to it, you can deploy your own Kubernetes cluster using aks-engine.

Entsprechende bewährte Methoden finden Sie unter Best Practices für Clustersicherheit und Upgrades in Azure Kubernetes Service (AKS).For associated best practices, see Best practices for cluster security and upgrades in AKS.

Knoten und KnotenpoolsNodes and node pools

Zum Ausführen Ihrer Anwendungen und der unterstützenden Dienste benötigen Sie einen Kubernetes-Knoten.To run your applications and supporting services, you need a Kubernetes node. Ein AKS-Cluster besteht aus mindestens einem Knoten, bei dem es sich um einen virtuellen Azure-Computer handelt, der die Kubernetes-Knotenkomponenten und die Containerruntime ausführt:An AKS cluster has one or more nodes, which is an Azure virtual machine (VM) that runs the Kubernetes node components and container runtime:

  • Das kubelet ist der Kubernetes-Agent, der die Orchestrierungsanforderungen der Steuerungsebene und die Planung der Ausführung der angeforderten Container verarbeitet.The kubelet is the Kubernetes agent that processes the orchestration requests from the control plane and scheduling of running the requested containers.
  • Die virtuellen Netzwerkfunktionen werden vom kube-proxy auf jedem Knoten verarbeitet.Virtual networking is handled by the kube-proxy on each node. Der Proxy leitet den Netzwerkdatenverkehr weiter und verwaltet die IP-Adressen für Dienste und Pods.The proxy routes network traffic and manages IP addressing for services and pods.
  • Die Containerruntime ist die Komponente, die es Anwendungen in Containern ermöglicht, zusätzliche Ressourcen wie das virtuelle Netzwerk und den virtuellen Speicher auszuführen und damit zu interagieren.The container runtime is the component that allows containerized applications to run and interact with additional resources such as the virtual network and storage. In AKS wird Moby als Containerruntime verwendet.In AKS, Moby is used as the container runtime.

Virtuelle Azure-Computer und unterstützende Ressourcen für einen Kubernetes-Knoten

Die Größe der Azure-VMs für Ihre Knoten definiert die Anzahl der CPUs, die Größe des Arbeitsspeichers und die Größe und den Typ des verfügbaren Speichers (z.B. hochleistungsfähige SSDs oder reguläre HDDs).The Azure VM size for your nodes defines how many CPUs, how much memory, and the size and type of storage available (such as high-performance SSD or regular HDD). Wenn Sie damit rechnen, dass Sie Anwendungen bereitstellen werden, die große Mengen an CPUs und Arbeitsspeicher oder hochleistungsfähigen Datenspeicher erfordern, planen Sie die Knotengröße entsprechend.If you anticipate a need for applications that require large amounts of CPU and memory or high-performance storage, plan the node size accordingly. Sie können auch die Anzahl von Knoten in Ihrem AKS-Cluster aufskalieren, um Anforderungen zu erfüllen.You can also scale out the number of nodes in your AKS cluster to meet demand.

In AKS basiert das VM-Image für die Knoten in Ihrem Cluster derzeit auf Ubuntu Linux oder Windows Server 2019.In AKS, the VM image for the nodes in your cluster is currently based on Ubuntu Linux or Windows Server 2019. Wenn Sie einen AKS-Cluster erstellen oder die Anzahl von Knoten aufskalieren, erstellt die Azure-Plattform die erforderliche Anzahl von VMs und konfiguriert diese.When you create an AKS cluster or scale out the number of nodes, the Azure platform creates the requested number of VMs and configures them. Sie müssen keine manuellen Konfigurationsaufgaben ausführen.There's no manual configuration for you to perform. Agent-Knoten werden als Standard-VMs in Rechnung gestellt, sodass alle etwaigen Rabatte, über die Sie auf die von Ihnen verwendete VM-Größe verfügen (einschließlich Azure-Reservierungen), automatisch angewendet werden.Agent nodes are billed as standard virtual machines, so any discounts you have on the VM size you're using (including Azure reservations) are automatically applied.

Wenn Sie ein anderes Hostbetriebssystem oder eine andere Containerruntime benötigen oder benutzerdefinierte Pakete verwenden müssen, können Sie mit aks-engine selbst einen Kubernetes-Cluster bereitstellen.If you need to use a different host OS, container runtime, or include custom packages, you can deploy your own Kubernetes cluster using aks-engine. Die aks-engine-Upstreamreleases stellen Konfigurationsoptionen bereit, bevor diese offiziell in AKS-Clustern unterstützt werden.The upstream aks-engine releases features and provides configuration options before they are officially supported in AKS clusters. Wenn Sie z.B. eine andere Containerruntime als Moby verwenden möchten, können Sie mithilfe von aks-engine einen Kubernetes-Cluster konfigurieren und bereitstellen, der Ihre aktuellen Anforderungen erfüllt.For example, if you wish to use a container runtime other than Moby, you can use aks-engine to configure and deploy a Kubernetes cluster that meets your current needs.

RessourcenreservierungenResource reservations

Knotenressourcen werden von AKS verwendet, damit der Knoten als Teil Ihres Clusters fungieren kann.Node resources are utilized by AKS to make the node function as part of your cluster. Dies kann zu einer Abweichung zwischen den Gesamtressourcen des Knotens und den Ressourcen führen, die bei der Verwendung in AKS zugewiesen werden können.This can create a discrepancy between your node's total resources and the resources allocatable when used in AKS. Dies sollte unbedingt beachtet werden, wenn Anforderungen und Grenzwerte für vom Benutzer bereitgestellte Pods festgelegt werden.This is important to note when setting requests and limits for user deployed pods.

Führen Sie Folgendes aus, um die Ressourcen, die einem Knoten zugewiesen werden können, zu ermitteln:To find a node's allocatable resources run:

kubectl describe node [NODE_NAME]

Um die Leistung und Funktionalität des Knotens zu gewährleisten, werden auf jedem Knoten Ressourcen von AKS reserviert.To maintain node performance and functionality, resources are reserved on each node by AKS. Wenn ein Knoten mehr Ressourcen nutzt, steigt die Anzahl der reservierten Ressourcen aufgrund der höheren Menge an vom Benutzer bereitgestellten Pods, die verwaltet werden müssen.As a node grows larger in resources, the resource reservation grows due to a higher amount of user deployed pods needing management.

Hinweis

Durch die Verwendung von AKS-Add-Ons wie Container Insights (OMS) werden zusätzliche Knotenressourcen beansprucht.Using AKS add-ons such as Container Insights (OMS) will consume additional node resources.

  • CPU: Die reservierten CPU-Ressourcen hängen vom Knotentyp und der Clusterkonfiguration ab. Dies kann dazu führen, dass weniger CPU-Ressourcen zugewiesen werden können, da zusätzliche Features ausgeführt werden.CPU - reserved CPU is dependent on node type and cluster configuration which may cause less allocatable CPU due to running additional features
CPU-Kerne auf dem HostCPU cores on host 11 22 44 88 1616 3232 6464
Kube-reserviert (Millicore)Kube-reserved (millicores) 6060 100100 140140 180180 260260 420420 740740
  • Arbeitsspeicher: Der von AKS genutzte Arbeitsspeicher ergibt sich aus zwei Werten.Memory - memory utilized by AKS includes the sum of two values.
  1. Der Kubelet-Daemon wird auf allen Kubernetes-Agent-Knoten installiert, um die Erstellung und Beendigung von Containern zu verwalten.The kubelet daemon is installed on all Kubernetes agent nodes to manage container creation and termination. In AKS gilt für diesen Daemon standardmäßig die folgende Entfernungsregel: memory.available<750Mi. Dies bedeutet, dass der zuweisbare Arbeitsspeicher auf einem Knoten immer mindestens 750 Mi betragen muss.By default on AKS, this daemon has the following eviction rule: memory.available<750Mi, which means a node must always have at least 750 Mi allocatable at all times. Wenn ein Host den Schwellenwert des verfügbaren Arbeitsspeichers unterschreitet, beendet das Kubelet einen der ausgeführten Pods, um Speicher auf dem Hostcomputer freizugeben und zu schützen.When a host is below that threshold of available memory, the kubelet will terminate one of the running pods to free memory on the host machine and protect it. Dies ist eine reaktive Aktion, die ausgeführt wird, sobald der verfügbare Arbeitsspeicher den Schwellenwert von 750 Mi unterschreitet.This is a reactive action once available memory decreases beyond the 750Mi threshold.

  2. Der zweite Wert ist die regressive Rate des Arbeitsspeichers, der für den Kubelet-Daemon reserviert ist, damit er ordnungsgemäß ausgeführt wird („kube-reserved“).The second value is a regressive rate of memory reservations for the kubelet daemon to properly function (kube-reserved).

    • 25 % der ersten 4 GB Arbeitsspeicher25% of the first 4 GB of memory
    • 20 % der nächsten 4 GB Arbeitsspeicher (bis 8 GB)20% of the next 4 GB of memory (up to 8 GB)
    • 10 % der nächsten 8 GB Arbeitsspeicher (bis 16 GB)10% of the next 8 GB of memory (up to 16 GB)
    • 6 % der nächsten 112 GB Arbeitsspeicher (bis 128 GB)6% of the next 112 GB of memory (up to 128 GB)
    • 2 % des Arbeitsspeichers oberhalb von 128 GB2% of any memory above 128 GB

Die obigen Regeln für die Arbeitsspeicher- und CPU-Zuteilung werden verwendet, um die Integrität von Agent-Knoten zu gewährleisten. Einige dieser Knoten hosten Systempods, die für die Clusterintegrität wichtig sind.The above rules for memory and CPU allocation are used to keep agent nodes healthy, including some hosting system pods that are critical to cluster health. Diese Zuteilungsregeln sorgen auch dafür, dass der Knoten weniger zuteilbaren Arbeitsspeicher und CPU meldet, als wenn sie kein Teil eines Kubernetes-Clusters wären.These allocation rules also cause the node to report less allocatable memory and CPU than it would if it were not part of a Kubernetes cluster. Die obigen Ressourcenreservierungen können nicht geändert werden.The above resource reservations can't be changed.

Wenn ein Knoten beispielsweise 7 GB bietet, werden 34 % des Arbeitsspeichers zusätzlich zum festen Entfernungsschwellenwert von 750 Mi als nicht zuteilbar angegeben.For example, if a node offers 7 GB, it will report 34% of memory not allocatable on top of the 750Mi hard eviction threshold.

(0.25*4) + (0.20*3) = + 1 GB + 0.6GB = 1.6GB / 7GB = 22.86% reserved

Zusätzlich zu den Reservierungen für Kubernetes selbst reserviert das zugrunde liegende Knotenbetriebssystem ebenfalls CPU- und Arbeitsspeicherressourcen für die Aufrechterhaltung der Betriebssystemfunktionen.In addition to reservations for Kubernetes itself, the underlying node OS also reserves an amount of CPU and memory resources to maintain OS functions.

Entsprechende bewährte Methoden finden Sie unter Best Practices für grundlegende Schedulerfunktionen in Azure Kubernetes Service (AKS).For associated best practices, see Best practices for basic scheduler features in AKS.

KnotenpoolsNode pools

Knoten mit der gleichen Konfiguration werden in Knotenpools gruppiert.Nodes of the same configuration are grouped together into node pools. Ein Kubernetes-Cluster enthält mindestens einen Knotenpool.A Kubernetes cluster contains one or more node pools. Die anfängliche Knotenanzahl und -größe wird beim Erstellen eines AKS-Clusters definiert, wobei ein Standardknotenpool erstellt wird.The initial number of nodes and size are defined when you create an AKS cluster, which creates a default node pool. Dieser Standardknotenpool in AKS enthält die zugrunde liegenden VMs, die Ihre Agent-Knoten ausführen.This default node pool in AKS contains the underlying VMs that run your agent nodes.

Hinweis

Um zu gewährleisten, dass Ihr Cluster zuverlässig funktioniert, sollten Sie mindestens zwei Knoten im Standardknotenpool ausführen.To ensure your cluster operates reliably, you should run at least 2 (two) nodes in the default node pool.

Wenn Sie einen AKS-Cluster skalieren oder ein Upgrade des Clusters durchführen, wird die Aktion im Standardknotenpool ausgeführt.When you scale or upgrade an AKS cluster, the action is performed against the default node pool. Sie können auch auswählen, einen bestimmten Knotenpool zu skalieren oder ein Upgrade für diesen auszuführen.You can also choose to scale or upgrade a specific node pool. Bei Upgradevorgängen wird die Ausführung von Containern in anderen Knoten im Knotenpool geplant, bis das Upgrade für alle Knoten erfolgreich durchgeführt wurde.For upgrade operations, running containers are scheduled on other nodes in the node pool until all the nodes are successfully upgraded.

Weitere Informationen zur Verwendung mehrerer Knotenpools in AKS finden Sie unter Erstellen und Verwalten mehrerer Knotenpools für einen Cluster in AKS.For more information about how to use multiple node pools in AKS, see Create and manage multiple node pools for a cluster in AKS.

KnotenselektorenNode selectors

In einem AKS-Cluster mit mehreren Knotenpools müssen Sie dem Kubernetes-Scheduler möglicherweise mitteilen, welcher Knotenpool für eine bestimmte Ressource verwendet werden soll.In an AKS cluster that contains multiple node pools, you may need to tell the Kubernetes Scheduler which node pool to use for a given resource. Beispielsweise sollten Eingangscontroller nicht auf Windows Server-Knoten ausgeführt werden.For example, ingress controllers shouldn't run on Windows Server nodes. Mit Knotenselektoren können Sie verschiedene Parameter festlegen, wie z.B. das Betriebssystem des Knotens, um zu steuern, wo ein Pod geplant werden soll.Node selectors let you define various parameters, such as the node OS, to control where a pod should be scheduled.

Das folgende einfache Beispiel plant eine NGINX-Instanz auf einem Linux-Knoten unter Verwendung des Knotenselektors "beta.kubernetes.io/os": linux:The following basic example schedules an NGINX instance on a Linux node using the node selector "beta.kubernetes.io/os": linux:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: nginx:1.15.12
  nodeSelector:
    "beta.kubernetes.io/os": linux

Weitere Informationen zum Steuern, wo Pods geplant werden, finden Sie unter Best Practices für erweiterte Schedulerfunktionen in Azure Kubernetes Service (AKS).For more information on how to control where pods are scheduled, see Best practices for advanced scheduler features in AKS.

PodsPods

Kubernetes verwendet Pods, um eine Instanz Ihrer Anwendung auszuführen.Kubernetes uses pods to run an instance of your application. Ein Pod repräsentiert eine einzelne Instanz der Anwendung.A pod represents a single instance of your application. Pods weisen in der Regel eine 1:1-Zuordnung mit einem Container auf. Es gibt jedoch auch erweiterte Szenarien, in denen ein Pod mehrere Container enthalten kann.Pods typically have a 1:1 mapping with a container, although there are advanced scenarios where a pod may contain multiple containers. Diese Pods mit mehreren Containern werden zusammen auf dem gleichen Knoten geplant und ermöglichen es Containern, zugehörige Ressourcen gemeinsam zu nutzen.These multi-container pods are scheduled together on the same node, and allow containers to share related resources.

Wenn Sie einen Pod erstellen, können Sie Ressourcenanforderungen definieren, um eine bestimmte Menge an CPU- oder Arbeitsspeicherressourcen anzufordern.When you create a pod, you can define resource requests to request a certain amount of CPU or memory resources. Der Kubernetes Scheduler versucht, die Ausführung der Pods auf einem Knoten mit den verfügbaren Ressourcen zu planen, um die Anforderung zu erfüllen.The Kubernetes Scheduler tries to schedule the pods to run on a node with available resources to meet the request. Sie können auch maximale Ressourcenlimits angeben, um zu verhindern, dass ein bestimmter Pod zu viele Computeressourcen des zugrunde liegenden Knotens verbraucht.You can also specify maximum resource limits that prevent a given pod from consuming too much compute resource from the underlying node. Eine bewährte Methode ist es, Ressourcenlimits für alle Pods einzurichten, um den Kubernetes Scheduler darüber zu informieren, welche Ressourcen benötigt werden und zulässig sind.A best practice is to include resource limits for all pods to help the Kubernetes Scheduler understand which resources are needed and permitted.

Weitere Informationen finden Sie unter Kubernetes Pods (Kubernetes-Pods) und Kubernetes Pod Lifecycle (Lebenszyklus von Kubernetes-Pods).For more information, see Kubernetes pods and Kubernetes pod lifecycle.

Ein Pod ist eine logische Ressource, aber die Container sind die Ressourcen, in denen die Anwendungsworkloads ausgeführt werden.A pod is a logical resource, but the container(s) are where the application workloads run. Pods sind in der Regel kurzlebige Ressourcen, die gelöscht werden können. Einzeln geplante Pods bieten nicht alle Hochverfügbarkeits- und Redundanzfeatures von Kubernetes.Pods are typically ephemeral, disposable resources, and individually scheduled pods miss some of the high availability and redundancy features Kubernetes provides. Stattdessen werden Pods üblicherweise von Kubernetes-Controllern bereitgestellt und verwaltet, beispielsweise dem Bereitstellungscontroller.Instead, pods are usually deployed and managed by Kubernetes Controllers, such as the Deployment Controller.

Bereitstellungen und YAML-ManifesteDeployments and YAML manifests

Eine Bereitstellung repräsentiert einen oder mehrere identische Pods, die vom Kubernetes-Bereitstellungscontroller verwaltet werden.A deployment represents one or more identical pods, managed by the Kubernetes Deployment Controller. Eine Bereitstellung definiert die Anzahl von Replikaten (Pods), die erstellt werden sollen. Der Kubernetes Scheduler stellt sicher, dass weitere Pods auf intakten Knoten geplant werden, falls Probleme mit Pods oder Knoten auftreten sollten.A deployment defines the number of replicas (pods) to create, and the Kubernetes Scheduler ensures that if pods or nodes encounter problems, additional pods are scheduled on healthy nodes.

Sie können Bereitstellungen aktualisieren, um die Konfiguration von Pods, das verwendete Containerimage oder den angeschlossenen Speicher zu ändern.You can update deployments to change the configuration of pods, container image used, or attached storage. Der Bereitstellungscontroller leert und beendet eine bestimmte Anzahl von Replikaten, erstellt Replikate gemäß der neuen Bereitstellungsdefinition und setzt den Prozess so lange fort, bis alle Replikate in der Bereitstellung aktualisiert wurden.The Deployment Controller drains and terminates a given number of replicas, creates replicas from the new deployment definition, and continues the process until all replicas in the deployment are updated.

Die meisten zustandslosen Anwendungen in AKS sollten das Bereitstellungsmodell verwenden, anstatt einzelne Pods zu planen.Most stateless applications in AKS should use the deployment model rather than scheduling individual pods. Kubernetes kann die Integrität und den Status von Bereitstellungen überwachen, um sicherzustellen, dass die erforderliche Anzahl von Replikaten im Cluster ausgeführt wird.Kubernetes can monitor the health and status of deployments to ensure that the required number of replicas run within the cluster. Wenn Sie nur einzelne Pods planen, werden diese nach dem Auftreten eines Problems nicht neu gestartet. Außerdem werden die Pods nicht auf intakten Knoten erneut geplant, wenn auf dem aktuellen Knoten ein Problem auftritt.When you only schedule individual pods, the pods aren't restarted if they encounter a problem, and aren't rescheduled on healthy nodes if their current node encounters a problem.

Wenn eine Anwendung erfordert, dass jederzeit ein Quorum aus Instanzen verfügbar ist, damit Verwaltungsentscheidungen getroffen werden können, darf diese Funktionalität nicht durch Aktualisierungsprozesse unterbrochen werden.If an application requires a quorum of instances to always be available for management decisions to be made, you don't want an update process to disrupt that ability. Budgets für die Unterbrechung von Pods können verwendet werden, um zu definieren, wie viele Replikate in einer Bereitstellung während einer Aktualisierung oder eines Knotenupgrades heruntergefahren werden können.Pod Disruption Budgets can be used to define how many replicas in a deployment can be taken down during an update or node upgrade. Ein Beispiel: Wenn Sie in Ihrer Bereitstellung über 5 Replikate verfügen, können Sie eine Podunterbrechung für 4 Replikate definieren, damit nur ein Replikat gleichzeitig gelöscht bzw. neu geplant werden darf.For example, if you have 5 replicas in your deployment, you can define a pod disruption of 4 to only permit one replica from being deleted/rescheduled at a time. Ebenso wie bei Podressourcenlimits besteht eine bewährte Methode darin, Budgets für die Unterbrechung von Pods für Anwendungen zu definieren, für die immer eine bestimmte Mindestanzahl von Replikaten vorhanden sein muss.As with pod resource limits, a best practice is to define pod disruption budgets on applications that require a minimum number of replicas to always be present.

Bereitstellungen werden in der Regel mit kubectl create oder kubectl apply erstellt und verwaltet.Deployments are typically created and managed with kubectl create or kubectl apply. Um eine Bereitstellung zu erstellen, definieren Sie eine Manifestdatei im YAML-Format (YAML Ain't Markup Language).To create a deployment, you define a manifest file in the YAML (YAML Ain't Markup Language) format. Das folgende Beispiel erstellt eine grundlegende Bereitstellung eines NGINX-Webservers.The following example creates a basic deployment of the NGINX web server. Die Bereitstellung gibt an, dass 3 Replikate erstellt werden sollen und dass Port 80 auf dem Container geöffnet werden soll.The deployment specifies 3 replicas to be created, and that port 80 be open on the container. Es werden auch Ressourcenanforderungen und -limits für CPU und Arbeitsspeicher definiert.Resource requests and limits are also defined for CPU and memory.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.15.2
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 250m
            memory: 64Mi
          limits:
            cpu: 500m
            memory: 256Mi

Indem Sie Dienste wie Lastenausgleichsmodule im YAML-Manifest angeben, können Sie auch komplexere Anwendungen erstellen.More complex applications can be created by also including services such as load balancers within the YAML manifest.

Weitere Informationen finden Sie unter Kubernetes-Bereitstellungen.For more information, see Kubernetes deployments.

Paketverwaltung mit HelmPackage management with Helm

Ein häufiger Ansatz für die Verwaltung von Anwendungen in Kubernetes ist die Verwendung von Helm.A common approach to managing applications in Kubernetes is with Helm. Sie können vorhandene Helm-Charts erstellen und verwenden, die eine gepackte Version des Anwendungscodes und der Kubernetes-YAML-Manifeste zum Bereitstellen von Ressourcen enthalten.You can build and use existing public Helm charts that contain a packaged version of application code and Kubernetes YAML manifests to deploy resources. Diese Helm-Charts können lokal oder in einem Remoterepository gespeichert werden, z.B. einem Helm-Chart-Repository in Azure Container Registry.These Helm charts can be stored locally, or often in a remote repository, such as an Azure Container Registry Helm chart repo.

Zur Verwendung von Helm wird eine Serverkomponente namens Tiller in Ihrem Kubernetes-Cluster installiert.To use Helm, a server component called Tiller is installed in your Kubernetes cluster. Tiller verwaltet die Installation von Charts im Cluster.The Tiller manages the installation of charts within the cluster. Der Helm-Client selbst wird lokal auf Ihrem Computer installiert oder kann in der Azure Cloud Shell verwendet werden.The Helm client itself is installed locally on your computer, or can be used within the Azure Cloud Shell. Sie können im Client nach Helms-Charts suchen oder Helm-Charts erstellen und diese dann in Ihrem Kubernetes-Cluster installieren.You can search for or create Helm charts with the client, and then install them to your Kubernetes cluster.

Helm umfasst eine Clientkomponente und eine serverseitige Tiller-Komponente, die Ressourcen im Kubernetes-Cluster erstellt.

Weitere Informationen finden Sie unter Installieren von Anwendungen mit Helm in Azure Kubernetes Service (AKS).For more information, see Install applications with Helm in Azure Kubernetes Service (AKS).

StatefulSets und DaemonSetsStatefulSets and DaemonSets

Der Bereitstellungscontroller verwendet den Kubernetes Scheduler, um eine bestimmte Anzahl von Replikaten auf einem beliebigen verfügbaren Knoten mit verfügbaren Ressourcen auszuführen.The Deployment Controller uses the Kubernetes Scheduler to run a given number of replicas on any available node with available resources. Diese Art der Verwendung von Bereitstellungen mag für zustandslose Anwendungen ausreichend sein, nicht aber für Anwendungen, die eine permanente Namenskonvention oder einen permanenten Speicher benötigen.This approach of using deployments may be sufficient for stateless applications, but not for applications that require a persistent naming convention or storage. Bei Anwendungen, für die auf jedem Knoten oder auf ausgewählten Knoten in einem Cluster ein Replikat vorhanden sein muss, überprüft der Bereitstellungscontroller nicht, wie die Replikate auf den Knoten verteilt sind.For applications that require a replica to exist on each node, or selected nodes, within a cluster, the Deployment Controller doesn't look at how replicas are distributed across the nodes.

Es gibt zwei Kubernetes-Ressourcen, mit denen Sie diese Arten von Anwendungen verwalten können:There are two Kubernetes resources that let you manage these types of applications:

  • StatefulSets: Verwalten den Zustand von Anwendungen über den Lebenszyklus eines einzelnen Pods hinweg, z.B. Speicher.StatefulSets - Maintain the state of applications beyond an individual pod lifecycle, such as storage.
  • DaemonSets: Stellen zu einem frühen Zeitpunkt im Kubernetes-Bootstrapprozess eine ausgeführte Ressource auf jedem Knoten sicher.DaemonSets - Ensure a running instance on each node, early in the Kubernetes bootstrap process.

StatefulSetsStatefulSets

Die moderne Anwendungsentwicklung strebt häufig nach zustandslosen Anwendungen, aber StatefulSets können für zustandsbehaftete Anwendungen verwendet werden, z.B. für Anwendungen, die Datenbankkomponenten enthalten.Modern application development often aims for stateless applications, but StatefulSets can be used for stateful applications, such as applications that include database components. Ein StatefulSet ähnelt einer Bereitstellung insofern, als ein oder mehrere identische Pods erstellt und verwaltet werden.A StatefulSet is similar to a deployment in that one or more identical pods are created and managed. Replikate in einem StatefulSet folgen einem ordnungsgemäßen, sequenziellen Verfahren für Bereitstellung, Skalierung, Upgrades und Beendigungen.Replicas in a StatefulSet follow a graceful, sequential approach to deployment, scale, upgrades, and terminations. In einem StatefulSet bleiben Namenskonvention, Netzwerknamen und Speicher permanent erhalten, wenn Replikate neu geplant werden.With a StatefulSet (as replicas are rescheduled) the naming convention, network names, and storage persist.

Sie definieren die Anwendung mit kind: StatefulSet im YAML-Format. Der StatefulSet-Controller sorgt dann für die Bereitstellung und Verwaltung der erforderlichen Replikate.You define the application in YAML format using kind: StatefulSet, and the StatefulSet Controller then handles the deployment and management of the required replicas. Daten werden in permanenten Speicher geschrieben, der von Azure Managed Disks oder Azure Files bereitgestellt wird.Data is written to persistent storage, provided by Azure Managed Disks or Azure Files. Bei StatefulSets bleibt der zugrunde liegende permanente Speicher erhalten, auch wenn das StatefulSet gelöscht wird.With StatefulSets, the underlying persistent storage remains even when the StatefulSet is deleted.

Weitere Informationen finden Sie unter Kubernetes StatefulSets.For more information, see Kubernetes StatefulSets.

Replikate in einem StatefulSet werden auf einem beliebigen verfügbaren Knoten in einem AKS-Cluster geplant und ausgeführt.Replicas in a StatefulSet are scheduled and run across any available node in an AKS cluster. Wenn Sie sicherstellen müssen, dass mindestens ein Pod in Ihrem Set auf einem Knoten ausgeführt wird, können Sie stattdessen ein DaemonSet verwenden.If you need to ensure that at least one pod in your Set runs on a node, you can instead use a DaemonSet.

DaemonSetsDaemonSets

Bei spezifischen Anforderungen an die Protokollsammlung oder Überwachung müssen Sie möglicherweise einen bestimmten Pod auf allen bzw. auf ausgewählten Knoten ausführen.For specific log collection or monitoring needs, you may need to run a given pod on all, or selected, nodes. Auch ein DaemonSet wird zum Bereitstellen von einem oder mehreren identischen Pods verwendet, aber der DaemonSet-Controller stellt sicher, dass jeder angegebene Knoten eine Instanz des Pods ausführt.A DaemonSet is again used to deploy one or more identical pods, but the DaemonSet Controller ensures that each node specified runs an instance of the pod.

Der DaemonSet-Controller kann Pods auf Knoten zu einem frühen Zeitpunkt im Clusterstartprozess planen, bevor der Kubernetes Scheduler gestartet wird.The DaemonSet Controller can schedule pods on nodes early in the cluster boot process, before the default Kubernetes scheduler has started. Dies stellt sicher, dass die Pods in einem DaemonSet gestartet wurden, bevor herkömmliche Pods in einer Bereitstellung oder einem StatefulSet geplant werden.This ability ensures that the pods in a DaemonSet are started before traditional pods in a Deployment or StatefulSet are scheduled.

Ähnlich wie StatefulSets wird auch ein DaemonSet mit kind: DaemonSet als Teil einer YAML-Definition definiert.Like StatefulSets, a DaemonSet is defined as part of a YAML definition using kind: DaemonSet.

Weitere Informationen finden Sie unter Kubernetes DaemonSets.For more information, see Kubernetes DaemonSets.

Hinweis

Wenn Sie das Add-On für virtuelle Knoten verwenden, erstellen DaemonSets keine Pods auf dem virtuellen Knoten.If using the Virtual Nodes add-on, DaemonSets will not create pods on the virtual node.

NamespacesNamespaces

Kubernetes-Ressourcen wie Pods und Bereitstellungen werden logisch in einen Namespace gruppiert.Kubernetes resources, such as pods and Deployments, are logically grouped into a namespace. Diese Gruppierungen ermöglichen es, einen AKS-Cluster logisch zu unterteilen und den Zugriff zum Erstellen, Anzeigen oder Verwalten von Ressourcen einzuschränken.These groupings provide a way to logically divide an AKS cluster and restrict access to create, view, or manage resources. Sie können Namespaces erstellen, um beispielsweise Unternehmensgruppen voneinander zu trennen.You can create namespaces to separate business groups, for example. Benutzer können nur mit den Ressourcen innerhalb der ihnen zugewiesenen Namespaces interagieren.Users can only interact with resources within their assigned namespaces.

Kubernetes-Namespaces zur logischen Unterteilung von Ressourcen und Anwendungen

Wenn Sie einen AKS-Cluster erstellen, stehen Ihnen folgende Namespaces zur Verfügung:When you create an AKS cluster, the following namespaces are available:

  • default: In diesem Namespace werden Pods und Bereitstellungen standardmäßig erstellt, wenn kein anderer Namespace angegeben wird.default - This namespace is where pods and deployments are created by default when none is provided. In kleineren Umgebungen können Sie Anwendungen direkt im Standardnamespace bereitstellen, ohne weitere logische Unterteilungen zu erstellen.In smaller environments, you can deploy applications directly into the default namespace without creating additional logical separations. Wenn Sie mit der Kubernetes-API interagieren, z.B. mit kubectl get pods, wird der Standardnamespace verwendet, wenn kein anderer Namespace angegeben wurde.When you interact with the Kubernetes API, such as with kubectl get pods, the default namespace is used when none is specified.
  • kube-system: In diesem Namespace befinden sich grundlegende Ressourcen, beispielsweise Netzwerkfeatures wie DNS und Proxy oder das Kubernetes-Dashboard.kube-system - This namespace is where core resources exist, such as network features like DNS and proxy, or the Kubernetes dashboard. In diesem Namespace stellen Sie in der Regel keine eigenen Anwendungen bereit.You typically don't deploy your own applications into this namespace.
  • kube-public: Dieser Namespace wird in der Regel nicht genutzt. Er kann jedoch für Ressourcen verwendet werden, die über den gesamten Cluster hinweg sichtbar sein sollen, und er kann von allen Benutzern angezeigt werden.kube-public - This namespace is typically not used, but can be used for resources to be visible across the whole cluster, and can be viewed by any user.

Weitere Informationen finden Sie unter Kubernetes-Namespaces.For more information, see Kubernetes namespaces.

Nächste SchritteNext steps

In diesem Artikel wurden einige der wichtigsten Kubernetes-Komponenten sowie deren Anwendung in AKS-Clustern beschrieben.This article covers some of the core Kubernetes components and how they apply to AKS clusters. Weitere Informationen zu den wesentlichen Konzepten von Kubernetes und AKS finden Sie in den folgenden Artikeln:For additional information on core Kubernetes and AKS concepts, see the following articles: