Extraindo Imagens do Container Registry durante a Implantação do Kubernetes

Descubra como criar um segredo de registro do Docker. Descubra também como especificar a imagem a ser extraída do Container Registry (junto com o segredo do Docker a ser usado) durante a implantação de um aplicativo em um cluster.

Durante a implantação de um aplicativo em um cluster do Kubernetes, geralmente você quer que uma ou mais imagens sejam extraídas de um registro do Docker. No arquivo de manifesto do aplicativo, você especifica as imagens a serem extraídas, o registro do qual elas serão extraídas e as credenciais a serem usadas ao extrair as imagens. O arquivo de manifesto também é comumente conhecido como pod spec ou como arquivo deployment.yaml (embora outros nomes de arquivos sejam permitidos).

Para que o aplicativo extraia imagens que residem no Oracle Cloud Infrastructure Registry (também conhecido como Container Registry), é necessário executar duas etapas:

  • Você deve usar o kubectl para criar um segredo de registro do Docker. O segredo contém as credenciais do Oracle Cloud Infrastructure a serem usadas ao obter a imagem. Ao criar segredos, a Oracle recomenda expressamente que você use a versão mais recente do kubectl (consulte a documentação do kubectl).
  • Especifique a imagem a ser extraída do Container Registry, incluindo o local do repositório e o segredo de registro do Docker a ser usado no arquivo de manifesto do aplicativo.
Observação

O Container Registry é um registro compatível com a Open Container Initiative. Como resultado, você pode armazenar qualquer artefato que esteja em conformidade com as especificações da Open Container Initiative, como imagens do Docker, listas de manifestos (às vezes conhecidas como imagens de várias arquiteturas) e gráficos Helm. As instruções deste tópico pressupõem que você esteja armazenando imagens do Docker e usando a CLI do Docker.

Para criar um segredo de registro do Docker:

  1. Se você ainda não tiver feito isso, siga as etapas para configurar o arquivo de configuração kubeconfig do cluster e (se necessário) defina a variável de ambiente KUBECONFIG de modo a apontar para o arquivo. Observe que é preciso configurar o seu próprio arquivo kubeconfig. Você não pode acessar um cluster usando um arquivo kubeconfig que outro usuário configurou. Consulte Configurando o Acesso ao Cluster.
  2. Em uma janela de terminal, informe:

    kubectl create secret docker-registry <secret-name> --docker-server=<registry-domain> --docker-username=<tenancy-namespace>/<oci-username> --docker-password='<oci-auth-token>' --docker-email=<email-address>

    em que:

    • <secret-name> corresponde ao nome de sua escolha, que você usará no arquivo de manifesto para fazer referência ao segredo. Por exemplo, ocirsecret
    • <registry-domain> inclui uma chave de região ou um identificador de região para a região do Container Registry que você está usando. Por exemplo, ocir.us-ashburn-1.oci.oraclecloud.com. Consulte domínio de registro.
    • <tenancy-namespace> corresponde à string de namespace do Serviço Object Storage gerada automaticamente da tenancy que contém o repositório do qual o aplicativo deve extrair a imagem (conforme mostrado na página Informações da Tenancy). Por exemplo, o namespace da tenancy acme-dev pode ser ansh81vru1zp. Observe que, para algumas tenancies mais antigas, a string do namespace pode ser igual ao nome da tenancy em todas as letras minúsculas (por exemplo, acme-dev).
    • <oci-username> corresponde ao nome de usuário a ser usado ao extrair a imagem. O nome de usuário deve ter acesso à tenancy especificada por <tenancy-namespace>. Por exemplo, jdoe@acme.com

      Se a sua tenancy for federada com Oracle Identity Cloud Service, use o formato <domain-name>/<oci-username>. Para usuários federados, o <domain-name>/<oci-username> é exibido no menu Perfil Ícone do menu Perfil na Console. Por exemplo, se sua tenancy for federada com o Oracle Identity Cloud Service e seu nome de usuário for jdoe@acme.com, digite oracleidentitycloudservice/jdoe@acme.com

    • '<oci-auth-token>' é o token de autenticação do usuário especificado por <oci-username>. Por exemplo, k]j64r{1sJSSF-;)K8 . Se o token de autenticação contiver alguns caracteres especiais (como o parêntese neste exemplo), que geralmente é o caso, coloque o token de autenticação entre aspas simples. Caso contrário, as aspas simples não serão necessárias.
    • <email-address> é um endereço de e-mail. Um endereço de e-mail é obrigatório, mas não importa o que você especificar. Por exemplo, jdoe@acme.com

    Observe que as strings que contêm alguns caracteres especiais (como parênteses) devem estar entre aspas simples.

    Por exemplo, ao combinar os exemplos anteriores, você pode informar:

    kubectl create secret docker-registry ocirsecret --docker-server=ocir.us-ashburn-1.oci.oraclecloud.com --docker-username=ansh81vru1zp/jdoe@acme.com --docker-password='k]j64r{1sJSSF-;)K8' --docker-email=jdoe@acme.com

    Depois de criar o segredo do Docker, você poderá fazer referência a ele no arquivo de manifesto do aplicativo.

Para especificar a imagem a ser extraída do Container Registry, junto com o segredo Docker a ser usado durante a implantação de um aplicativo em um cluster:

  1. Abra o arquivo de manifesto do aplicativo em um editor de texto.
  2. Adicione as seguintes seções ao arquivo de manifesto:

    1. Adicione uma seção containers que especifique o nome e o local do contêiner que você deseja extrair do Container Registry com outros detalhes de implantação.
    2. Adicione uma seção imagePullSecrets ao arquivo de manifesto que especifique o nome do segredo do Docker que você criou para acessar o Container Registry.

    Veja um exemplo de como o manifesto poderá parecer quando você adicionar as seções containers e imagePullSecrets:

    
    apiVersion: v1
    kind: Pod
    metadata:
      name: ngnix-image
    spec:
      containers:
        - name: ngnix
          image: ocir.us-ashburn-1.oci.oraclecloud.com/ansh81vru1zp/project01/ngnix-lb:latest
          imagePullPolicy: Always
          ports:
          - name: nginx
            containerPort: 8080
            protocol: TCP
      imagePullSecrets:
        - name: ocirsecret
  3. Salve e feche o arquivo de manifesto.