Démarrage rapide : Déployer un cluster hôte de conteneur Azure Linux pour AKS en utilisant l’interface Azure CLI
Pour commencer, vous allez déployer un cluster hôte de conteneur Azure Linux pour AKS en utilisant l’interface Azure CLI. Une fois les prérequis installés, vous devez créer un groupe de ressources et un cluster AKS, vous connecter au cluster, puis exécuter un exemple d’application multiconteneur dans le cluster.
Prérequis
-
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide d’Azure Cloud Shell - Bash.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
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. Lors de la création d’un groupe de ressources, vous devez spécifier un emplacement. Cet emplacement est :
- L’emplacement de stockage des métadonnées de votre groupe de ressources.
- Là où vos ressources s’exécutent dans Azure si vous ne spécifiez pas une autre région lors de la création d’une ressource.
Pour créer un groupe de ressources nommé testAzureLinuxResourceGroup dans la région eastus, procédez comme suit :
Créez un groupe de ressources avec la commande az group create
.
az group create --name testAzureLinuxResourceGroup --location eastus
La sortie suivante indique que votre groupe de ressources a été correctement créé :
{
"id": "/subscriptions/<guid>/resourceGroups/testAzureLinuxResourceGroup",
"location": "eastus",
"managedBy": null,
"name": "testAzureLinuxResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Notes
L’exemple ci-dessus utilise eastus, mais les clusters hôtes de conteneur Azure Linux sont disponibles dans toutes les régions.
Créer un cluster hôte de conteneur Azure Linux
Créez un cluster AKS en utilisant la commande az aks create
avec le paramètre --os-sku
pour provisionner le cluster AKS avec une image Azure Linux. L’exemple suivant crée un cluster Azure Linux nommé testAzureLinuxCluster avec un nœud :
az aks create --name testAzureLinuxCluster --resource-group testAzureLinuxResourceGroup --os-sku AzureLinux
Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster.
Se connecter au cluster
Pour gérer un cluster Kubernetes, utilisez kubectl, le client de ligne de commande Kubernetes.
- Configurez
kubectl
afin de vous connecter à votre cluster Kubernetes avec la commandeaz aks get-credentials
.
az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
- Pour vérifier la connexion à votre cluster, exécutez la commande kubectl get. Cette commande retourne la liste des pods.
kubectl get pods --all-namespaces
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 pour des raisons de simplicité, mais nous vous recommandons d’utiliser des services managés, comme 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
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 à l’aide de la commande
kubectl apply
et spécifiez le nom de votre manifeste YAML.kubectl apply -f aks-store-quickstart.yaml
Tester l’application
Vous pouvez vérifier que l’application est en cours d’exécution en consultant l’adresse IP publique ou l’URL de l’application.
Obtenez l’URL de l’application à l’aide des commandes suivantes :
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
curl $IP_ADDRESS
Résultats :
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
Supprimer le cluster
Si vous n’envisagez pas de suivre les tutoriels suivants, nettoyez toutes les ressources inutiles pour éviter les frais Azure. Utilisez la commande az group delete
pour supprimer le groupe de ressources et toutes les ressources associées.
az group delete --name testAzureLinuxCluster --yes --no-wait
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez déployé un cluster hôte de conteneur Azure Linux. Pour en savoir plus sur l’hôte de conteneur Azure Linux et suivre pas à pas un exemple complet illustrant le déploiement et la gestion d’un cluster, passez au tutoriel sur l’hôte de conteneur Azure Linux.