Como extrair uma imagem do Docker do GCR em qualquer cluster Kubernetes não-GCP

Um guia simples para ajudar você a usar o GCR como seu Container Registry em qualquer cluster Kubernetes não-GCP

Iman Tumorang em HackerNoon.com Segue em 7 de jul · 4 min ler Foto de Victoire Joncheray em Unsplash

Tenho muitos projetos paralelos, mas implanto-os no meu Kubernetes Cluster in GCP (Google Cloud Platform). Mas depois que o DigitalOcean (DO) liberou seus recursos do Kubernetes, quero mover todos os meus projetos paralelos existentes no GCP para DO. As razões para essas migrações são porque o GCP é muito caro e exagerado apenas para projetos paralelos simples que não têm usuários de produção.

Mas, acabei de migrar os clusters e o banco de dados do Kubernetes. E eu ainda usei alguns serviços do GCP, por exemplo, serviços do Google como o GCR (Google Container Registry) para o meu registro de contêineres, porque o GCR é um pouco barato comparado ao DockerHub para o registro privado.

E ao migrar os clusters do Kubernetes, encontrei um problema. A questão é sobre a autenticação para o GCR ao puxar as imagens privadas. Isto é como o status dos pods quando recebo os pods.

 $ kubectl obtém pods 
NOME READY STATUS RESTARTS AGE
august-f7fc98c5-x4chl 0/1 ErrImagePull 0 88s

Depois de procurar os logs, o problema acontece porque eu preciso definir um token de acesso ao puxar as imagens privadas. Então, aqui vou explicar todos os meus passos para resolver esse problema.

Etapas 1: criar credenciais para o GCR

  • Vá para o console do GCP. Selecione "API e serviços"> "Credenciais"

  • Selecione “Criar credenciais”> “Chave da conta de serviços”> “Criar nova conta de serviços”.

  • E, em seguida, preencha o nome da conta de serviço e, para a Função, selecione o Visualizador

  • E clique em Criar . Depois de criarmos, a credencial será baixada automaticamente em um arquivo JSON. Será parecido com isto.

Agora, já temos credenciais capazes de extrair imagens privadas do GCR.

Etapas 2: Adicionar um segredo do Kubernetes no cluster do Kubernetes

  • E o próximo passo é criar um segredo do Kubernetes em nosso cluster do Kubernetes.
 $ kubectl cria um registro-docker secreto gcr-json-key  
--docker-server = asia.gcr.io
--doctor-username = _json_key
--docker-password = "$ (cat ~ / json-key-file-from-gcp.json)"
--docker-email=any@valid.email
  • Execute o comando acima e insira com base em suas necessidades. Por exemplo: docker-server : asia.gcr.io (eu uso o servidor Asia). Preencha o e-mail com seu e-mail cadastrado no GCP e assim por diante.
  • Se você obteve este erro abaixo, isso acontece porque você já tem um segredo com o nome gcr-json-key . Você pode excluir o segredo e recriar novamente ou apenas colocar outro nome ao criar o segredo.
 $ Erro do servidor (AlreadyExists): segredos "gcr-json-key" já existem 
  • Para garantir que o segredo já esteja criado, é só pegar o segredo; deve existir com o nome gcr-json-key .
 $ kubectl obter segredo 
TIPO DE NOME DADOS AGE
gcr-json-key kubernetes.io/dockerconfigjson 1 6s

Etapas 3: Usando o segredo para implantação

Existem duas maneiras de usar o segredo criado nas etapas anteriores. Eles são

  • Adicione o segredo em ImagePullSecrets na conta de serviço padrão no namespace do Kubernetes. Com esse método, todos os pods que serão implantados usarão o segredo ao puxar as imagens.
  • A outra maneira é adicionar o segredo diretamente à configuração de implantação para cada grupo que precisar dele.

Etapas 3.a: Adicione o segredo para "ImagePullSecrets" na conta de serviço padrão.

A primeira maneira é adicionar o segredo na conta de serviço padrão. Para fazer isso, podemos copiar diretamente este comando abaixo.

 $ kubectl patch serviceaccount padrão  
-p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'

Com esse comando, nosso cluster do Kubernetes já deve conseguir extrair a imagem do GCR.

 $ kubectl descreve pod pod_name 
....
Normal puxando 16s kubelet, padrão de teste-oro2 Puxando a imagem "asia.gcr.io/personal-project/august:latest"
Normal puxado 12s kubelet, padrão de teste-oro2 Capturado com sucesso a imagem "asia.gcr.io/personal-project/august:latest"

Se, de alguma forma, ocorrer um erro, tente excluir o pod e espere que o pod seja reimplantado novamente.

Etapas 3.b: adicione o segredo a cada configuração de implantação de pods

E para essa etapa, precisamos atualizar nosso arquivo de implantação. E precisamos adicionar o segredo diretamente ao arquivo de implantação. E esse método só funciona para cada grupo que tenha o segredo incluído.

Procura a propriedade: imagePullSecrets . Precisamos adicionar o segredo diretamente em nosso arquivo de implantação.

E para o meu caso, eu escolho o primeiro método, as razões são porque o meu registro de contêiner padrão é GCR. Portanto, se no futuro eu tiver um registro diferente, adicionarei o arquivo de implantação diretamente a cada pod que precisar dele.