Skip to content

Commit 8032430

Browse files
committed
[pt-br add content/pt-br/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
1 parent 03b9de5 commit 8032430

File tree

5 files changed

+361
-0
lines changed

5 files changed

+361
-0
lines changed
Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
---
2+
title: Configurando um Pod Para Usar um Volume Persistente Para armazenamento
3+
content_type: task
4+
weight: 60
5+
update_date: 2022-07-18
6+
origin_version: 1.24
7+
contributors: DonatoHorn
8+
reviewers:---
9+
10+
<!-- overview -->
11+
12+
Esta página mostra como configurar um Pod para usar um
13+
{{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}}
14+
para armazenamento.
15+
Aqui está o resumo do processo:
16+
17+
1. Você, como administrador do cluster, faz a criação de um Volume Persistente através
18+
do armazenamento físico. Você não associa o volume a nenhum Pod.
19+
20+
1. Você, agora assumindo o papel de desenvolvedor/usuário do cluster, faz a criação
21+
de um `PersistentVolumeClaim` que é automaticamente ligado ao Volume Persistente adequado.
22+
23+
1. Você cria um Pod que usa o `PersistentVolumeClaim` acima para armazenamento.
24+
25+
26+
27+
## {{% heading "prerequisites" %}}
28+
29+
30+
* Você precisa ter um cluster Kubernetes que tenha apenas um nó, e a ferramenta de linha de comando
31+
{{< glossary_tooltip text="kubectl" term_id="kubectl" >}} configurada para se comunicar com seu cluster. Se você
32+
ainda não tem um cluster de um único nó, você pode criar um usando o
33+
[Minikube](https://minikube.sigs.k8s.io/docs/).
34+
35+
* Familiarize-se com o material em
36+
[Volumes persistentes](/docs/concepts/storage/persistent-volumes/).
37+
38+
<!-- steps -->
39+
40+
## Criando um arquivo index.html no seu Nó
41+
42+
Abra um shell no único Nó do seu cluster. A maneira de abrir um shell vai depender de como
43+
você inicializou seu cluster. Por exemplo, se você estiver usando o Minikube,
44+
você pode abrir um shell para o seu Nó digitando `minikube ssh`.
45+
46+
No seu shell desse Nó, crie um diretótio `/mnt/data`:
47+
48+
```shell
49+
# Assumindo que o seu Nó use "sudo" para executar comandos
50+
# como superusuário
51+
sudo mkdir /mnt/data
52+
```
53+
54+
55+
No diretório `/mnt/data`, crie o arquivo `index.html`:
56+
57+
```shell
58+
# Novamente assumindo que seu Nó use "sudo" para executar comandos
59+
# como superusuário
60+
sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
61+
```
62+
63+
{{< note >}}
64+
Se o seu Nó usa uma ferramenta para acesso como superusuário que não `sudo`, você pode
65+
geralmente fazer isso funcionar substituíndo `sudo` pelo nome da outra ferramenta.
66+
{{< /note >}}
67+
68+
Teste se o arquivo `index.html` existe:
69+
70+
```shell
71+
cat /mnt/data/index.html
72+
```
73+
74+
A saída deve ser:
75+
```
76+
Hello from Kubernetes storage
77+
```
78+
79+
Você agora pode fechar o shell do seu Nó.
80+
81+
## Crie um Volume Persistente
82+
83+
Neste exercício, você cria um Volume Persistente *hostPath*. O Kubernetes suporta
84+
`hostPath` para desenvolvimento e teste em um cluster com apenas um Nó. Um Volume Persistente
85+
`hostPath` usa um arquivo ou diretório no Nó, para emular um armazenamento conectado pela rede.
86+
87+
Em um cluster de produção, você não usaria `hostPath`. Em vez disso um administrador
88+
de cluster provisionaria um recurso de rede, como um disco persistente do
89+
`Google Compute Engine`, um NFS compartilhado, ou um volume do
90+
`Amazon Elastic Block Store`. Administradores podem também usar [classes de armazenamento]
91+
(/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#storageclass-v1-storage)
92+
para incializar [provisionamento dinâmico]
93+
(https://kubernetes.io/blog/2016/10/dynamic-provisioning-and-storage-in-kubernetes).
94+
95+
Aqui está o arquivo de configuração para o Volume Persistente `hostPath`:
96+
97+
{{< codenew file="pods/storage/pv-volume.yaml" >}}
98+
99+
O arquivo de configuração especifica que o volume está em `/mnt/data` do Nó do cluster.
100+
A configuração também especifica um tamanho de 10 gibibytes e um modo de acesso
101+
`ReadWriteOnce`, o que significa que o volume pode ser montado como leitura-escrita
102+
pelo único Nó. Define o [nome da classe de armazenamento](/docs/concepts/storage/persistent-volumes/#class)
103+
`manual` para o Volume Persistente, que será usado para ligar requisições
104+
`PersistentVolumeClaim` à esse Volume Persistente.
105+
106+
Crie o Volume Persistente:
107+
108+
```shell
109+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
110+
```
111+
112+
Veja informações do Volume Persistente:
113+
114+
```shell
115+
kubectl get pv task-pv-volume
116+
```
117+
118+
A saída mostra que o Volume Persistente tem um `STATUS` de `Available`. Isto
119+
significa que ainda não foi vinculado a um `PersistentVolumeClaim`.
120+
121+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
122+
task-pv-volume 10Gi RWO Retain Available manual 4s
123+
124+
## Crie um `PersistemtVolumeClaim`
125+
126+
O próximo passo é criar um `PersistemtVolumeClaim`. Pods usam `PersistemtVolumeClaims`
127+
para requisitar armazenamento físico. Neste exercício, você vai criar
128+
um `PersistemtVolumeClaim` que requisita um volume com pelo menos três
129+
gibibytes, com acesso de leitura-escrita para pelo menos um Nó.
130+
131+
Aqui está o arquivo de configuração para o`PersistemtVolumeClaim`:
132+
133+
{{< codenew file="pods/storage/pv-claim.yaml" >}}
134+
135+
Crie o `PersistemtVolumeClaim`:
136+
137+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
138+
139+
Após criar o `PersistemtVolumeClaim`, o Kubernetes `control plane` procura por um
140+
Volume Persistente que satisfaça os requerimentos reivindicados. Se o `control plane`
141+
encontrar um Volume Persistente adequado, com a mesma classe de armazenamento,
142+
ele liga o volume requisitado.
143+
144+
Olhe novamente o Volume Persistente:
145+
146+
```shell
147+
kubectl get pv task-pv-volume
148+
```
149+
150+
Agora a saída mostra um `STATUS` de `Bound`.
151+
152+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
153+
task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 2m
154+
155+
Olhe para o `PersistemtVolumeClaim`:
156+
157+
```shell
158+
kubectl get pvc task-pv-claim
159+
```
160+
161+
A saída mostra que o`PersistemtVolumeClaim` está vinculado ao seu Volume Persistente,
162+
`task-pv-volume`.
163+
164+
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
165+
task-pv-claim Bound task-pv-volume 10Gi RWO manual 30s
166+
167+
## Crie um Pod
168+
169+
O próximo passo é criar um Pod que usa o seu `PersistemtVolumeClaim` como um volume.
170+
171+
Aqui está o arquivo de configuração para o Pod:
172+
173+
{{< codenew file="pods/storage/pv-pod.yaml" >}}
174+
175+
Note que o arquivo de configuração do Pod especifica um `PersistemtVolumeClaim`, mas não
176+
especifica um Volume Persistente. Do ponto de vista do Pod, a reivindicação é de um volume.
177+
178+
Crie o Pod:
179+
180+
```shell
181+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-pod.yaml
182+
```
183+
184+
Verifique se o contêiner no Pod está executando;
185+
186+
```shell
187+
kubectl get pod task-pv-pod
188+
```
189+
190+
Abra o shell do contêiner, executando no seu Pod:
191+
192+
```shell
193+
kubectl exec -it task-pv-pod -- /bin/bash
194+
```
195+
196+
No seu shell, verifique se o nginx está servindo o arquivo `index.html` do volume
197+
do `hostPath`:
198+
199+
```shell
200+
# Certifique-se de executar esses 3 comandos dentro do shell, na raiz que vem da
201+
# execução "kubectl exec" do passo anterior
202+
apt update
203+
apt install curl
204+
curl http://localhost/
205+
```
206+
207+
A saída mostra o texto que você escreveu no arquivo `index.html` no volume do
208+
`hostPath`:
209+
210+
Hello from Kubernetes storage
211+
212+
213+
Se você vir essa mensagem, configurou com sucesso um pod para
214+
usar o armazenamento de um `PersistemtVolumeClaim`.
215+
216+
## Limpeza
217+
218+
Exclua o Pod, o `PersistemtVolumeClaim` e o Volume Persistente:
219+
220+
```shell
221+
kubectl delete pod task-pv-pod
222+
kubectl delete pvc task-pv-claim
223+
kubectl delete pv task-pv-volume
224+
```
225+
226+
Se você ainda não tem um shell aberto no nó em seu cluster,
227+
Abra um novo shell da mesma maneira que você fez antes.
228+
No shell do seu Nó, remova o arquivo e o diretório que você criou:
229+
230+
```shell
231+
# Pressupondo que seu nó usa "sudo" para executar comandos
232+
# como superusuário
233+
sudo rm /mnt/data/index.html
234+
sudo rmdir /mnt/data
235+
```
236+
237+
Você pode agora fechar o shell do seu Nó.
238+
239+
## Montando o mesmo Volume Persistente em dois lugares
240+
241+
{{< codenew file="pods/storage/pv-duplicate.yaml" >}}
242+
243+
Você pode realizar a montagem de 2 volumes no seu contêiner nginx:
244+
245+
`/usr/share/nginx/html` para o website estático
246+
`/etc/nginx/nginx.conf` para a configuração padrão
247+
248+
<!-- discussion -->
249+
250+
## Controle de accesso
251+
252+
Armazenamento configurado com um `group ID` (GID) possibilita a escrita somente pelos
253+
Pods usando a mesma GID. GIDs incompatíveis ou perdidos causam erros de negação
254+
de permissão. Para reduzir a necessidade de coordenação de usuários, um administrador
255+
pode anotar um Volume Persistente com uma GID. Então a GID é automaticamente
256+
adicionada a qualquer Pod que use um Volume Persistente.
257+
258+
Use a anotação `pv.beta.kubernetes.io/gid` como a seguir:
259+
260+
```yaml
261+
apiVersion: v1
262+
kind: PersistentVolume
263+
metadata:
264+
name: pv1
265+
annotations:
266+
pv.beta.kubernetes.io/gid: "1234"
267+
```
268+
Quando um Pod consome um Volume Persistente que tem uma anotação GID, o GID anotado
269+
é aplicado à todos os contêiners no Pod, da mesma forma que as GIDs especificadas no
270+
contexto de segurança em que o Pod está. Cada GID, se é originário de uma anotação
271+
de Volume Persistente ou da especificação do Pod,
272+
é aplicada ao primeiro processo executando em cada contêiner.
273+
274+
{{< note >}}
275+
Quando um Pod consome um Volume Persistente, os GIDs associados ao Volume Persistente
276+
não estiverem presentes no próprio recurso do Pod.
277+
{{< /note >}}
278+
279+
280+
281+
282+
## {{% heading "whatsnext" %}}
283+
284+
285+
* Aprenda mais sobre [Volumes Persistentes](/docs/concepts/storage/persistent-volumes/).
286+
* Leia o [Documento de design de armazenamento persistente](https://git.k8s.io/design-proposals-archive/storage/persistent-storage.md).
287+
288+
### Referência
289+
290+
* [Volume Persistente](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolume-v1-core)
291+
* [`PersistentVolumeSpec`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumespec-v1-core)
292+
* [`PersistentVolumeClaim`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core)
293+
* [`PersistentVolumeClaimSpec`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaimspec-v1-core)
294+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: task-pv-claim
5+
spec:
6+
storageClassName: manual
7+
accessModes:
8+
- ReadWriteOnce
9+
resources:
10+
requests:
11+
storage: 3Gi
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
apiVersion: v1
3+
kind: Pod
4+
metadata:
5+
name: test
6+
spec:
7+
containers:
8+
- name: test
9+
image: nginx
10+
volumeMounts:
11+
# a mount for site-data
12+
- name: config
13+
mountPath: /usr/share/nginx/html
14+
subPath: html
15+
# another mount for nginx config
16+
- name: config
17+
mountPath: /etc/nginx/nginx.conf
18+
subPath: nginx.conf
19+
volumes:
20+
- name: config
21+
persistentVolumeClaim:
22+
claimName: test-nfs-claim
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: task-pv-pod
5+
spec:
6+
volumes:
7+
- name: task-pv-storage
8+
persistentVolumeClaim:
9+
claimName: task-pv-claim
10+
containers:
11+
- name: task-pv-container
12+
image: nginx
13+
ports:
14+
- containerPort: 80
15+
name: "http-server"
16+
volumeMounts:
17+
- mountPath: "/usr/share/nginx/html"
18+
name: task-pv-storage
19+
20+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: PersistentVolume
3+
metadata:
4+
name: task-pv-volume
5+
labels:
6+
type: local
7+
spec:
8+
storageClassName: manual
9+
capacity:
10+
storage: 10Gi
11+
accessModes:
12+
- ReadWriteOnce
13+
hostPath:
14+
path: "/mnt/data"

0 commit comments

Comments
 (0)