Skip to content

Commit c29aabc

Browse files
authored
Merge pull request #35146 from DonatoHorn/ptbr/static
[pt-br] add content/pt-br/docs/tasks/configure-pod-container/static-p…
2 parents 71cf9d3 + 623948f commit c29aabc

File tree

1 file changed

+245
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)