Démarrage rapide : déployer un cluster AKS (Azure Kubernetes Service) avec Azure PowerShell
AKS (Azure Kubernetes Service) est un service Kubernetes managé qui vous permet de déployer et de gérer rapidement des clusters. Dans ce guide de démarrage rapide, vous :
- Déployez un cluster AKS à l’aide d’Azure PowerShell.
- Exécutez un exemple d’application multiconteneur avec un groupe de microservices et de serveurs web frontaux simulant un scénario de vente au détail.
Remarque
Dans cet article, vous trouverez les étapes à suivre pour déployer rapidement un cluster AKS. Les paramètres par défaut sont utilisés à des fins d'évaluation uniquement. Avant de déployer un cluster prêt pour la production, nous vous recommandons de vous familiariser avec notre architecture de référence de base pour prendre en compte la façon dont elle s’aligne sur vos besoins métier.
Avant de commencer
Cet article suppose une compréhension élémentaire des concepts liés à Kubernetes. Pour plus d’informations, consultez Concepts de base de Kubernetes pour AKS (Azure Kubernetes Service).
-
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Pour faciliter l’utilisation, essayez l’environnement PowerShell dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Azure Cloud Shell.
Si vous souhaitez exécuter PowerShell localement, installez le module Az PowerShell et connectez-vous à votre compte Azure au moyen de la cmdlet Connect-AzAccount. Assurez-vous d’exécuter les commandes avec des privilèges administratifs. Pour plus d’informations, consultez l’article Installation et configuration d’Azure PowerShell.
Veillez à ce que l’identité que vous utilisez pour créer votre cluster dispose des autorisations minimales appropriées. Pour plus d’informations sur l’accès et l’identité pour AKS, consultez Options d’accès et d’identité pour Kubernetes Azure Service (AKS).
Si vous avez plusieurs abonnements Azure, définissez l’abonnement à utiliser pour le démarrage rapide en appelant la cmdlet Set-AzContext. Pour obtenir plus d’informations, consultez Gérer les abonnements Azure avec Azure PowerShell.
Créer un groupe de ressources
Un groupe de ressources Azure est un groupe logique dans lequel des ressources Azure sont déployées et gérées. Lorsque vous créez un groupe de ressources, vous êtes invité à spécifier un emplacement. Cet emplacement est l'emplacement de stockage des métadonnées de votre groupe de ressources et l'endroit où vos ressources s'exécutent dans Azure si vous ne spécifiez pas une autre région lors de la création de la ressource.
L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement eastus.
Créez un groupe de ressources à l’aide de la cmdlet
New-AzResourceGroup
.New-AzResourceGroup -Name myResourceGroup -Location eastus
L’exemple de sortie suivant montre la création réussie du groupe de ressources :
ResourceGroupName : myResourceGroup Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup
Créer un cluster AKS
Pour créer un cluster AKS, utiliser la cmdlet New-AzAksCluster
. L’exemple suivant crée un cluster nommé myAKSCluster avec un nœud et active une identité managée affectée par le système.
New-AzAksCluster -ResourceGroupName myResourceGroup `
-Name myAKSCluster `
-NodeCount 1 `
-EnableManagedIdentity `
-GenerateSshKey
Au bout de quelques minutes, la commande se termine et retourne des informations sur le cluster.
Remarque
Lorsque vous créez un cluster AKS, un deuxième groupe de ressources appelé groupe de ressources de nœud est automatiquement créé pour stocker les ressources AKS. Pour plus d’informations, consultez groupe de ressources de nœud. Lorsque vous supprimez le groupe de ressources du cluster AKS, le groupe de ressources de nœud est également supprimé. Vous constatez également qu’un groupe de ressources NetworkWatcherRG est créé par défaut. Ce groupe de ressources est utilisé par Azure Network Watcher pour stocker les données de surveillance. Vous pouvez ignorer ce groupe de ressources en toute sécurité. Pour plus d’informations, consultez Activer ou désactiver Azure Network Watcher.
Se connecter au cluster
Pour gérer un cluster Kubernetes, utilisez kubectl, le client de ligne de commande Kubernetes. Si vous utilisez Azure Cloud Shell, kubectl
est déjà installé. Pour installer kubectl
localement, appelez la cmdlet Install-AzAksCliTool
.
Configurez
kubectl
afin de vous connecter à votre cluster Kubernetes avec la cmdletImport-AzAksCredential
. Cette commande télécharge les informations d’identification et configure l’interface CLI Kubernetes pour les utiliser.Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
Pour vérifier la connexion à votre cluster, exécutez la commande
kubectl get
. Cette commande renvoie la liste des nœuds de cluster.kubectl get nodes
L’exemple de sortie suivant montre le nœud unique créé au cours des étapes précédentes. Assurez-vous que l’état du nœud est Prêt.
NAME STATUS ROLES AGE VERSION aks-nodepool1-11853318-vmss000000 Ready agent 2m26s v1.27.7
Déployer l’application
Pour déployer l'application, vous utilisez un fichier manifeste pour créer tous les objets nécessaires à l'exécution de l'application AKS Store. Un fichier manifeste Kubernetes définit un état souhaité d’un cluster, notamment les images conteneur à exécuter. Le manifeste inclut les déploiements et services Kubernetes suivants :
- Vitrine : application web permettant aux clients d’afficher les produits et de passer des commandes.
- Service de produit : affiche les informations sur le produit.
- Service de commande : passe des commandes.
- Rabbit MQ : file d’attente de messages pour une file d’attente de commandes.
Remarque
Nous ne recommandons pas l'exécution de conteneurs avec état, comme Rabbit MQ, sans stockage persistant pour la production. Ils sont utilisés ici par souci de simplicité, mais nous vous recommandons d’utiliser des services gérés, tels qu’Azure CosmosDB ou Azure Service Bus.
Créez un fichier nommé
aks-store-quickstart.yaml
et copiez-y le manifeste suivant :apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer
Pour obtenir une décomposition des fichiers manifeste YAML, consultez Déploiements et manifestes YAML.
Si vous créez et que vous enregistrez le fichier YAML localement, vous pouvez charger le fichier manifeste dans votre répertoire par défaut dans CloudShell en sélectionnant le bouton Charger/télécharger des fichiers, puis en sélectionnant le fichier dans votre système de fichiers local.
Déployez l’application en tirant parti de la commande kubectl apply et spécifiez le nom de votre manifeste YAML.
kubectl apply -f aks-store-quickstart.yaml
L'exemple de sortie suivant présente les déploiements et services :
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Test de l’application
Quand l’application s’exécute, un service Kubernetes expose le front-end de l’application sur Internet. L’exécution de ce processus peut prendre plusieurs minutes.
Vérifiez l’état des pods déployés à l’aide de la commande kubectl get pods. Assurez-vous que tous les pods sont
Running
avant de continuer.kubectl get pods
Recherchez une adresse IP publique pour l'application de vitrine. Surveillez la progression avec la commande kubectl get service et l’argument
--watch
.kubectl get service store-front --watch
La sortie EXTERNAL-IP pour le service
store-front
indique initialement qu'il est en attente :NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
Quand l’adresse EXTERNAL-IP passe de l’état pending à une adresse IP publique réelle, utilisez
CTRL-C
pour arrêter le processus de surveillancekubectl
.L’exemple de sortie suivant montre une adresse IP publique valide affectée au service :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
Ouvrez un navigateur web à l'adresse IP externe de votre service pour voir l'application Azure Store en action.
Supprimer des ressources
Pour éviter les frais Azure, si vous ne prévoyez pas de suivre le Tutoriel AKS, nettoyez vos ressources inutiles. Supprimez le groupe de ressources, le service de conteneur et toutes les ressources associées en appelant la cmdlet Remove-AzResourceGroup
.
Remove-AzResourceGroup -Name myResourceGroup
Remarque
Le cluster AKS a été créé avec une identité managée affectée par le système (option d’identité par défaut utilisée dans ce guide de démarrage rapide), cette identité est gérée par la plateforme et ne nécessite pas de suppression.
Étapes suivantes
Dans ce Démarrage rapide, vous avez déployé un cluster Kubernetes dans lequel vous avez ensuite déployé une application de plusieurs conteneurs. Cet exemple d’application est fourni à des fins de version de démonstration uniquement et ne représente pas toutes les meilleures pratiques pour les applications Kubernetes. Pour obtenir des conseils sur la création de solutions complètes avec AKS pour la production, consultez Conseils pour les solutions AKS.
Pour en savoir plus sur AKS et parcourir l’exemple complet allant du code au déploiement, passez au tutoriel sur le cluster Kubernetes.
Azure Kubernetes Service