Aidez à améliorer cette page
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Vous souhaitez contribuer à ce guide de l'utilisateur ? Choisissez le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tout le monde.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déployer un exemple d'application sous Linux
Dans cette rubrique, vous allez déployer un exemple d'application sur votre cluster sur des nœuds Linux.
Prérequis
-
Un existant Kubernetes cluster avec au moins un nœud. Si vous ne possédez pas de cluster Amazon EKS existant, vous pouvez en déployer un à l'aide de l'un des guides fournis dansMise en route avec Amazon EKS.
-
Kubectl
installé sur votre ordinateur. Pour de plus amples informations, veuillez consulter Configurez kubectl et eksctl. -
Kubectl
configuré pour communiquer avec votre cluster. Pour de plus amples informations, veuillez consulter Connexion kubectl à un cluster EKS en créant un kubeconfig dans le fichier. -
Si vous prévoyez de déployer votre charge de travail d'exemple sur Fargate, vous devez disposer d'un profil Fargate existant qui inclut le même espace de noms créé dans ce didacticiel, à savoir
eks-sample-app
, à moins que vous ne changiez le nom. Si vous avez créé un cluster avec l'un des guidesMise en route avec Amazon EKS, vous devrez créer un nouveau profil ou ajouter l'espace de noms à votre profil existant, car le profil créé dans les guides de démarrage ne spécifie pas l'espace de noms utilisé dans ce didacticiel. Votre VPC doit également disposer d'au moins un sous-réseau privé.
Bien que de nombreuses variables soient modifiables dans les étapes suivantes, nous vous recommandons de ne modifier les valeurs des variables qu'aux endroits spécifiés. Une fois que vous aurez une meilleure compréhension de Kubernetes Pods, déploiements et services, vous pouvez essayer de modifier d'autres valeurs.
Création d’un espace de noms
Un espace de noms vous permet de regrouper des ressources dans Kubernetes. Pour plus d'informations, consultez la section Espaces de nomsnamespace
indiquée dans votre section Définir les pods qui utilisent AWS Fargate au lancement est. eks-sample-app
kubectl create namespace eks-sample-app
Création d'un déploiement Kubernetes
Créez un Kubernetes déploiement. Cet exemple de déploiement extrait une image de conteneur d'un référentiel public et déploie trois répliques (individuelles) Pods) de celui-ci à votre cluster. Pour en savoir plus, consultez la section Déploiements
-
Enregistrez le contenu suivant dans un fichier nommé
eks-sample-deployment.yaml
. Les conteneurs de l'exemple d'application n'utilisent pas le stockage réseau, mais certaines applications en ont peut-être besoin. Pour de plus amples informations, veuillez consulter Stockez les données d'application pour votre cluster.-
Le
amd64
ouarm64
values
sous la clékubernetes.io/arch
signifient que l'application peut être déployée sur l'une ou l'autre architecture matérielle (si vous avez les deux dans votre cluster). Cela est possible car cette image est une image multi-architecture, mais toutes ne le sont pas. Vous pouvez déterminer l'architecture matérielle sur laquelle l'image est prise en charge en consultant les détails de l'imagedans le référentiel d'où vous l'extrayez. Lorsque vous déployez des images qui ne prennent pas en charge un type d'architecture matérielle ou sur lesquelles vous ne souhaitez pas que l'image soit déployée, supprimez ce type du manifeste. Pour plus d'informations, consultez la section Étiquettes, annotations et marques connues dans le Kubernetes . -
kubernetes.io/os: linux
nodeSelector
Cela signifie que si vous aviez Linux and Windows nœuds (par exemple) de votre cluster, l'image ne serait déployée que sur Linux nœuds. Pour plus d'informations, consultez la section Étiquettes, annotations et marques connues dans leKubernetes . 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
-
-
Appliquer le manifeste de déploiement à votre cluster.
kubectl apply -f eks-sample-deployment.yaml
Créer un service
Un service vous permet d'accéder à toutes les réplicas via une seule adresse IP ou un seul nom. Pour plus d'informations, consultez la section Service
-
Enregistrez le contenu suivant dans un fichier nommé
eks-sample-service.yaml
. Kubernetes attribue au service sa propre adresse IP accessible uniquement depuis le cluster. Pour accéder au service depuis l'extérieur de votre cluster, déployez l'AWS Load Balancer Controller pour équilibrer la charge du trafic d'application ou de réseau vers le service.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
-
Appliquer le manifeste du service à votre cluster.
kubectl apply -f eks-sample-service.yaml
Réviser les ressources créées
-
Affichez toutes les ressources présentes dans l'espace de noms
eks-sample-app
.kubectl get all -n eks-sample-app
L'exemple qui suit illustre un résultat.
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
Dans la sortie, vous voyez le service et le déploiement spécifiés dans l'exemple de manifestes déployés dans les étapes précédentes. Vous en voyez également trois Pods. Cela est dû au fait que
3
replicas
nous avons été spécifiés dans l'exemple de manifeste. Pour plus d'informations sur Pods, voir Podsdans le Kubernetes . Kubernetes crée automatiquement la replicaset
ressource, même si elle n'est pas spécifiée dans les exemples de manifestes. Pour plus d'informations surReplicaSets
, consultez ReplicaSetle Kubernetes . Note
Kubernetes conserve le nombre de répliques spécifiées dans le manifeste. S'il s'agissait d'un déploiement de production et que vous vouliez Kubernetes pour redimensionner horizontalement le nombre de répliques ou dimensionner verticalement les ressources de calcul pour le Pods, utilisez les déploiements de modules Scale avec Horizontal Pod Autoscaler et Adjust les ressources du pod avec Vertical Pod Autoscaler pour ce faire.
-
Affichez les détails du service déployé.
kubectl -n eks-sample-app describe service eks-sample-linux-service
L'exemple qui suit illustre un résultat.
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>
Dans la sortie précédente, la valeur pour
IP:
est une adresse IP unique accessible depuis n'importe quel nœud ou Pod au sein du cluster, mais il n'est pas accessible depuis l'extérieur du cluster. Les valeurs pourEndpoints
sont les adresses IP attribuées depuis votre VPC au Pods qui font partie du service. -
Consultez les détails de l'un des Pods répertorié dans la sortie lorsque vous avez consulté l'espace de noms lors d'une étape précédente. Remplacez
776d8f8fd8-78w66
par la valeur renvoyée pour l'un de vos Pods.kubectl -n eks-sample-app describe pod eks-sample-linux-deployment-65b7669776-m6qxz
Exemple de sortie abrégé
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 [...]
Dans la sortie précédente, la valeur pour
IP:
est une adresse IP unique attribuée à Pod à partir du bloc CIDR attribué au sous-réseau dans lequel se trouve le nœud. Si vous préférez attribuer Pods Adresses IP provenant de différents blocs CIDR, vous pouvez modifier le comportement par défaut. Pour de plus amples informations, veuillez consulter Déploiement Pods dans des sous-réseaux alternatifs avec mise en réseau personnalisée. Vous pouvez également constater que Kubernetes le planificateur a programmé le Pod sur leNode
avec l'adresse IP192.168.45.132
.Astuce
Plutôt que d'utiliser la ligne de commande, vous pouvez consulter de nombreux détails sur Pods, services, déploiements et autres Kubernetes ressources dans le AWS Management Console. Pour de plus amples informations, veuillez consulter Vue Kubernetes ressources dans le AWS Management Console.
Exécuter un shell sur un Pod
-
Exécutez un shell sur Pod que vous avez décrit à l'étape précédente, en le
65b7669776-m6qxz
remplaçant par l'identifiant de l'un de vos Pods.kubectl exec -it eks-sample-linux-deployment-65b7669776-m6qxz -n eks-sample-app -- /bin/bash
-
À partir du Pod shell, affichez la sortie du serveur Web qui a été installé avec votre déploiement lors d'une étape précédente. Vous devez uniquement spécifier le nom du service. Il est résolu à l'adresse IP du service par CoreDNS, qui est déployé avec un cluster Amazon EKS, par défaut.
curl eks-sample-linux-service
L'exemple qui suit illustre un résultat.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
À partir du Pod shell, consultez le serveur DNS pour Pod.
cat /etc/resolv.conf
L'exemple qui suit illustre un résultat.
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
Dans la sortie précédente,
10.100.0.10
est automatiquement attribué comme étantnameserver
pour tous Pods déployé sur le cluster. -
Déconnectez-vous du Pod en tapant
exit
. -
Une fois que vous avez terminé d'utiliser l'exemple d'application, vous pouvez supprimer l'espace de noms, le service et le déploiement de l'exemple à l'aide de la commande suivante.
kubectl delete namespace eks-sample-app
Étapes suivantes
Après avoir déployé l'exemple d'application, vous pouvez essayer certains des exercices suivants :