Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: AKS locale su Azure
Questo articolo descrive come distribuire immagini di container da un registro container privato utilizzando Azure Container Registry, che puoi eseguire nel proprio data center nelle distribuzioni AKS Arc. Si esegue la distribuzione nel cluster Kubernetes in locale, utilizzando il servizio AKS ospitato localmente. Registro Azure Container consente di creare, archiviare e gestire immagini e artefatti di contenitori in un registro privato per tutti i tipi di distribuzioni di contenitori.
L'articolo descrive come creare un registro contenitori privato in Azure ed eseguire il push dell'immagine del contenitore nel registro contenitori privato. È quindi possibile eseguire la distribuzione dal registro privato al cluster Kubernetes locale ospitato in AKS Arc.
Per ulteriori informazioni su Azure Container Registry, vedere la documentazione di Azure Container Registry.
Prerequisiti
Verificare di avere i requisiti seguenti:
- Conoscenza di base dei concetti di Kubernetes.
- Un cluster AKS in esecuzione.
- Interfaccia della riga di comando di Azure installata
- L'ambiente locale kubectl è configurato per puntare al cluster AKS.
Creare un registro contenitori privato in Azure
Per creare un registro contenitori, iniziare con un gruppo di risorse. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Creare un gruppo di risorse con il comando az group create
. L'esempio seguente crea un gruppo di risorse nell'area eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Creare un'istanza del Registro Container con il comando az acr create e specificare il proprio nome del registro. Il nome del registro deve essere univoco in Azure e contenere da 5 a 50 caratteri alfanumerici. Nel resto di questo articolo <acrName>
viene usato come segnaposto per il nome del registro dei container, ma è possibile specificare il proprio nome univoco del registro. Lo SKU Basic è un punto di ingresso ottimizzato per i costi a scopo di sviluppo che offre un equilibrio tra archiviazione e velocità effettiva:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Dopo aver creato il registro contenitori, usare il comando seguente per creare un'entità servizio, in modo da poter accedere al registro contenitori da 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>
Registro Azure Container supporta tre ruoli di accesso. Il ruolo Collaboratore viene usato più comunemente dagli sviluppatori di applicazioni. In scenari reali, tuttavia, potrebbe essere necessario creare più entità servizio a seconda del tipo di accesso necessario:
- Collaboratore: Questo ruolo offre l'accesso push e pull al repository.
- Lettore: Questo ruolo consente solo l'accesso pull al repository.
- Proprietario: questo ruolo consente di assegnare ruoli ad altri utenti, oltre all'accesso push e pull al repository.
Il comando precedente dovrebbe produrre un output simile al testo seguente:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Dopo aver creato correttamente l'entità servizio, copiare l'appId e la password in un luogo sicuro per usarli in un secondo momento nella distribuzione.
Per altre informazioni sull'uso di entità servizio e Registro Azure Container, vedere Autenticazione al Registro Azure Container con entità servizio.
Accedere al registro contenitori privato
Per usare l'istanza del Registro Container, è prima necessario eseguire l'accesso. È possibile usare l'interfaccia della riga di comando di Azure o l'interfaccia della riga di comando di Docker per accedere.
Opzione 1: Accedere dall'interfaccia della riga di comando di Azure
Usare il comando az acr sign in e specificare il nome univoco assegnato al registro contenitori nel passaggio precedente:
az acr login --name <REGISTRY_NAME>
Opzione 2: Accedere dall'interfaccia della riga di comando di Docker
Per usare l'interfaccia della riga di comando di Docker per accedere al registro contenitori, digitare il comando seguente in un terminale Bash o PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
In entrambe le opzioni, il comando deve restituire un messaggio di accesso completato .
Caricare un'immagine nel registro dei contenitori
Dopo aver eseguito l'accesso, è possibile iniziare a inviare l'immagine al Registro Contenitori. Eseguire prima di tutto il comando docker images per visualizzare l'elenco di immagini nel computer locale:
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
Per iniziare, contrassegnare l'immagine usando il comando docker tag
e quindi usare Docker push
per eseguirne il push nel registro contenitori:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Verificare che l'immagine sia stata contrassegnata correttamente eseguendo di nuovo il comando docker images. Dopo aver confermato, eseguire docker push
per eseguire il push nel registro contenitori, come indicato di seguito:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Per verificare che il push dell'immagine sia stato eseguito correttamente nel registro contenitori, eseguire il comando seguente:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Distribuire un'immagine dal registro di container ad Azure Kubernetes Service
Per distribuire l'immagine del contenitore dal registro delle immagini al cluster Kubernetes, creare Kubernetes Secrets per archiviare le credenziali del registro. Kubernetes usa un segreto di estrazione delle immagini per archiviare le informazioni necessarie per autenticare il tuo registro. Per creare il segreto di pull per un registro dei container, specificare l'ID identità del servizio, la password e l'URL del registro di sistema.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
La tabella seguente descrive i parametri di input:
valore | Descrizione |
---|---|
secret-name |
Nome dell'immagine recupera il segreto; ad esempio acr-secret . |
namespace |
Spazio dei nomi Kubernetes in cui inserire il segreto. È necessario solo se si desidera inserire il segreto in uno spazio dei nomi diverso dallo spazio dei nomi predefinito. |
<REGISTRY_NAME> |
Nome della registrazione dei container. Ad esempio: myregistry .
--docker-server è il nome completo del server di login al registro. |
appId |
ID dell'entità servizio usata da Kubernetes per accedere al Registro di sistema. |
password |
Password dell'entità servizio. |
Dopo aver creato il segreto per il pull dell'immagine, puoi usarlo per creare pod e deployment di Kubernetes. Specificare il nome del segreto imagePullSecrets
nel file di distribuzione, come illustrato nell'esempio seguente:
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
In questo esempio, poemfinder-app:v1.0
è il nome dell'immagine da estrarre dal registro contenitori ed acr-secret
è il nome del segreto pull creato per accedere al Registro di sistema. Quando si distribuisce il pod, Kubernetes esegue automaticamente il pull dell'immagine dal registro se l'immagine non è già presente nel cluster.
È possibile salvare la configurazione del pod precedente in un file, ad esempio pod-example.yaml e quindi distribuirlo in Kubernetes, come indicato di seguito:
kubectl create -f pod-example.yaml
Per verificare che il pod sia stato creato correttamente usando l'immagine del contenitore dal registro contenitori, eseguire kubectl describe pod <POD_NAME>, che dovrebbe mostrare l'immagine del contenitore usata per creare il pod.