Exercice : Déployer une application sur votre cluster Azure Kubernetes Service
Dans cet exercice, déployez le site web de votre entreprise en tant qu’application de test sur Azure Kubernetes Service (AKS). Le site web est un site web statique avec une pile de technologies sous-jacentes constituée de HTML, CSS et JavaScript. Il ne reçoit pas autant de demandes que les autres services et nous fournit un moyen sûr de tester les options de déploiement.
Notes
Si vous voulez explorer plus en détails le code source de l’application web, il est disponible dans ce dépôt GitHub. En outre, cet exemple d’application sera déployé uniquement dans un pool de nœuds Linux.
Important
Vous avez besoin de votre propre abonnement Azure pour exécuter cet exercice et des frais pourraient vous être facturés. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Créer un manifeste de déploiement
Vous créez un fichier manifeste de déploiement pour déployer votre application. Le fichier manifeste vous permet de définir le type de ressource que vous voulez déployer et tous les détails associés à la charge de travail.
Kubernetes regroupe les conteneurs en structures logiques appelées « pods », qui n’ont aucune intelligence. Les déploiements ajoutent l’intelligence manquante pour créer votre application. Nous allons créer un fichier de déploiement.
Connectez-vous à Azure Cloud Shell.
Dans Cloud Shell, créez un fichier manifeste pour le déploiement Kubernetes appelé
deployment.yaml
en utilisant l’éditeur intégré.touch deployment.yaml
Ouvrez l’éditeur intégré dans Cloud Shell en entrant
code .
Ouvrez le fichier
deployment.yaml
et ajoutez la section de code YAML suivante.# deployment.yaml apiVersion: apps/v1 # The API resource where this workload resides kind: Deployment # The kind of workload we're creating metadata: name: contoso-website # This will be the name of the deployment
Dans ce code, vous avez ajouté les deux premières clés pour indiquer à Kubernetes les éléments
apiVersion
etkind
du manifeste que vous créez.name
représente le nom du déploiement. Utilisez-le pour identifier et interroger les informations du déploiement quand vous utilisezkubectl
.Conseil
Pour plus d’informations sur
apiVersion
et les valeurs à placer dans cette clé, consultez la documentation officielle de Kubernetes. Vous trouverez un lien à la fin de ce module.Un déploiement encapsule un pod. Vous utilisez un modèle de définition pour définir les informations du pod dans le fichier manifeste. Le modèle est placé dans le fichier manifeste sous la section de spécification du déploiement.
Mettez à jour le fichier
deployment.yaml
pour le faire correspondre au code YAML suivant.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: # Metadata for the pod labels: app: contoso-website
Les pods n’utilisent pas les mêmes noms que les déploiements. Le nom d’un pod est un mélange du nom de déploiement, auquel un ID aléatoire est ajouté à la fin.
Notez l’utilisation de la clé
labels
. Vous ajoutez la clélabels
pour permettre aux déploiements de rechercher et de regrouper des pods.Un pod encapsule un ou plusieurs conteneurs. Tous les pods ont une section de spécification qui vous permet de définir les conteneurs à l’intérieur de ce pod.
Mettez à jour le fichier
deployment.yaml
pour le faire correspondre au code YAML suivant.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: # Here we define all containers - name: contoso-website
La clé
containers
est un tableau de spécifications de conteneurs, car un pod peut avoir un ou plusieurs conteneurs. La spécification définit uneimage
, unname
, desresources
, desports
et d’autres informations importantes sur le conteneur.Tous les pods en cours d’exécution ont un nom qui suit le modèle
contoso-website-<UUID>
, où UUID est un ID généré pour identifier toutes les ressources de façon univoque.C’est une bonne pratique que de définir le minimum et le maximum de ressources que l’application est autorisée à utiliser dans le cluster. Vous utilisez la clé
resources
pour spécifier ces informations.Mettez à jour le fichier
deployment.yaml
pour le faire correspondre au code YAML suivant.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: # Minimum amount of resources requested cpu: 100m memory: 128Mi limits: # Maximum amount of resources requested cpu: 250m memory: 256Mi
Notez comment la section resource vous permet de spécifier la quantité minimale de ressources en tant que demande et la quantité maximale de ressources en tant que limite.
La dernière étape consiste à définir les ports que ce conteneur expose en externe via la clé
ports
. La cléports
est un tableau d’objets, ce qui signifie qu’un conteneur dans un pod peut exposer plusieurs ports avec plusieurs noms.Mettez à jour le fichier
deployment.yaml
pour le faire correspondre au code YAML suivant.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 # This container exposes port 80 name: http # We named that port "http" so we can refer to it later
Notez comment vous nommez le port avec la clé
name
. Le nommage des ports vous permet de changer le port exposé sans changer les fichiers qui référencent ce port.Enfin, ajoutez une section selector pour définir les charges de travail que le déploiement gère. La clé
selector
est placée dans la section de spécification du déploiement du fichier manifeste. Utilisez la clématchLabels
pour lister les étiquettes de tous les pods gérées par le déploiement.Mettez à jour le fichier
deployment.yaml
pour le faire correspondre au code YAML suivant.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: selector: # Define the wrapping strategy matchLabels: # Match all pods with the defined labels app: contoso-website # Labels follow the `name: value` template template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: http
Notes
Dans un cluster AKS qui a plusieurs pools de nœuds (Linux et Windows), le fichier manifeste de déploiement listé précédemment définit également un
nodeSelector
pour indiquer à votre cluster AKS d’exécuter le pod de l’exemple d’application sur un nœud qui peut exécuter des conteneurs Linux.Les nœuds Linux ne peuvent pas exécuter des conteneurs Windows, et inversement.
Enregistrez le fichier manifeste et fermez l’éditeur.
Appliquer le manifeste
Dans Cloud Shell, exécutez la commande
kubectl apply
pour envoyer le manifeste de déploiement à votre cluster.kubectl apply -f ./deployment.yaml
La commande doit produire un résultat similaire à l’exemple suivant.
deployment.apps/contoso-website created
Exécutez la commande
kubectl get deploy
pour vérifier si le déploiement a réussi.kubectl get deploy contoso-website
La commande doit produire un tableau similaire à l’exemple suivant.
NAME READY UP-TO-DATE AVAILABLE AGE contoso-website 0/1 1 0 16s
Exécutez la commande
kubectl get pods
pour vérifier si le pod est en cours d’exécution.kubectl get pods
La commande doit produire un tableau similaire à l’exemple suivant.
NAME READY STATUS RESTARTS AGE contoso-website-7c58c5f699-r79mv 1/1 Running 0 63s