Partager via


Démarrage rapide : Déployer un cluster Azure Kubernetes Service (AKS) avec Flatcar Container Linux pour AKS (préversion) à l’aide d’Azure CLI

Déployer sur Azure

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 apprenez à :

  • Créez un cluster AKS à l’aide de Flatcar Container Linux pour AKS (préversion).
  • Déployer un cluster AKS dans le portail Azure.
  • Exécutez un exemple d’application multiconteneur avec un groupe de microservices et de frontaux web qui simulent un scénario de vente au détail.

Note

Cet article inclut les étapes à suivre pour déployer un cluster avec des paramètres par défaut uniquement à des fins d’évaluation. 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

Ce guide de démarrage rapide 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 de compte Azure, créez un compte gratuit avant de commencer.

Inscrire des fournisseurs de ressources

Vous devrez peut-être inscrire des fournisseurs de ressources dans votre abonnement Azure. Par exemple, Microsoft.ContainerService est nécessaire.

Vérifiez l’état de l’inscription à l’aide de la az provider show commande.

az provider show --namespace Microsoft.ContainerService --query registrationState

Si nécessaire, inscrivez le fournisseur de ressources à l’aide de la commande az provider register .

az provider register --namespace Microsoft.ContainerService

Installer l’extension aks-preview

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les versions d'essai sont fournies « en l’état » et « selon disponibilité », et elles sont exclues des contrats de niveau de service et de la garantie limitée. Les versions préliminaires AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Par conséquent, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

  1. Installez l’extension aks-preview Azure CLI en utilisant la commande az extension add.

    az extension add --name aks-preview
    
  2. Mettez à jour vers la dernière version de l’extension à l’aide de la commande az extension update. Flatcar Container Linux nécessite un minimum de 18.0.0b42.

    az extension update --name aks-preview
    

Inscrire l’indicateur de fonctionnalité AKSFlatcarPreview

  1. Inscrivez l’indicateur de fonctionnalité AKSFlatcarPreview à l’aide de la commande az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "AKSFlatcarPreview"
    
  2. Vérifiez l’état de l’inscription en utilisant la commande az feature show. Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).

    az feature show --namespace Microsoft.ContainerService --name AKSFlatcarPreview
    
  3. Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Définir des variables d’environnement

  • Définissez les variables d’environnement suivantes à utiliser dans ce guide de démarrage rapide :
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"

La valeur de la RANDOM_ID variable est une valeur alphanumérique à six caractères ajoutée au groupe de ressources et au nom du cluster afin que les noms soient uniques. Utilisez la echo commande pour afficher les valeurs de variable comme echo $RANDOM_ID.

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.

  • Créez un groupe de ressources à l’aide de la commande az group create.
az group create \
  --name $MY_RESOURCE_GROUP_NAME \
  --location $REGION

Exemple de sortie :

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomIDValue>",
  "location": "westus",
  "managedBy": null,
  "name": "myAKSResourceGroup<randomIDValue>",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Créer un cluster AKS

  • Créez un cluster AKS avec la commande az aks create. L’exemple suivant crée un cluster avec un nœud et active une identité managée affectée par le système :
az aks create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $MY_AKS_CLUSTER_NAME \
  --os-sku flatcar \
  --node-count 1 \
  --generate-ssh-keys

Note

Lors de la création d’un nouveau cluster, un deuxième groupe de ressources est automatiquement créé par AKS pour stocker les ressources AKS. Pour plus d’informations, consultez Pourquoi deux groupes de ressources sont-ils créés avec AKS ?

Se connecter au cluster

Pour gérer un cluster Kubernetes, utilisez kubectl, le client de ligne de commande Kubernetes. kubectl est déjà installé si vous utilisez Azure Cloud Shell. Pour installer kubectl localement, utilisez la commande az aks install-cli .

  1. Configurez kubectl afin de vous connecter à votre cluster Kubernetes avec la commande az aks get-credentials. Cette commande télécharge les informations d’identification et configure l’interface CLI Kubernetes pour les utiliser.

    az aks get-credentials \
      --resource-group $MY_RESOURCE_GROUP_NAME \
      --name $MY_AKS_CLUSTER_NAME
    
  2. 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
    

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 :

Capture d’écran de l’architecture d’exemple Azure Store.

  • Vitrine : application web permettant aux clients d’afficher les produits et de passer des commandes.
  • Service produit : affiche les informations sur le produit.
  • Service de commande : passer des commandes.
  • RabbitMQ : file d’attente de messages pour une file d’attente de commandes.

Note

Nous ne recommandons pas l’exécution de conteneurs avec état, comme RabbitMQ, sans stockage persistant pour la production. Nous l’utilisons ici pour simplifier, mais nous vous recommandons d’utiliser des services managés, tels qu’Azure Cosmos DB ou Azure Service Bus.

  1. Créez un fichier nommé aks-store-quickstart.yaml et copiez-le dans le manifeste suivant.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: rabbitmq
    spec:
      serviceName: rabbitmq
      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
            startupProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 5
              initialDelaySeconds: 20
              periodSeconds: 10
            readinessProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 5
            livenessProbe:
              httpGet:
                path: /health
                port: 3000
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
          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
            env:
            - name: AI_SERVICE_URL
              value: "http://ai-service:5001/"
            resources:
              requests:
                cpu: 1m
                memory: 1Mi
              limits:
                cpu: 2m
                memory: 20Mi
            readinessProbe:
              httpGet:
                path: /health
                port: 3002
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 5
            livenessProbe:
              httpGet:
                path: /health
                port: 3002
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
    ---
    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
            startupProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 3
              initialDelaySeconds: 5
              periodSeconds: 5
            readinessProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 3
              initialDelaySeconds: 3
              periodSeconds: 3
            livenessProbe:
              httpGet:
                path: /health
                port: 8080
              failureThreshold: 5
              initialDelaySeconds: 3
              periodSeconds: 3
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: store-front
    spec:
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: store-front
      type: LoadBalancer
    

    Pour obtenir une répartition des fichiers manifeste YAML, consultez Déploiements et manifestes YAML.

    Si vous créez et enregistrez le fichier YAML localement, vous pouvez charger le fichier manifeste dans votre répertoire par défaut dans Cloud Shell en sélectionnant le bouton Charger/Télécharger des fichiers et en sélectionnant le fichier à partir de votre système de fichiers local.

  2. Déployez l’application à l’aide 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
    

Tester 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.

  1. Vérifiez l'état des pods déployés à l'aide de la commande kubectl get pods. Vérifiez que tous les pods sont Running avant de continuer.

    kubectl get pods
    
  2. Recherchez une adresse IP publique pour l’application store-front. 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 surveillance kubectl.

    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
    
  3. Ouvrez un navigateur web à l'adresse IP externe de votre service pour voir l'application Azure Store en action.

    Capture d’écran de l’exemple d’application AKS Store.

Supprimer le cluster

Si vous ne prévoyez pas de passer par le didacticiel AKS, nettoyez les ressources inutiles pour éviter les frais de facturation Azure.

  • Supprimez le groupe de ressources, le service conteneur et toutes les ressources associées à l’aide de la commande az group delete.

    az group delete --name $MY_RESOURCE_GROUP_NAME
    

    Le cluster AKS a été créé avec une identité managée affectée par le système, qui est l’option d’identité par défaut utilisée dans ce guide de démarrage rapide. La plateforme gère cette identité afin que vous n’ayez pas besoin de la supprimer manuellement.

Étapes suivantes

Dans ce démarrage rapide, vous avez déployé un cluster Kubernetes et ensuite une application simple multi-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 les instructions de solution AKS.

Pour en savoir plus sur AKS et effectuer un exemple complet de code à déploiement, passez au didacticiel sur le cluster Kubernetes.