Skip to content

Commit 196145b

Browse files
authored
Merge pull request #26789 from HugoPfeffer/pt-localization
Add concepts/containers/images.md in pt language
2 parents 23cdd97 + d2d6f7f commit 196145b

File tree

1 file changed

+290
-0
lines changed

1 file changed

+290
-0
lines changed
Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
---
2+
reviewers:
3+
- femrtnz
4+
- jcjesus
5+
- hugopfeffer
6+
title: Imagens
7+
content_type: concept
8+
weight: 10
9+
---
10+
11+
<!-- overview -->
12+
13+
Uma imagem de contêiner representa dados binários que encapsulam uma aplicação e todas as suas dependências de software. As imagens de contêiner são pacotes de software executáveis que podem ser executados de forma autônoma e que fazem suposições muito bem definidas sobre seu agente de execução do ambiente.
14+
15+
Normalmente, você cria uma imagem de contêiner da sua aplicação e a envia para um registro antes de fazer referência a ela em um {{< glossary_tooltip text="Pod" term_id="pod" >}}
16+
17+
Esta página fornece um resumo sobre o conceito de imagem de contêiner.
18+
19+
<!-- body -->
20+
21+
## Nomes das imagens
22+
23+
As imagens de contêiner geralmente recebem um nome como `pause`, `exemplo/meuconteiner`, ou `kube-apiserver`.
24+
As imagens também podem incluir um hostname de algum registro; por exemplo: `exemplo.registro.ficticio/nomeimagem`,
25+
e um possível número de porta; por exemplo: `exemplo.registro.ficticio:10443/nomeimagem`.
26+
27+
Se você não especificar um hostname de registro, o Kubernetes presumirá que você se refere ao registro público do Docker.
28+
29+
Após a parte do nome da imagem, você pode adicionar uma _tag_ (como também usar com comandos como `docker` e` podman`).
30+
As tags permitem identificar diferentes versões da mesma série de imagens.
31+
32+
Tags de imagem consistem em letras maiúsculas e minúsculas, dígitos, sublinhados (`_`),
33+
pontos (`.`) e travessões (` -`).
34+
Existem regras adicionais sobre onde você pode colocar o separador
35+
caracteres (`_`,`-` e `.`) dentro de uma tag de imagem.
36+
Se você não especificar uma tag, o Kubernetes presumirá que você se refere à tag `latest` (mais recente).
37+
38+
{{< caution >}}
39+
Você deve evitar usar a tag `latest` quando estiver realizando o deploy de contêineres em produção,
40+
pois é mais difícil rastrear qual versão da imagem está sendo executada, além de tornar mais difícil o processo de reversão para uma versão funcional.
41+
42+
Em vez disso, especifique uma tag significativa, como `v1.42.0`.
43+
{{< /caution >}}
44+
45+
## Atualizando imagens
46+
47+
A política padrão de pull é `IfNotPresent` a qual faz com que o
48+
{{<glossary_tooltip text = "kubelet" term_id = "kubelet">}} ignore
49+
o processo de *pull* da imagem, caso a mesma já exista. Se você prefere sempre forçar o processo de *pull*,
50+
você pode seguir uma das opções abaixo:
51+
52+
- defina a `imagePullPolicy` do contêiner para` Always`.
53+
- omita `imagePullPolicy` e use`: latest` como a tag para a imagem a ser usada.
54+
- omita o `imagePullPolicy` e a tag da imagem a ser usada.
55+
- habilite o [AlwaysPullImages](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) controlador de admissão.
56+
57+
Quando `imagePullPolicy` é definido sem um valor específico, ele também é definido como` Always`.
58+
59+
## Multiarquitetura de imagens com índice de imagens
60+
61+
Além de fornecer o binário das imagens, um registro de contêiner também pode servir um [índice de imagem do contêiner](https://github.com/opencontainers/image-spec/blob/master/image-index.md). Um índice de imagem pode apontar para múltiplos [manifestos da imagem](https://github.com/opencontainers/image-spec/blob/master/manifest.md) para versões específicas de arquitetura de um contêiner. A ideia é que você possa ter um nome para uma imagem (por exemplo: `pause`, `exemple/meuconteiner`, `kube-apiserver`) e permitir que diferentes sistemas busquem o binário da imagem correta para a arquitetura de máquina que estão usando.
62+
63+
O próprio Kubernetes normalmente nomeia as imagens de contêiner com o sufixo `-$(ARCH)`. Para retrocompatibilidade, gere as imagens mais antigas com sufixos. A ideia é gerar a imagem `pause` que tem o manifesto para todas as arquiteturas e `pause-amd64` que é retrocompatível com as configurações anteriores ou arquivos YAML que podem ter codificado as imagens com sufixos.
64+
65+
## Usando um registro privado
66+
67+
Os registros privados podem exigir chaves para acessar as imagens deles.
68+
As credenciais podem ser fornecidas de várias maneiras:
69+
- Configurando nós para autenticação em um registro privado
70+
- todos os pods podem ler qualquer registro privado configurado
71+
- requer configuração de nó pelo administrador do cluster
72+
- Imagens pré-obtidas
73+
- todos os pods podem usar qualquer imagem armazenada em cache em um nó
74+
- requer acesso root a todos os nós para configurar
75+
- Especificando ImagePullSecrets em um Pod
76+
- apenas pods que fornecem chaves próprias podem acessar o registro privado
77+
- Extensões locais ou específicas do fornecedor
78+
- se estiver usando uma configuração de nó personalizado, você (ou seu provedor de nuvem) pode implementar seu mecanismo para autenticar o nó ao registro do contêiner.
79+
80+
Essas opções são explicadas com mais detalhes abaixo.
81+
82+
### Configurando nós para autenticação em um registro privado
83+
84+
Se você executar o Docker em seus nós, poderá configurar o contêiner runtime do Docker
85+
para autenticação em um registro de contêiner privado.
86+
87+
Essa abordagem é adequada se você puder controlar a configuração do nó.
88+
89+
{{< note >}}
90+
O Kubernetes padrão é compatível apenas com as seções `auths` e` HttpHeaders` na configuração do Docker.
91+
Auxiliares de credencial do Docker (`credHelpers` ou` credsStore`) não são suportados.
92+
{{< /note >}}
93+
94+
Docker armazena chaves de registros privados no arquivo `$HOME/.dockercfg` ou `$HOME/.docker/config.json`. Se você colocar o mesmo arquivo na lista de caminhos de pesquisa abaixo, o kubelet o usa como provedor de credenciais ao obter imagens.
95+
96+
* `{--root-dir:-/var/lib/kubelet}/config.json`
97+
* `{cwd of kubelet}/config.json`
98+
* `${HOME}/.docker/config.json`
99+
* `/.docker/config.json`
100+
* `{--root-dir:-/var/lib/kubelet}/.dockercfg`
101+
* `{cwd of kubelet}/.dockercfg`
102+
* `${HOME}/.dockercfg`
103+
* `/.dockercfg`
104+
105+
{{< note >}}
106+
Você talvez tenha que definir `HOME=/root` explicitamente no ambiente do processo kubelet.
107+
{{< /note >}}
108+
109+
Aqui estão as etapas recomendadas para configurar seus nós para usar um registro privado. Neste
110+
exemplo, execute-os em seu desktop/laptop:
111+
112+
1. Execute `docker login [servidor]` para cada conjunto de credenciais que deseja usar. Isso atualiza o `$HOME/.docker/config.json` em seu PC.
113+
1. Visualize `$HOME/.docker/config.json` em um editor para garantir que contém apenas as credenciais que você deseja usar.
114+
1. Obtenha uma lista de seus nós; por exemplo:
115+
- se você quiser os nomes: `nodes=$( kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}' )`
116+
- se você deseja obter os endereços IP: `nodes=$( kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}' )`
117+
1. Copie seu `.docker/config.json` local para uma das listas de caminhos de busca acima.
118+
- por exemplo, para testar isso: `for n in $nodes; do scp ~/.docker/config.json root@"$n":/var/lib/kubelet/config.json; done`
119+
120+
{{< note >}}
121+
Para clusters de produção, use uma ferramenta de gerenciamento de configuração para que você possa aplicar esta
122+
configuração em todos os nós que você precisar.
123+
{{< /note >}}
124+
125+
Verifique se está funcionando criando um pod que usa uma imagem privada; por exemplo:
126+
127+
```shell
128+
kubectl apply -f - <<EOF
129+
apiVersion: v1
130+
kind: Pod
131+
metadata:
132+
name: private-image-test-1
133+
spec:
134+
containers:
135+
- name: uses-private-image
136+
image: $PRIVATE_IMAGE_NAME
137+
imagePullPolicy: Always
138+
command: [ "echo", "SUCCESS" ]
139+
EOF
140+
```
141+
```
142+
pod/private-image-test-1 created
143+
```
144+
145+
Se tudo estiver funcionando, então, após algum tempo, você pode executar:
146+
147+
```shell
148+
kubectl logs private-image-test-1
149+
```
150+
e veja o resultado do comando:
151+
```
152+
SUCCESS
153+
```
154+
155+
Se você suspeitar que o comando falhou, você pode executar:
156+
```shell
157+
kubectl describe pods/private-image-test-1 | grep 'Failed'
158+
```
159+
Em caso de falha, a saída é semelhante a:
160+
```
161+
Fri, 26 Jun 2015 15:36:13 -0700 Fri, 26 Jun 2015 15:39:13 -0700 19 {kubelet node-i2hq} spec.containers{uses-private-image} failed Failed to pull image "user/privaterepo:v1": Error: image user/privaterepo:v1 not found
162+
```
163+
164+
165+
Você deve garantir que todos os nós no cluster tenham o mesmo `.docker/config.json`. Caso contrário, os pods serão executados com sucesso em alguns nós e falharão em outros. Por exemplo, se você usar o escalonamento automático de nós, cada modelo de instância precisa incluir o `.docker/config.json` ou montar um drive que o contenha.
166+
167+
Todos os pods terão premissão de leitura às imagens em qualquer registro privado, uma vez que
168+
as chaves privadas do registro são adicionadas ao `.docker/config.json`.
169+
170+
### Imagens pré-obtidas
171+
172+
{{< note >}}
173+
Essa abordagem é adequada se você puder controlar a configuração do nó. Isto
174+
não funcionará de forma confiável se o seu provedor de nuvem for responsável pelo gerenciamento de nós e os substituir
175+
automaticamente.
176+
{{< /note >}}
177+
178+
Por padrão, o kubelet tenta realizar um "pull" para cada imagem do registro especificado.
179+
No entanto, se a propriedade `imagePullPolicy` do contêiner for definida como` IfNotPresent` ou `Never`,
180+
em seguida, uma imagem local é usada (preferencial ou exclusivamente, respectivamente).
181+
182+
Se você quiser usar imagens pré-obtidas como um substituto para a autenticação do registro,
183+
você deve garantir que todos os nós no cluster tenham as mesmas imagens pré-obtidas.
184+
185+
Isso pode ser usado para pré-carregar certas imagens com o intuíto de aumentar a velocidade ou como uma alternativa para autenticação em um registro privado.
186+
187+
Todos os pods terão permissão de leitura a quaisquer imagens pré-obtidas.
188+
189+
### Especificando imagePullSecrets em um pod
190+
191+
{{< note >}}
192+
Esta é a abordagem recomendada para executar contêineres com base em imagens
193+
de registros privados.
194+
{{< /note >}}
195+
196+
O Kubernetes oferece suporte à especificação de chaves de registro de imagem de contêiner em um pod.
197+
198+
#### Criando um segredo com Docker config
199+
200+
Execute o seguinte comando, substituindo as palavras em maiúsculas com os valores apropriados:
201+
202+
```shell
203+
kubectl create secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
204+
```
205+
206+
Se você já tem um arquivo de credenciais do Docker, em vez de usar o
207+
comando acima, você pode importar o arquivo de credenciais como um Kubernetes
208+
{{< glossary_tooltip text="Secrets" term_id="secret" >}}.
209+
[Criar um segredo com base nas credenciais Docker existentes](/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials) explica como configurar isso.
210+
211+
Isso é particularmente útil se você estiver usando vários registros privados de contêineres, como `kubectl create secret docker-registry` cria um Segredo que
212+
só funciona com um único registro privado.
213+
214+
{{< note >}}
215+
Os pods só podem fazer referência a *pull secrets* de imagem em seu próprio namespace,
216+
portanto, esse processo precisa ser feito uma vez por namespace.
217+
{{< /note >}}
218+
219+
#### Referenciando um imagePullSecrets em um pod
220+
221+
Agora, você pode criar pods que fazem referência a esse segredo adicionando uma seção `imagePullSecrets`
222+
na definição de Pod.
223+
224+
Por exemplo:
225+
226+
```shell
227+
cat <<EOF > pod.yaml
228+
apiVersion: v1
229+
kind: Pod
230+
metadata:
231+
name: foo
232+
namespace: awesomeapps
233+
spec:
234+
containers:
235+
- name: foo
236+
image: janedoe/awesomeapp:v1
237+
imagePullSecrets:
238+
- name: myregistrykey
239+
EOF
240+
cat <<EOF >> ./kustomization.yaml
241+
resources:
242+
- pod.yaml
243+
EOF
244+
```
245+
246+
Isso precisa ser feito para cada pod que está usando um registro privado.
247+
248+
No entanto, a configuração deste campo pode ser automatizada definindo o imagePullSecrets
249+
em um recurso de [ServiceAccount](/docs/tasks/configure-pod-container/configure-service-account/).
250+
251+
Verifique [Adicionar ImagePullSecrets a uma conta de serviço](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account) para obter instruções detalhadas.
252+
253+
Você pode usar isso em conjunto com um `.docker / config.json` por nó. As credenciais
254+
serão mescladas.
255+
256+
## Casos de uso
257+
258+
Existem várias soluções para configurar registros privados. Aqui estão alguns
259+
casos de uso comuns e soluções sugeridas.
260+
261+
1. Cluster executando apenas imagens não proprietárias (por exemplo, código aberto). Não há necessidade de ocultar imagens.
262+
- Use imagens públicas no Docker hub.
263+
- Nenhuma configuração necessária.
264+
- Alguns provedores de nuvem armazenam em cache ou espelham automaticamente imagens públicas, o que melhora a disponibilidade e reduz o tempo para extrair imagens.
265+
1. Cluster executando algumas imagens proprietárias que devem ser ocultadas para quem está fora da empresa, mas
266+
visível para todos os usuários do cluster.
267+
- Use um [registro Docker](https://docs.docker.com/registry/) privado hospedado.
268+
- Pode ser hospedado no [Docker Hub](https://hub.docker.com/signup) ou em outro lugar.
269+
- Configure manualmente .docker/config.json em cada nó conforme descrito acima.
270+
- Ou execute um registro privado interno atrás de seu firewall com permissão de leitura.
271+
- Nenhuma configuração do Kubernetes é necessária.
272+
- Use um serviço de registro de imagem de contêiner que controla o acesso à imagem
273+
- Funcionará melhor com o escalonamento automático do cluster do que com a configuração manual de nós.
274+
- Ou, em um cluster onde alterar a configuração do nó é inconveniente, use `imagePullSecrets`.
275+
1. Cluster com imagens proprietárias, algumas das quais requerem controle de acesso mais rígido.
276+
- Certifique-se de que o [controlador de admissão AlwaysPullImages](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) está ativo. Caso contrário, todos os pods têm potencialmente acesso a todas as imagens.
277+
- Mova dados confidenciais para um recurso "secreto", em vez de empacotá-los em uma imagem.
278+
1. Um cluster multilocatário em que cada locatário precisa de seu próprio registro privado.
279+
- Certifique-se de que o [controlador de admissão AlwaysPullImages](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) está ativo. Caso contrário, todos os Pods de todos os locatários terão potencialmente acesso a todas as imagens.
280+
- Execute um registro privado com autorização necessária.
281+
- Gere credenciais de registro para cada locatário, coloque em segredo e preencha o segredo para cada namespace de locatário.
282+
- O locatário adiciona esse segredo a imagePullSecrets de cada namespace.
283+
284+
285+
Se precisar de acesso a vários registros, você pode criar um segredo para cada registro.
286+
O Kubelet mesclará qualquer `imagePullSecrets` em um único `.docker/config.json` virtual
287+
288+
## {{% heading "whatsnext" %}}
289+
290+
* Leia a [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/master/manifest.md)

0 commit comments

Comments
 (0)