Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Imagens Docker privadas em um cluster com Kubernetes

Boa tarde!

Eu possuo um cluster on-premise onde utilizo 1 kubernetes admin e 2 kubernetes workers.

Quando eu realizo um build de uma imagem Docker no meu kubernetes admin e posteriormente realizo um deploy, os workers não tem acesso a essa imagem, por estar apenas no admin.

Acabei procurando na internet e vi que preciso ter um Registry privado com kubernetes, porém não estou encontrando algum tutorial que mostre como eu faça isso com kubernetes e como os meus workers podem acessar uma imagem gerada no admin.

Alguém sabe como posso compartilhar as minhas imagens privadas dentro de um cluster kubernetes?

5 respostas

Olá Leonardo, tudo bem? É algo muito especifico, mas acho que essa task na própria documentação do Kubernetes pode ti ajudar!

Olá Jonilson!

Isso não irá me resolver pois pelo tutorial que me passaste, terei que enviar a imagem para o Dockerhub. Mesmo que ela seja privada, a minha imagem estará em uma rede não local.

O que eu preciso é criar dentro da minha rede um "Docker hub" onde todas as minhas imagens estejam lá e que o kubernetes consiga vê-las, já que são imagens privadas.

Leonardo, peço desculpas, eu não tinha compreendido que você quer na verdade é criar repositórios locais, e que possam ser distribuidos somente na sua rede local, bem é algo muito especifico, ainda não tentei criar algo nesse sentido pra falar a verdade, mais acho que esse tutorial deve lhe dar um norte de como fazer isso dentro da sua rede local. Esse outro aqui também me parece bastante interessante, vale a pena a leitura.

Fala pra gente se ajuda!

Executei o docker-registry no servidor master e agora consigo fazer pull e push dessas imagens dentro do próprio master.

Os três comandos que executei são esses:


$ docker build -t sandbox/playground_api .
$ docker tag sandbox/playground_api:latest registryserver:50000/sandbox/playground_api:latest
$ docker push registryserver:50000/sandbox/playground_api:latest

Nesses três comandos:

  • Crio uma imagem local chamada "sandbox/playground_api"
  • Crio uma tag "registryserver:50000/sandbox/playground_api:latest" referenciando a imagem "sandbox/playground_api:latest" ao meu dns "registryserver:50000".
  • Envio a minha imagem para o registro

Todos essas passos funcionam pois o servidor onde as imagens são buildadas e posteriormente armazenadas são o próprio master.

Porém, ao realizar um deploy para os meus dois workers, os workers não consegue encontrar as imagens.

Tem alguma configuração no Kubernetes que eu deva fazer para ele tentar buscar as imagens de forma local (meu servidor onde tem as imagens) e caso não encontre, faça a rota padrão do Docker Hub?

Segue meu arquivo de deployment linkando com o meu registry:

** Vale salientar que estou dentro da mesma rede e os workers conseguem fazer requisição para o servidor e para a porta onde está rodando o meu registry (serviço para pegar as imagens).

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: sandbox
  name: sandbox
spec:
  replicas: 4
  selector:
    matchLabels:
      app: sandbox
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: sandbox
    spec:
      containers:
      - image: registryserver:50000/agco/sandbox:latest
        name: sandbox
        imagePullPolicy: Always
        resources: {}
status: {}

O erro que dá é esse: "ImagePullBackOff"

Segue o describe do erro:

Containers:
  playground_api:
    Container ID:
    Image:          sandbox/playground_api
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
Events:
  Type     Reason   Age                    From                   Message
  ----     ------   ----                   ----                   -------
  Warning  Failed   19m (x192 over 64m)    kubelet, worker02  Error: ImagePullBackOff
  Normal   BackOff  4m19s (x257 over 64m)  kubelet, worker02  Back-off pulling image "sandbox/playground_api"
solução!

Leonardo, essas suas imagens são privadas correto? Então é necessário informar as credenciais aos pods para que eles possam acessar. Um outro post fala exatamente o que você está enfrentando, e também tem essa discussão aqui a respeito desse mesmo erro. Dá uma olhada, acho que você vai conseguir resolver!