Déployer à partir d’un registre de conteneurs privé vers Kubernetes local à l’aide de Azure Container Registry et d’AKS Arc

S’applique à : Azure Stack HCI, version 23H2

Cet article explique comment déployer des images conteneur à partir d’un registre de conteneurs privé à l’aide de Azure Container Registry, que vous pouvez exécuter dans votre propre centre de données dans les déploiements AKS Arc. Vous déployez sur votre cluster Kubernetes local hébergé par AKS. Azure Container Registry vous permet de créer, de stocker et de gérer des images conteneur et des artefacts dans un conteneur privé pour tous les types de déploiement de conteneur.

L’article explique comment créer un registre de conteneurs privé dans Azure et envoyer (push) votre image conteneur au registre de conteneurs privé. Vous pouvez ensuite déployer à partir du registre privé vers votre cluster Kubernetes local hébergé dans AKS Arc.

Pour plus d’informations sur Azure Container Registry, consultez la documentation Azure Container Registry.

Prérequis

Vérifiez que vous disposez des prérequis suivants :

  • Une connaissance de base des concepts Kubernetes.
  • Un cluster AKS qui est en cours d’exécution.
  • Azure CLI installé
  • Votre environnement kubectl local configuré pour pointer vers votre cluster AKS.

Créer un registre de conteneurs privé dans Azure

Pour créer un registre de conteneurs, commencez par un groupe de ressources. Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Créez un groupe de ressources avec la commande az group create. L’exemple suivant crée un groupe de ressources dans la région eastus :

az group create --name <RESOURCE_GROUP_NAME> --location eastus

Créez un instance Container Registry avec la commande az acr create et fournissez votre propre nom de registre. Le nom du registre doit être unique dans Azure et contenir entre 5 et 50 caractères alphanumériques. Dans le reste de cet article, <acrName> est utilisé comme espace réservé pour le nom du registre de conteneurs, mais vous pouvez fournir votre propre nom de registre unique. La référence SKU de base est un point d’entrée à coût optimisé à des fins de développement qui fournit un équilibre entre le stockage et le débit :

az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic

Après avoir créé votre registre de conteneurs, utilisez la commande suivante pour créer un principal de service, afin de pouvoir accéder à votre registre de conteneurs à partir de Kubernetes :

az ad sp create-for-rbac /
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourcegroups/<RG_NAME>/providers/Microsoft.ContainerRegistry/registries/<REGISTRY_NAME> /
--role Contributor /
--name <SERVICE_PRINCIPAL_NAME>

Azure Container Registry prend en charge trois rôles d’accès. Le rôle Contributeur est le plus souvent utilisé par les développeurs d’applications. Toutefois, dans des scénarios réels, vous devrez peut-être créer plusieurs principaux de service en fonction du type d’accès nécessaire :

  • Contributeur : ce rôle offre un accès de type envoi (push) et tirage (pull) au référentiel.
  • Lecteur : ce rôle autorise uniquement un accès de type tirage (pull) au référentiel.
  • Propriétaire : ce rôle vous permet d’attribuer des rôles à d’autres utilisateurs, en plus de l’accès de type envoi (push) et tirage (pull) au référentiel.

La commande précédente doit produire une sortie similaire au texte suivant :

{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Une fois le principal de service créé, copiez l’appId et le mot de passe dans un emplacement sûr, pour une utilisation ultérieure dans votre déploiement.

Pour plus d’informations sur l’utilisation des principaux de service et d’Azure Container Registry, consultez l’article Authentification Azure Container Registry avec des principaux de service.

Se connecter au registre de conteneurs privé

Pour utiliser le instance container Registry, vous devez d’abord vous connecter. Pour vous connecter, vous pouvez utiliser Azure CLI ou Docker CLI.

Option 1 : Se connecter à partir d’Azure CLI

Utilisez la commande az acr sign in et fournissez le nom unique attribué au registre de conteneurs à l’étape précédente :

az acr login --name <REGISTRY_NAME>

Option 2 : Se connecter à partir de Docker CLI

Pour utiliser l’interface de ligne de commande Docker pour accéder à votre registre de conteneurs, tapez la commande suivante dans un terminal Bash ou PowerShell :

docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>

Dans l’une ou l’autre option, la commande doit retourner un message de connexion réussie à la fin de l’opération.

Envoyer une image au registre de conteneurs

Une fois connecté, vous pouvez commencer à envoyer l’image au Registre de conteneurs. Tout d’abord, exécutez la commande docker images pour afficher la liste des images sur votre ordinateur local :

REPOSITORY TAG IMAGE ID CREATED SIZE

mcr.microsoft.com/azure-functions/dotnet 3.0 9f8ad1bdee67 5 months ago
540MB

poemfinder-app latest 2d9bef425603 6 months ago 208MB

Pour commencer, balisez l’image à l’aide de la commande docker tag , puis utilisez docker push pour l’envoyer au registre de conteneurs :

docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Vérifiez que l’image a été correctement étiquetée en réécutant la commande docker images. Après avoir confirmé, exécutez docker push pour envoyer (push) au registre de conteneurs, comme suit :

docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0

Pour vérifier que l’image a été correctement envoyée au registre de conteneurs, exécutez la commande suivante :

az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table

Déployer une image à partir du registre de conteneurs sur AKS

Pour déployer votre image conteneur à partir du registre de conteneurs vers votre cluster Kubernetes, créez des secrets Kubernetes pour stocker vos informations d’identification de registre. Kubernetes utilise un secret d’extraction d’image pour stocker les informations nécessaires pour s’authentifier auprès de votre registre. Pour créer le secret d’extraction pour un registre de conteneurs, vous fournissez l’ID du principal de service, le mot de passe et l’URL du Registre :

kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>

Le tableau suivant décrit les paramètres d’entrée :

Valeur Description
secret-name Nom de l’image extrait le secret ; par exemple, acr-secret.
namespace Espace de noms Kubernetes dans lequel placer le secret. Nécessaire uniquement si vous souhaitez placer le secret dans un espace de noms autre que l’espace de noms par défaut.
<REGISTRY_NAME> Nom de votre registre de conteneurs. Par exemple : myregistry. --docker-server est le nom complet du serveur de connexion au Registre.
appId ID du principal de service utilisé par Kubernetes pour accéder à votre Registre.
password Mot de passe du principal de service.

Une fois que vous avez créé le secret de tirage d’image, vous pouvez l’utiliser pour créer des pods et des déploiements Kubernetes. Indiquez le nom du secret sous imagePullSecrets dans le fichier de déploiement, comme illustré dans l’exemple suivant :

apiVersion: v1
kind: Pod
metadata:
 name: poemfinder-app
 namespace: mydemoapps
spec:
 containers:
  - name: poemfinder-app
    image: <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
    imagePullPolicy: IfNotPresent
 imagePullSecrets:
   - name: acr-secret

Dans cet exemple, poemfinder-app:v1.0 est le nom de l’image à extraire du registre de conteneurs et acr-secret est le nom du secret d’extraction que vous avez créé pour accéder au registre. Lorsque vous déployez le pod, Kubernetes extrait automatiquement l’image de votre registre si l’image n’est pas déjà présente sur le cluster.

Vous pouvez enregistrer la configuration de pod ci-dessus dans un fichier tel que pod-example.yaml , puis la déployer sur Kubernetes, comme suit :

kubectl create -f pod-example.yaml

Pour vérifier que le pod a été correctement créé à l’aide de l’image conteneur du registre de conteneurs, exécutez kubectl describe pod <POD_NAME>, qui doit afficher l’image conteneur utilisée pour créer le pod.

Étapes suivantes