Implantar do registro de contêiner privado para o Kubernetes local usando o Registro de Contêiner do Azure e o AKS Arc
Aplica-se a: Azure Local, versão 23H2
Este artigo descreve como implantar imagens de contêiner de um registro de contêiner privado usando o Registro de Contêiner do Azure, que você pode executar em seu próprio datacenter em implantações do AKS Arc. Você implanta em seu cluster Kubernetes local hospedado pelo AKS. O Azure Container Registry permite-lhe criar, armazenar e gerir imagens e artefactos de contentor num registo privado para todos os tipos de implementações de contentor.
O artigo descreve como criar um registro de contêiner privado no Azure e enviar sua imagem de contêiner para o registro de contêiner privado. Em seguida, você pode implantar a partir do registro privado em seu cluster Kubernetes local hospedado no AKS Arc.
Para obter mais informações sobre o Registro de Contêiner do Azure, consulte a documentação do Registro de Contêiner do Azure.
Pré-requisitos
Verifique se você tem os seguintes requisitos:
- Uma compreensão básica dos conceitos do Kubernetes.
- Um cluster AKS que está em funcionamento.
- CLI do Azure instalada
- Seu ambiente kubectl local configurado para apontar para seu cluster AKS.
Criar um registro de contêiner privado no Azure
Para criar um registro de contêiner, comece com um grupo de recursos. Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos. Crie um grupo de recursos com o comando az group create
. O exemplo a seguir cria um grupo de recursos na região eastus :
az group create --name <RESOURCE_GROUP_NAME> --location eastus
Crie uma instância do Registro de contêiner com o comando az acr create e forneça seu próprio nome de registro. O nome do Registro deve ser exclusivo no Azure e conter de 5 a 50 caracteres alfanuméricos. No restante deste artigo, <acrName>
é usado como um espaço reservado para o nome do registro do contêiner, mas você pode fornecer seu próprio nome de registro exclusivo. O Basic SKU é um ponto de entrada com custo otimizado para fins de desenvolvimento que fornece um equilíbrio entre armazenamento e taxa de transferência:
az acr create --resource-group <RESOURCE_GROUP_NAME> --name <REGISTRY_NAME> --sku Basic
Depois de criar seu registro de contêiner, use o seguinte comando para criar uma entidade de serviço, para que você possa acessar seu registro de contêiner do 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>
O Registro de Contêiner do Azure dá suporte a três funções de acesso. A função de Colaborador é usada mais comumente por desenvolvedores de aplicativos. No entanto, em cenários reais, talvez seja necessário criar várias entidades de serviço, dependendo do tipo de acesso necessário:
- Colaborador: esta função oferece acesso push e pull ao repositório.
- Leitor: Esta função só permite o acesso pull ao repositório.
- Proprietário: essa função permite atribuir funções a outros usuários, além do acesso push e pull ao repositório.
O comando anterior deve produzir uma saída semelhante ao seguinte texto:
{
"appId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"displayName": "akshci-service-principal",
"name": "http://akshci-service-principal",
"password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"tenant": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Depois que a entidade de serviço for criada com êxito, copie o appId e a senha em um local seguro para usar posteriormente em sua implantação.
Para obter mais informações sobre como trabalhar com os principais de serviço e o Azure Container Registry, veja Azure Container Registry authentication with service principals (Autenticação do Azure Container Registry com principais de serviço).
Entrar no registro de contêiner privado
Para usar a instância do Registro de Contêiner, você deve primeiro entrar. Você pode usar a CLI do Azure ou a CLI do Docker para entrar.
Opção 1: Entrar na CLI do Azure
Use o comando az acr sign in e forneça o nome exclusivo atribuído ao registro de contêiner na etapa anterior:
az acr login --name <REGISTRY_NAME>
Opção 2: Entrar na CLI do Docker
Para usar a CLI do Docker para acessar seu registro de contêiner, digite o seguinte comando em um terminal Bash ou PowerShell:
docker login <REGISTRY_NAME>.azurecr.io -u <appId> -p <password>
Em qualquer uma das opções, o comando deve retornar uma mensagem de entrada bem-sucedida quando for concluída.
Enviar uma imagem para o registro do contêiner
Depois de iniciar sessão com êxito, pode começar a enviar a imagem para o Registo de Contentores. Primeiro, execute o comando docker images para visualizar a lista de imagens em sua máquina 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
Para começar, marque a imagem usando o comando docker tag
e, em seguida, use o docker push
para enviá-la por push para o registro do contêiner:
docker tag poemfinder-app <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Verifique se a imagem foi marcada corretamente executando o comando docker images novamente. Depois de confirmar, execute docker push
para enviar por push para o registro do contêiner, da seguinte maneira:
docker push <REGISTRY_NAME>.azurecr.io/poemfinder-app:v1.0
Para confirmar que a imagem foi enviada com êxito para o registro do contêiner, execute o seguinte comando:
az acr repository list --name <REGISTRY_NAME>.azurecr.io --output table
Implantar uma imagem do registro de contêiner no AKS
Para implantar sua imagem de contêiner do registro de contêiner no cluster do Kubernetes, crie Segredos do Kubernetes para armazenar suas credenciais do Registro. O Kubernetes usa um segredo de extração de imagem para armazenar as informações necessárias para autenticar no seu registro. Para criar o segredo de pull para um registro de contêiner, forneça a ID da entidade de serviço, a senha e a URL do Registro:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<REGISTRY_NAME>.azurecr.io \
--docker-username=<appId> \
--docker-password=<password>
A tabela a seguir descreve os parâmetros de entrada:
valor | Description |
---|---|
secret-name |
Nome da imagem puxa segredo; por exemplo, acr-secret . |
namespace |
Kubernetes namespace no qual colocar o segredo. Apenas necessário se você quiser colocar o segredo em um namespace diferente do namespace padrão. |
<REGISTRY_NAME> |
Nome do seu registro de contêiner. Por exemplo, myregistry . O --docker-server é o nome totalmente qualificado do servidor de entrada do Registro. |
appId |
ID da entidade de serviço que o Kubernetes usa para acessar seu registro. |
password |
Senha da entidade de serviço. |
Depois de criar o segredo de pull de imagem, você pode usá-lo para criar pods e implantações do Kubernetes. Forneça o nome do segredo no imagePullSecrets
arquivo de implantação, conforme mostrado no exemplo a seguir:
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
Neste exemplo, poemfinder-app:v1.0
é o nome da imagem a ser extraída do registro do contêiner e acr-secret
é o nome do segredo de pull que você criou para acessar o registro. Quando você implanta o pod, o Kubernetes extrai automaticamente a imagem do seu registro se a imagem ainda não estiver presente no cluster.
Você pode salvar a configuração de pod acima em um arquivo como pod-example.yaml e, em seguida, implantá-la no Kubernetes, da seguinte maneira:
kubectl create -f pod-example.yaml
Para confirmar que o pod foi criado com êxito usando a imagem de contêiner do registro de contêiner, execute kubectl describe pod <POD_NAME>, que deve mostrar a imagem de contêiner usada para criar o pod.