Skip to content

Commit 6fbe138

Browse files
authored
Merge pull request #35116 from DonatoHorn/ptbr/persv
[pt-br] Add docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
2 parents 3b95024 + 3971f16 commit 6fbe138

File tree

5 files changed

+354
-0
lines changed

5 files changed

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