Skip to content

Commit 14a6477

Browse files
committed
[pt-br] add content/pt-br/docs/tasks/configure-pod-container/static-pod.md
1 parent 03b9de5 commit 14a6477

File tree

1 file changed

+248
-0
lines changed

1 file changed

+248
-0
lines changed
Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
---
2+
title: Criando Pods Estáticos
3+
weight: 170
4+
content_type: task
5+
update_date: 2022-07-16
6+
origin_version: 1.24
7+
contributors: DonatoHorn
8+
reviewers:
9+
- jsafrane
10+
---
11+
12+
<!-- overview -->
13+
14+
15+
*Pods Estáticos* são gerenciados diretamente pelo `daemon` kubelet em um nó específico,
16+
sem o {{< glossary_tooltip text="servidor de API" term_id="kube-apiserver" >}}
17+
observando-os.
18+
Ao contrário dos pods que são gerenciados pelo `Control Plane` (por exemplo, uma
19+
{{< glossary_tooltip text="Implantação" term_id="deployment" >}});
20+
em vez disso, o kubelet observa cada Pod estático
21+
(e reinicia-os se falharem).
22+
23+
Pods estáticos estão sempre ligados a um {{< glossary_tooltip term_id="kubelet" >}} em um nó específico.
24+
25+
O Kubelet tenta automaticamente criar um {{< glossary_tooltip text="mirror Pod" term_id="mirror-pod" >}}
26+
no servidor de API do Kubernetes para cada Pod estático.
27+
Isso significa que os pods em execução em um nó são visíveis no servidor de API,
28+
mas não podem ser controlados a partir daí.
29+
Aos nomes de Pods será acrescido um sufixo com o nome de host do nó, com um hífem.
30+
31+
32+
{{< note >}}
33+
Se você está executando um cluster Kubernetes, usando Pods estáticos para executar um Pod em cada Nó,
34+
provávelmente você deveria estar usando um {{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}} em substituição.
35+
{{< /note >}}
36+
37+
{{< note >}}
38+
A `especificação` de um Pod estático não pode referir-se à outros objetos da API
39+
(ex., {{< glossary_tooltip text="Conta de Serviço" term_id="service-account" >}},
40+
{{< glossary_tooltip text="Mapa de Configuração" term_id="configmap" >}},
41+
{{< glossary_tooltip text="Segredo" term_id="secret" >}}, etc).
42+
{{< /note >}}
43+
44+
## {{% heading "prerequisites" %}}
45+
46+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
47+
48+
Esta página assume que você está usando um {{< glossary_tooltip term_id="cri-o" >}} para executar os Pods,
49+
e que seus nós estão executando o sistema operacional Fedora.
50+
Instruções para outras distribuições, ou instalações de Kubernetes, podem variar.
51+
52+
<!-- steps -->
53+
54+
## Crie um pod estático {#static-pod-creation}
55+
56+
Você pode configurar um Pod estático com um [arquivo de configuração hospedado no sistema de arquivos](/docs/tasks/configure-pod-container/static-pod/#configuration-files) ou um [arquivo de configuração hospedado na Web](/docs/tasks/configure-pod-container/static-pod/#pods-created-via-http).
57+
58+
### Manifesto do Pod estático hospedado no sistema de arquivos {#configuration-files}
59+
60+
Os manifestos, são definições de Pod padrão em formato JSON ou YAML em um diretório específico. Use o campo `staticPodPath: <diretório>` no
61+
[arquivo de configuração do kubelet](/docs/reference/config-api/kubelet-config.v1beta1/),
62+
que periodicamente varre o diretório e cria/exclui Pods estáticos conforme os arquivos YAML/JSON aparecem/desaparecem.
63+
Observe que o Kubelet ignorará os arquivos começando com pontos ao varrer o diretório especificado.
64+
65+
Por exemplo, como iniciar um servidor Web simples como um Pod estático
66+
67+
1. Escolha um nó onde você deseja executar um Pod estático. Neste exemplo, é `my-node1`.
68+
69+
```shell
70+
ssh my-node1
71+
```
72+
73+
2. Escolha um diretório, digamos `/etc/kubernetes/manifests` e coloque uma definição de pod para um servidor web lá, por exemplo `/etc/kubernetes/manifests/static-web.yaml`:
74+
75+
```shell
76+
# Execute este comando no nó onde o Kubelet está funcionando
77+
mkdir -p /etc/kubernetes/manifests/
78+
cat <<EOF >/etc/kubernetes/manifests/static-web.yaml
79+
apiVersion: v1
80+
kind: Pod
81+
metadata:
82+
name: static-web
83+
labels:
84+
role: myrole
85+
spec:
86+
containers:
87+
- name: web
88+
image: nginx
89+
ports:
90+
- name: web
91+
containerPort: 80
92+
protocol: TCP
93+
EOF
94+
```
95+
96+
3. Configure seu kubelet no nó para usar este diretório executando-o com o argumento `--pod-manifest-path=/etc/kubernetes/manifests/`. No Fedora, edite o arquivo `/etc/kubernetes/kubelet` para incluir esta linha:
97+
98+
```
99+
KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --pod-manifest-path=/etc/kubernetes/manifests/"
100+
```
101+
ou adicione o campo `staticPodPath: <o diretótio>` no
102+
[arquivo de configuração do kubelet](/docs/reference/config-api/kubelet-config.v1beta1/).
103+
104+
4. Reinicie o kubelet. No Fedora, você poderia executar:
105+
106+
```shell
107+
# Execute este comando no nó onde o kubelet está funcionando
108+
systemctl restart kubelet
109+
```
110+
111+
### Manifesto do Pod estático hospedado na Web {#pods-created-via-http}
112+
113+
O Kubelet baixa periodicamente um arquivo especificado pelo argumento `--manifest-url=<URL>`
114+
e interpreta-o como um arquivo JSON/YAML que contém as definições do Pod.
115+
Similar ao que [manifestos hospedados no sistema de arquivos](#configuration-files) fazem, o kubelet
116+
reexamina o manifesto em um agendamento. Se houver alterações na lista de Pods estáticos, o kubelet aplica-os.
117+
118+
Para usar esta abordagem:
119+
120+
1. Crie um arquivo YAML e armazene-o em um servidor da Web, para que você possa passar o URL desse arquivo para o Kubelet.
121+
122+
```yaml
123+
apiVersion: v1
124+
kind: Pod
125+
metadata:
126+
name: static-web
127+
labels:
128+
role: myrole
129+
spec:
130+
containers:
131+
- name: web
132+
image: nginx
133+
ports:
134+
- name: web
135+
containerPort: 80
136+
protocol: TCP
137+
```
138+
139+
2. Configure o kubelet no seu nó selecionado para usar este manifesto da Web, executando-o com `--manifest-url=<manifest-url>`. No Fedora, edite `/etc/kubernetes/kubelet` para incluir esta linha:
140+
141+
```
142+
KUBELET_ARGS="--cluster-dns=10.254.0.10 --cluster-domain=kube.local --manifest-url=<manifest-url>"
143+
```
144+
145+
3. Reinicie o Kubelet. No Fedora, você usaria:
146+
147+
```shell
148+
# Execute este comando no nó onde o kubelet está funcionando
149+
systemctl restart kubelet
150+
```
151+
152+
## Observe o comportamento do Pod estático {#behavior-of-static-pods}
153+
154+
Quando o kubelet começa, inicia automaticamente todos os pods estáticos definidos.
155+
Como você definiu um Pod estático e reiniciou o kubelet, o novo pod estático deveria
156+
já estar em execução.
157+
158+
Você pode ver os Contêineres em execução (incluindo os Pods estáticos) ao executar (no Nó):
159+
160+
```shell
161+
# Execute este comando no nó onde o kubelet está funcionando
162+
crictl ps
163+
```
164+
165+
A saída pode ser algo como:
166+
167+
```console
168+
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
169+
129fd7d382018 docker.io/library/nginx@sha256:... 11 minutes ago Running web 0 34533c6729106
170+
```
171+
172+
{{< note >}}
173+
`crictl` mostra a URI da imagem e o checksum SHA-256. O `NAME` vai parecer mais como:
174+
`docker.io/library/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31`.
175+
{{< /note >}}
176+
177+
Você pode ver o Pod espelho no servidor de API:
178+
179+
```shell
180+
kubectl get pods
181+
```
182+
```
183+
NAME READY STATUS RESTARTS AGE
184+
static-web 1/1 Running 0 2m
185+
```
186+
187+
{{< note >}}
188+
Verifique se o Kubelet tem permissão para criar o Pod espelho no servidor de API. Caso contrário, a solicitação de criação é rejeitada pelo servidor de API. Veja [Admissão de segurança do pod](/docs/concepts/security/pod-security-admission) e [Políticas de Segurança de Pod](/docs/concepts/security/pod-security-policy/).
189+
{{< /note >}}
190+
191+
Os {{< glossary_tooltip term_id="label" text="Rótulos" >}} dos pods estáticos são
192+
propagados no Pod espelho. Você pode usar esses rótulos como
193+
{{< glossary_tooltip term_id="selector" text="seletores" >}} via normal, etc.
194+
195+
Se você tentar usar o `kubectl` para excluir o Pod espelho do servidor de API,
196+
o kubelet _não_ remove o Pod estático:
197+
198+
```shell
199+
kubectl delete pod static-web
200+
```
201+
```
202+
pod "static-web" deleted
203+
```
204+
Você pode ver que o Pod ainda está funcionando:
205+
```shell
206+
kubectl get pods
207+
```
208+
```
209+
NAME READY STATUS RESTARTS AGE
210+
static-web 1/1 Running 0 4s
211+
```
212+
213+
De volta ao seu nó, onde o kubelet está funcionando, você pode tentar parar o Contêiner manualmente.
214+
Você verá que, depois de algum tempo, o Kubelet notará e reiniciará o Pod
215+
automaticamente:
216+
217+
```shell
218+
# Execute esses comandos no nó onde o Kubelet está funcionando
219+
crictl stop 129fd7d382018 # substitua pelo ID do seu contêiner
220+
sleep 20
221+
crictl ps
222+
```
223+
```console
224+
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
225+
89db4553e1eeb docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106
226+
```
227+
228+
## Adição e remoção dinâmica de Pods estáticos
229+
230+
O Kubelet em execução varre periodicamente o diretório configurado (`/etc/kubernetes/manifests` em nosso exemplo) por alterações, e adiciona/remove os pods à medida que os arquivos aparecem/desaparecem neste diretório.
231+
232+
```shell
233+
# Pressupondo que você esteja usando a configuração de Pod estático hospedada no sistema de arquivos
234+
# Execute esses comandos no nó onde o Kubelet está funcionando
235+
#
236+
mv /etc/kubelet.d/static-web.yaml /tmp
237+
sleep 20
238+
crictl ps
239+
# Você vê que nenhum contêiner nginx está funcionando
240+
#
241+
mv /tmp/static-web.yaml /etc/kubelet.d/
242+
sleep 20
243+
crictl ps
244+
```
245+
```console
246+
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
247+
f427638871c35 docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106
248+
```

0 commit comments

Comments
 (0)