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.
Stellen Sie eine Beispielanwendung unter Linux bereit
In diesem Thema stellen Sie eine Beispielanwendung für Ihren Cluster auf Linux-Knoten bereit.
Voraussetzungen
-
Eine bestehende Kubernetes Cluster mit mindestens einem Knoten. Wenn Sie noch keinen EKS Amazon-Cluster haben, können Sie einen mithilfe einer der Anleitungen unter bereitstellenErste Schritte mit Amazon EKS.
-
Kubectl
auf Ihrem Computer installiert. Weitere Informationen finden Sie unter Richten Sie kubectl und eksctl ein. -
Kubectl
für die Kommunikation mit Ihrem Cluster konfiguriert. Weitere Informationen finden Sie unter Connect kubectl mit einem EKS Cluster, indem Sie eine kubeconfig-Datei erstellen. -
Wenn Sie vorhaben, Ihre Beispiel-Workload in Fargate bereitzustellen, müssen Sie über ein vorhandenes Fargate-Profil 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 einem der Anleitungen erstellt habenErste Schritte mit Amazon EKS, müssen Sie ein neues Profil erstellen oder den Namespace zu Ihrem vorhandenen Profil hinzufügen, da das in den Leitfäden für die ersten Schritte erstellte Profil den in diesem Tutorial verwendeten Namespace nicht spezifiziert. Sie VPC müssen außerdem ü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 ein besseres Verständnis von haben Kubernetes Pods, Bereitstellungen und Dienste können Sie mit der Änderung anderer Werte experimentieren.
Erstellen Sie einen Namespace
Ein Namespace ermöglicht es Ihnen, Ressourcen zu gruppieren Kubernetes. Weitere Informationen finden Sie unter Namespacesnamespace
„Definieren Sie, welche Pods AWS Fargate verwenden, wenn sie gestartet werden“ lautet. eks-sample-app
kubectl create namespace eks-sample-app
Erstellen Sie eine Kubernetes-Bereitstellung
Erstellen Sie ein Kubernetes Einsatz. Bei dieser Beispielbereitstellung wird ein Container-Image aus einem öffentlichen Repository abgerufen und drei Replikate (einzeln) bereitgestellt Pods) davon in Ihren Cluster. Weitere Informationen finden Sie unter Bereitstellungen
-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
eks-sample-deployment.yaml
. Die Container in der Beispielanwendung verwenden keinen Netzwerkspeicher, aber Sie haben möglicherweise Anwendungen, die dies benötigen. Weitere Informationen finden Sie unter Speichern Sie Anwendungsdaten für Ihren Cluster.-
Das
amd64
oderarm64
values
unter dem Schlüsselkubernetes.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 Hardwarearchitektur ermitteln, auf der das Image unterstützt wird, indem Sie sich die Image-Detailsim Repository ansehen, aus dem Sie es abrufen. Wenn Sie Images bereitstellen, die einen Hardwarearchitekturtyp nicht unterstützen oder für die das Image nicht bereitgestellt werden soll, entfernen Sie diesen Typ aus dem Manifest. Weitere Informationen finden Sie unter Bekannte Labels, Annotations and Taints im Kubernetes -Dokumentation. -
Das
kubernetes.io/os: linux
nodeSelector
heißt, wenn du Linux and Windows Knoten (zum Beispiel) in Ihrem Cluster, auf denen das Image nur bereitgestellt würde Linux Knoten. Weitere Informationen finden Sie unter Bekannte Labels, Annotations and Taintsim 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
-
-
Wenden Sie das Bereitstellungs-Manifest auf Ihren Cluster an.
kubectl apply -f eks-sample-deployment.yaml
Einen Service erstellen
Mit einem Service können Sie über eine einzige IP-Adresse oder einen einzigen Namen auf alle Replikate zugreifen. Weitere Informationen finden Sie unter Service
-
Speichern Sie die folgenden Inhalte in einer Datei namens
eks-sample-service.yaml
. Kubernetes weist dem Dienst 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 bereit, um den Anwendungs- oder Netzwerk-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
-
Wenden Sie das Service-Manifest auf Ihren Cluster an.
kubectl apply -f eks-sample-service.yaml
Überprüfen Sie die erstellten Ressourcen
-
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 wir im Beispielmanifest angegeben
3
replicas
wurden. Weitere Informationen zur Pods, siehe Podsin der Kubernetes -Dokumentation. Kubernetes erstellt die replicaset
Ressource automatisch, auch wenn sie nicht in den Beispielmanifesten angegeben ist. Weitere Informationen zuReplicaSets
finden Sie ReplicaSetin der 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 Kubernetes um die Anzahl der Replikate horizontal oder die Rechenressourcen für die vertikal zu skalieren Pods, verwenden Sie dazu die Optionen Pod-Bereitstellungen skalieren mit horizontalem Pod-Autoscaler und Pod-Ressourcen anpassen mit vertikalem Pod-Autoscaler.
-
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
IP:
ist der Wert für eine eindeutige IP-Adresse, die von jedem Knoten aus erreicht werden kann oder Pod innerhalb des Clusters, aber es kann nicht von außerhalb des Clusters erreicht werden. Die Werte fürEndpoints
sind IP-Adressen, die innerhalb Ihres VPC zugewiesen wurden Pods die Teil des Dienstes sind. -
Sehen Sie sich die Details eines der an Pods in der Ausgabe aufgeführt, als Sie sich den Namespace in einem vorherigen Schritt angesehen haben. Ersetzen
776d8f8fd8-78w66
mit dem zurückgegebenen Wert für einen Ihrer Pods.kubectl -n eks-sample-app describe pod eks-sample-linux-deployment-65b7669776-m6qxz
Verkü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
IP:
ist der Wert für eine eindeutige IP, die dem zugewiesen ist Pod aus dem CIDR Block, der dem Subnetz zugewiesen ist, in dem sich der Knoten befindet. Wenn Sie es vorziehen zuzuweisen Pods IP-Adressen aus verschiedenen CIDR Blöcken können Sie das Standardverhalten ändern. Weitere Informationen finden Sie unter Bereitstellen pods in alternativen Subnetzen mit benutzerdefiniertem Netzwerk. Sie können auch sehen, dass Kubernetes Der Scheduler hat das geplant Pod auf demNode
mit der IP-Adresse192.168.45.132
.Tipp
Anstatt die Befehlszeile zu verwenden, können Sie viele Details zu anzeigen Pods, Dienste, Bereitstellungen und andere Kubernetes Ressourcen in der AWS Management Console. Weitere Informationen finden Sie unter Kubernetes-Ressourcen anzeigen in der AWS Management Console.
Führen Sie eine Shell auf einem Pod aus
-
Führe eine Shell auf dem aus Pod die Sie im vorherigen Schritt beschrieben haben, ersetzen
65b7669776-m6qxz
mit der ID eines Ihrer Pods.kubectl exec -it eks-sample-linux-deployment-65b7669776-m6qxz -n eks-sample-app -- /bin/bash
-
Von der Pod Sehen Sie sich die Ausgabe des Webservers an, der in einem vorherigen Schritt mit Ihrer Bereitstellung installiert wurde. Sie müssen nur den Servicenamen angeben. Es wird wie folgt in die IP-Adresse des Dienstes aufgelöst CoreDNS, das standardmäßig mit einem EKS Amazon-Cluster bereitgestellt wird.
curl eks-sample-linux-service
Eine Beispielausgabe sieht wie folgt aus.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Aus dem Pod Shell, sehen Sie sich den DNS Server für den an Pod.
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
10.100.0.10
wird automatisch der Wertnameserver
für alle zugewiesen Pods auf dem Cluster bereitgestellt. -
Trennen Sie die Verbindung zum Pod durch Tippen
exit
. -
Wenn Sie mit der Beispielanwendung fertig sind, können Sie den Beispiel-Namespace, den Dienst und die Bereitstellung mit dem folgenden Befehl entfernen.
kubectl delete namespace eks-sample-app
Nächste Schritte
Nachdem Sie die Beispielanwendung bereitgestellt haben, möchten Sie vielleicht einige der folgenden Übungen ausprobieren: