

 **Unterstützung für die Verbesserung dieser Seite beitragen** 

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link **Diese Seite bearbeiten auf**, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Eine Beispielanwendung in Linux bereitstellen
<a name="sample-deployment"></a>

In diesem Thema stellen Sie eine Beispielanwendung auf Ihrem Cluster in Linux-Knoten bereit.

## Voraussetzungen
<a name="_prerequisites"></a>
+ Ein vorhandener Kubernetes-Cluster mit mindestens einem Knoten. Wenn Sie noch keinen vorhandenen Amazon-EKS-Cluster haben, können Sie einen mit einem der Anleitungen in [Erste Schritte mit Amazon EKS](getting-started.md) bereitstellen.
+  `Kubectl` auf Ihrem Computer installiert. Weitere Informationen finden Sie unter [`kubectl` und `eksctl` einrichten](install-kubectl.md).
+  `Kubectl` für die Kommunikation mit Ihrem Cluster konfiguriert. Weitere Informationen finden Sie unter [kubectl mit einem EKS-Cluster durch Erstellen einer kubeconfig-Datei verbinden](create-kubeconfig.md).
+ Wenn Sie vorhaben, Ihre Beispiel-Workload in Fargate bereitzustellen, müssen Sie über ein vorhandenes [Fargate-Profil](fargate-profile.md) verfügen, das denselben in diesem Tutorial erstellten Namespace enthält, nämlich `eks-sample-app`, es sei denn, Sie ändern den Namen. Wenn Sie einen Cluster mit einer der Anleitungen erstellt haben[Erste Schritte mit Amazon EKS](getting-started.md), müssen Sie ein neues Profil erstellen oder den Namespace zu Ihrem vorhandenen Profil hinzufügen, da das in den Handbüchern für die ersten Schritte erstellte Profil den in diesem Tutorial verwendeten Namespace nicht spezifiziert. Ihre VPC muss auch über mindestens ein privates Subnetz verfügen.

Obwohl viele Variablen in den folgenden Schritten veränderbar sind, empfehlen wir, Variablenwerte nur zu ändern, wo angegeben. Sobald Sie Kubernetes-Pods, Bereitstellungen und Services besser verstanden haben, können Sie mit dem Ändern anderer Werte experimentieren.

## Namespaces erstellen
<a name="_create_a_namespace"></a>

Ein Namespace ermöglicht es Ihnen, Ressourcen in Kubernetes zu gruppieren. Weitere Informationen finden Sie unter [Namespaces](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) in der Kubernetes-Dokumentation. Wenn Sie planen, Ihre Beispielanwendung zur [Vereinfachung der Rechenverwaltung mit AWS Fargate](fargate.md) bereitzustellen, stellen Sie sicher, dass der Wert für `namespace` „[Definieren Sie, welche Pods AWS Fargate verwenden, wenn sie gestartet](fargate-profile.md) werden“ lautet. `eks-sample-app`

```
kubectl create namespace eks-sample-app
```

## Erstellen Sie eine Kubernetes-Bereitstellung.
<a name="_create_a_kubernetes_deployment"></a>

Erstellen Sie eine Kubernetes-Bereitstellung. Diese Beispiel-Bereitstellung ruft ein Container-Image aus einem öffentlichen Repository ab und stellt drei Replikate (individuelle Pods) davon in Ihrem Cluster bereit. Weitere Informationen finden Sie unter [Bereitstellungen](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) in der Kubernetes-Dokumentation.

1. Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen `eks-sample-deployment.yaml`. Die Container in der Beispielanwendung verwenden keinen Netzwerkspeicher, aber möglicherweise haben Sie Anwendungen, die dies benötigen. Weitere Informationen finden Sie unter [Verwendung von Anwendungsdatenspeichern für Ihren Cluster](storage.md).
   + Das `amd64` oder `arm64` `values` unter dem Schlüssel `kubernetes.io/arch` bedeutet, dass die Anwendung in einer der beiden Hardwarearchitekturen bereitgestellt werden kann (wenn Sie beide in Ihrem Cluster haben). Dies ist möglich, weil dieses Image ein Multi-Architektur-Image ist, aber das sind nicht alle. Sie können die Hardware-Architektur bestimmen, auf der das Image unterstützt wird, indem Sie die [Image-Details](https://gallery.ecr.aws/nginx/nginx) im Repository anzeigen, aus dem Sie es abrufen. Wenn Sie Images bereitstellen, die keinen Hardware-Architektur-Typ unterstützen oder an die das Image nicht bereitgestellt werden soll, entfernen Sie diesen Typ aus dem Manifest. Weitere Informationen finden Sie unter [Bekannte Labels, Anmerkungen und Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) in der Kubernetes-Dokumentation.
   + Der Eintrag `kubernetes.io/os: linux` `nodeSelector` bedeutet, dass, wenn Sie beispielsweise Windows- und Linux-Knoten in Ihrem Cluster hätten, das Image nur auf Linux-Knoten bereitgestellt würde. Weitere Informationen finden Sie unter [Bekannte Labels, Anmerkungen und Taints](https://kubernetes.io/docs/reference/labels-annotations-taints/) in der Kubernetes-Dokumentation.

     ```
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: eks-sample-linux-deployment
       namespace: eks-sample-app
       labels:
         app: eks-sample-linux-app
     spec:
       replicas: 3
       selector:
         matchLabels:
           app: eks-sample-linux-app
       template:
         metadata:
           labels:
             app: eks-sample-linux-app
         spec:
           affinity:
             nodeAffinity:
               requiredDuringSchedulingIgnoredDuringExecution:
                 nodeSelectorTerms:
                 - matchExpressions:
                   - key: kubernetes.io/arch
                     operator: In
                     values:
                     - amd64
                     - arm64
           containers:
           - name: nginx
             image: public.ecr.aws/nginx/nginx:1.23
             ports:
             - name: http
               containerPort: 80
             imagePullPolicy: IfNotPresent
           nodeSelector:
             kubernetes.io/os: linux
     ```

1. Wenden Sie das Bereitstellungs-Manifest auf Ihren Cluster an.

   ```
   kubectl apply -f eks-sample-deployment.yaml
   ```

## Einen Service erstellen
<a name="_create_a_service"></a>

Mit einem Service können Sie über eine einzige IP-Adresse oder einen einzigen Namen auf alle Replikate zugreifen. Weitere Informationen dazu finden Sie unter [Service](https://kubernetes.io/docs/concepts/services-networking/service/) in der Kubernetes-Dokumentation. Obwohl dies nicht in der Beispielanwendung implementiert ist, empfehlen wir Ihnen, AWS Kubernetes-Dienstkonten für Ihre Pods zu erstellen und diese mit IAM-Konten zu verknüpfen, falls Sie über Anwendungen verfügen, die mit anderen Diensten interagieren müssen. AWS Durch die Angabe von Dienstkonten verfügen Ihre Pods nur über die Mindestberechtigungen, die Sie für die Interaktion mit anderen Diensten angeben. Weitere Informationen finden Sie unter [IAM-Rollen für Servicekonten](iam-roles-for-service-accounts.md).

1. Speichern Sie die folgenden Inhalte in einer Datei namens `eks-sample-service.yaml`. Kubernetes weist dem Service eine eigene IP-Adresse zu, auf die nur innerhalb des Clusters zugegriffen werden kann. Um von außerhalb des Clusters auf den Service zuzugreifen, stellen Sie den [AWS Load Balancer Controller](aws-load-balancer-controller.md) bereit, um den [Anwendungs](alb-ingress.md)- oder [Netzwerk](network-load-balancing.md)-Datenverkehr an den Service auszugleichen.

   ```
   apiVersion: v1
   kind: Service
   metadata:
     name: eks-sample-linux-service
     namespace: eks-sample-app
     labels:
       app: eks-sample-linux-app
   spec:
     selector:
       app: eks-sample-linux-app
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
   ```

1. Wenden Sie das Service-Manifest auf Ihren Cluster an.

   ```
   kubectl apply -f eks-sample-service.yaml
   ```

## Erstellte Ressourcen überprüfen
<a name="sample-app-view-namespace"></a>

1. Zeigen Sie alle im `eks-sample-app`-Namespace vorhandenen Ressourcen an.

   ```
   kubectl get all -n eks-sample-app
   ```

   Eine Beispielausgabe sieht wie folgt aus.

   ```
   NAME                                               READY   STATUS    RESTARTS   AGE
   pod/eks-sample-linux-deployment-65b7669776-m6qxz   1/1     Running   0          27m
   pod/eks-sample-linux-deployment-65b7669776-mmxvd   1/1     Running   0          27m
   pod/eks-sample-linux-deployment-65b7669776-qzn22   1/1     Running   0          27m
   
   NAME                               TYPE         CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
   service/eks-sample-linux-service   ClusterIP    10.100.74.8     <none>        80/TCP    32m
   
   NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
   deployment.apps/eks-sample-linux-deployment 3/3     3            3           27m
   
   NAME                                                      DESIRED   CURRENT   READY   AGE
   replicaset.apps/eks-sample-linux-deployment-776d8f8fd8    3         3         3       27m
   ```

   In der Ausgabe sehen Sie den Service und die Bereitstellung, die in den Beispielmanifesten, der vorherigen Schritte, angegeben wurden. Sie sehen auch drei Pods. Dies liegt daran, dass `3` `replicas` im Beispielmanifest angegeben wurden. Weitere Informationen zu Pods finden Sie unter [Pods](https://kubernetes.io/docs/concepts/workloads/pods/pod/) in der Kubernetes-Dokumentation. Kubernetes erstellt automatisch die `replicaset`-Ressource, obwohl sie nicht in den Beispiel-Manifesten angegeben ist. Weitere Informationen zu finden Sie [ReplicaSet](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/)in der `ReplicaSets` Kubernetes-Dokumentation.
**Anmerkung**  
Kubernetes behält die Anzahl der Replikate bei, die im Manifest angegeben sind. Wenn es sich um eine Produktionsbereitstellung handelt und Sie möchten, dass Kubernetes die Anzahl der Replikate horizontal skaliert oder die Rechenressourcen für die Pods vertikal skaliert, verwenden Sie dazu die Optionen [Pod-Bereitstellungen mit horizontalem Pod-Autoscaler skalieren](horizontal-pod-autoscaler.md) und [Pod-Ressourcen mit vertikalem Pod-Autoscaler anpassen](vertical-pod-autoscaler.md).

1. Zeigen Sie die Details des bereitgestellten Services an.

   ```
   kubectl -n eks-sample-app describe service eks-sample-linux-service
   ```

   Eine Beispielausgabe sieht wie folgt aus.

   ```
   Name:              eks-sample-linux-service
   Namespace:         eks-sample-app
   Labels:            app=eks-sample-linux-app
   Annotations:       <none>
   Selector:          app=eks-sample-linux-app
   Type:              ClusterIP
   IP Families:       <none>
   IP:                10.100.74.8
   IPs:               10.100.74.8
   Port:              <unset>  80/TCP
   TargetPort:        80/TCP
   Endpoints:         192.168.24.212:80,192.168.50.185:80,192.168.63.93:80
   Session Affinity:  None
   Events:            <none>
   ```

   In der vorherigen Ausgabe ist der Wert für `IP:` eine eindeutige IP-Adresse, die von jedem Knoten oder Pod innerhalb des Clusters aus erreicht werden kann, jedoch nicht von außerhalb des Clusters. Die Werte für `Endpoints` sind IP-Adressen, die innerhalb Ihrer VPC den Pods zugewiesen werden, die Teil des Services sind.

1. Zeigen Sie die Details eines der in der Ausgabe aufgeführten Pods an, wenn Sie in einem vorherigen Schritt den [Namespace angezeigt haben](#sample-app-view-namespace). *776d8f8fd8-78w66*Ersetzen Sie es durch den Wert, der für einen Ihrer Pods zurückgegeben wurde.

   ```
   kubectl -n eks-sample-app describe pod eks-sample-linux-deployment-65b7669776-m6qxz
   ```

   Gekürzte Beispielausgabe

   ```
   Name:         eks-sample-linux-deployment-65b7669776-m6qxz
   Namespace:    eks-sample-app
   Priority:     0
   Node:         ip-192-168-45-132.us-west-2.compute.internal/192.168.45.132
   [...]
   IP:           192.168.63.93
   IPs:
     IP:           192.168.63.93
   Controlled By:  ReplicaSet/eks-sample-linux-deployment-65b7669776
   [...]
   Conditions:
     Type              Status
     Initialized       True
     Ready             True
     ContainersReady   True
     PodScheduled      True
   [...]
   Events:
     Type    Reason     Age    From                                                 Message
     ----    ------     ----   ----                                                 -------
     Normal  Scheduled  3m20s  default-scheduler                                    Successfully assigned eks-sample-app/eks-sample-linux-deployment-65b7669776-m6qxz to ip-192-168-45-132.us-west-2.compute.internal
   [...]
   ```

   In der vorherigen Ausgabe ist der Wert für `IP:` eine eindeutige IP, die dem Pod aus dem CIDR-Block zugewiesen wird, der dem Subnetz zugewiesen ist, in dem sich der Knoten befindet. Wenn Sie es vorziehen, Pods IP-Adressen aus verschiedenen CIDR-Blöcken zuzuweisen, können Sie das Standardverhalten ändern. Weitere Informationen finden Sie unter [Bereitstellung von Pods in alternativen Subnetzen mit benutzerdefiniertem Netzwerk](cni-custom-network.md). Sie können auch sehen, dass der Kubernetes-Scheduler den Pod auf dem `Node` mit der IP-Adresse *192.168.45.132*. geplant hat.
**Tipp**  
Anstatt die Befehlszeile zu verwenden, können Sie viele Details zu Pods, Services, Bereitstellungen und anderen Kubernetes-Ressourcen in der AWS-Managementkonsole anzeigen. Weitere Informationen finden Sie unter [Kubernetes-Ressourcen anzeigen in der AWS-Managementkonsole](view-kubernetes-resources.md).

## Shell in einem Pod ausführen
<a name="_run_a_shell_on_a_pod"></a>

1. Führen Sie eine Shell auf dem Pod aus, die Sie im vorherigen Schritt beschrieben haben, und *65b7669776-m6qxz* ersetzen Sie sie durch die ID eines Ihrer Pods.

   ```
   kubectl exec -it eks-sample-linux-deployment-65b7669776-m6qxz -n eks-sample-app -- /bin/bash
   ```

1. Zeigen Sie in der Pod-Shell die Ausgabe des Web-Servers an, der in einem vorherigen Schritt mit Ihrer Bereitstellung installiert wurde. Sie müssen nur den Servicenamen angeben. Er wird von CoreDNS, das mit einem Amazon-EKS-Cluster bereitgestellt wird, standardmäßig in die IP-Adresse des Services aufgelöst.

   ```
   curl eks-sample-linux-service
   ```

   Eine Beispielausgabe sieht wie folgt aus.

   ```
   <!DOCTYPE html>
   <html>
   <head>
   <title>Welcome to nginx!</title>
   [...]
   ```

1. Zeigen Sie in der Pod-Shell den DNS-Server für den Pod an.

   ```
   cat /etc/resolv.conf
   ```

   Eine Beispielausgabe sieht wie folgt aus.

   ```
   nameserver 10.100.0.10
   search eks-sample-app.svc.cluster.local svc.cluster.local cluster.local us-west-2.compute.internal
   options ndots:5
   ```

   In der vorherigen Ausgabe wird `10.100.0.10` automatisch als `nameserver` für alle Pods zugewiesen, die im Cluster bereitgestellt werden.

1. Trennen Sie die Verbindung mit dem Pod, indem Sie `exit` eingeben.

1. Wenn Sie die Beispielanwendung nicht mehr benötigen, können Sie den Beispiel-Namespace, den Service und die Bereitstellung mit dem folgenden Befehl entfernen.

   ```
   kubectl delete namespace eks-sample-app
   ```

## Nächste Schritte
<a name="sample-deployment-next-steps"></a>

Nachdem Sie die Beispielanwendung bereitgestellt haben, können Sie einige der folgenden Übungen ausprobieren:
+  [Anwendungen und HTTP-Datenverkehr mit Application Load Balancers weiterleiten](alb-ingress.md) 
+  [Weiterleitung von TCP- und UDP-Datenverkehr mit Network Load Balancers](network-load-balancing.md) 