Visão geral
Neste laboratório, você vai definir PersistentVolumes e PersistentVolumeClaims. PersistentVolumes são armazenamentos disponíveis para um cluster do Kubernetes. PersistentVolumeClaims permitem que os pods acessem PersistentVolumes. Sem PersistentVolumeClaims, os pods são praticamente efêmeros. Portanto, é necessário usar PersistentVolumeClaims para todos os dados que precisam sobreviver ao escalonamento, à atualização ou à migração do pod.
Objetivos
Neste laboratório, você vai aprender a fazer o seguinte:
- Gerar manifestos para PersistentVolumes (PVs, na sigla em inglês) e PersistentVolumeClaims (PVCs, na sigla em inglês) de discos permanentes do Google Cloud (atuais ou criados dinamicamente)
- Montar PVCs de discos permanentes do Google Cloud como volumes em pods
- Usar manifestos para criar StatefulSets
- Montar PVCs de discos permanentes do Google Cloud como volumes em StatefulSets
- Verificar a conexão dos pods em StatefulSets com PVs particulares conforme os pods são interrompidos e reiniciados
Configuração do laboratório
Acessar o laboratório
Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período sem custo financeiro.
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento.
No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta.
-
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}}
Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}}
Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud.
Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais.
-
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Observação: para acessar uma lista de produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo ou digite o nome do serviço ou produto no campo Pesquisar.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
-
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

-
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- Para listar o nome da conta ativa, use este comando:
gcloud auth list
Saída:
Credentialed accounts:
- @.com (active)
Exemplo de saída:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Para listar o ID do projeto, use este comando:
gcloud config list project
Saída:
[core]
project =
Exemplo de saída:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Observação:
a documentação completa da gcloud está disponível no
guia com informações gerais sobre a gcloud CLI
.
Tarefa 1: Criar PVs e PVCs
Nesta tarefa, você vai criar um PVC, que aciona o Kubernetes para gerar um PV automaticamente.
Conecte ao cluster do GKE do laboratório
- No Cloud Shell, insira o comando a seguir para definir a variável de ambiente da zona e o nome do cluster:
export my_region={{{project_0.default_region|Region}}}
export my_cluster=autopilot-cluster-1
- Configure o preenchimento com tabulação da ferramenta de linha de comando kubectl:
source <(kubectl completion bash)
- Configure o acesso ao cluster para o kubectl:
gcloud container clusters get-credentials $my_cluster --region $my_region
Crie e aplique um manifesto com um PVC
Na maioria das vezes, não é necessário configurar diretamente objetos PV ou criar discos persistentes do Compute Engine. Em vez disso, você pode criar um PVC. O Kubernetes então vai provisionar um disco persistente para você automaticamente.
Vamos criar um PVC de 30 gigabytes chamado hello-web-disk
, que pode ser ativado como um volume de leitura/gravação em um único nó de cada vez.
- Crie e abra um arquivo chamado
pvc-demo.yaml
com nano usando este comando:
nano pvc-demo.yaml
- Quando o nano estiver aberto, cole o seguinte código no arquivo
pvc-demo.yaml
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hello-web-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
-
Pressione Ctrl+O e depois Enter para salvar o arquivo editado.
-
Pressione Ctrl+X para sair do editor de texto nano.
-
Execute o comando a seguir para mostrar que você não tem PVCs:
kubectl get persistentvolumeclaim
Saída:
No resources found in default namespace.
- Execute o comando a seguir para criar o PVC:
kubectl apply -f pvc-demo.yaml
- Execute o comando a seguir para mostrar o PVC recém-criado:
kubectl get persistentvolumeclaim
Saída parcial:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
hello-web-disk Pending standard-rwo unset 15s
Observação: o status vai continuar pendente até a etapa seguinte.
Clique em Verificar meu progresso para conferir o objetivo.
Criar PVs e PVCs
Tarefa 2: Montar e verificar os PVCs dos discos permanentes do Google Cloud em pods
Nesta tarefa, você vai anexar seu PVC do disco permanente a um pod. Você vai ativar o PVC como um volume, como parte do manifesto do pod.
Ativar o PVC em um pod
Crie um arquivo de manifesto pod-volume-demo.yaml
para implantar um contêiner nginx, anexe o pvc-demo-volume
ao pod e ative esse volume para o caminho /var/www/html
no contêiner nginx. Os arquivos nesse diretório dentro do contêiner serão salvos no volume permanente e mantidos, mesmo que o pod e o contêiner sejam encerrados e recriados.
- Crie e abra um arquivo chamado
pod-volume-demo.yaml
com nano usando o seguinte comando:
nano pod-volume-demo.yaml
- Quando o nano estiver aberto, cole o seguinte no arquivo
pod-volume-demo.yaml
:
kind: Pod
apiVersion: v1
metadata:
name: pvc-demo-pod
spec:
containers:
- name: frontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: pvc-demo-volume
volumes:
- name: pvc-demo-volume
persistentVolumeClaim:
claimName: hello-web-disk
-
Pressione Ctrl+O e depois Enter para salvar o arquivo editado.
-
Pressione Ctrl+X para sair do editor de texto nano.
-
Para criar o pod com o volume, execute o comando a seguir:
kubectl apply -f pod-volume-demo.yaml
- Liste os pods do cluster:
kubectl get pods
Saída:
NAME READY STATUS RESTARTS AGE
pvc-demo-pod 0/1 ContainerCreating 0 18s
Se você faz isso logo depois de criar o pod, o status é listado como "ContainerCreating". Já o volume é ativado antes de o status ser alterado para "Running".
- É necessário ter acesso shell ao seu pod para verificar se é possível acessar o PVC nele. Execute o comando a seguir para iniciar a sessão do shell:
kubectl exec -it pvc-demo-pod -- sh
- Digite os comandos a seguir para criar uma mensagem de texto simples como página da Web no pod:
echo Test webpage in a persistent volume!>/var/www/html/index.html
chmod +x /var/www/html/index.html
- Verifique se o arquivo de texto contém sua mensagem:
cat /var/www/html/index.html
Saída:
Test webpage in a persistent volume!
- Digite o comando abaixo para sair do shell interativo no contêiner nginx:
exit
Teste a persistência do PV
Agora, você vai excluir o pod do cluster, confirmar que o PV ainda existe, reimplantar o pod e verificar se os conteúdos do PV permanecem intactos.
- Exclua o pvc-demo-pod:
kubectl delete pod pvc-demo-pod
- Liste os pods do cluster:
kubectl get pods
Saída:
No resources found in default namespace.
Não vai haver pods no cluster.
- Para mostrar seu PVC, execute o comando a seguir:
kubectl get persistentvolumeclaim
Saída parcial:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
hello-web-disk Bound pvc-8...34 30Gi RWO standard-rwo unset 22m
O PVC ainda existe. Ele não foi excluído junto com o pod.
- Implante o pvc-demo-pod de novo:
kubectl apply -f pod-volume-demo.yaml
- Liste os pods do cluster:
kubectl get pods
Saída:
NAME READY STATUS RESTARTS AGE
pvc-demo-pod 1/1 Running 0 15s
O pod vai ser implantado e, desta vez, o status alterado mais rápido para "Running", porque o PV já existe e não precisa ser criado.
- É necessário ter acesso shell ao seu pod para verificar se é possível acessar o PVC nele. Execute o comando a seguir para iniciar a sessão do shell:
kubectl exec -it pvc-demo-pod -- sh
- Para verificar se o arquivo de texto ainda contém sua mensagem, execute o comando a seguir:
cat /var/www/html/index.html
Saída:
Test webpage in a persistent volume!
O conteúdo do volume permanente não foi removido, embora o pod tenha sido excluído do cluster e recriado.
- Digite o comando abaixo para sair do shell interativo no contêiner nginx:
exit
Clique em Verificar meu progresso para ver o objetivo.
Monte e verifique os PVCs dos discos permanentes do Google Cloud em pods
Tarefa 3: Criar StatefulSets com PVCs
Nesta tarefa, você vai usar o PVC em um StatefulSet. O StatefulSet é como uma implantação, mas os pods recebem identificadores exclusivos.
Lance o PVC
- Antes de usar o PVC com o statefulset, você precisa excluir o pod que o está usando. Execute este comando para excluir o pod:
kubectl delete pod pvc-demo-pod
- Confirme se o pod foi removido:
kubectl get pods
Saída:
No resources found in default namespace.
Crie um StatefulSet
Vamos criar um arquivo de manifesto statefulset-demo.yaml
que vai criar um StatefulSet que inclui um serviço LoadBalancer e três réplicas de um pod com um contêiner nginx e um volumeClaimTemplate para PVCs de 30 gigabytes com o nome hello-web-disk
. Os contêineres nginx ativam o PVC chamado hello-web-disk
em /var/www/html
, como na tarefa anterior.
- Crie e abra um arquivo chamado
statefulset-demo.yaml
com nano usando o seguinte comando:
nano statefulset-demo.yaml
- Quando o nano estiver aberto, cole o seguinte no arquivo
statefulset-demo.yaml
:
kind: Service
apiVersion: v1
metadata:
name: statefulset-demo-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-demo
spec:
selector:
matchLabels:
app: MyApp
serviceName: statefulset-demo-service
replicas: 3
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: MyApp
spec:
containers:
- name: stateful-set-container
image: nginx
ports:
- containerPort: 80
name: http
volumeMounts:
- name: hello-web-disk
mountPath: "/var/www/html"
volumeClaimTemplates:
- metadata:
name: hello-web-disk
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
-
Pressione Ctrl+O e depois Enter para salvar o arquivo editado.
-
Pressione Ctrl+X para sair do editor de texto nano.
- Para criar o StatefulSet com o volume, execute o comando a seguir:
kubectl apply -f statefulset-demo.yaml
Saída:
service "statefulset-demo-service" created
statefulset.apps "statefulset-demo" created
Agora você tem um statefulset em execução por trás de um serviço chamado statefulset-demo-service
.
Verifique a conexão dos pods nos StatefulSets
- Use "kubectl describe" para ver os detalhes do StatefulSet:
kubectl describe statefulset statefulset-demo
Veja o status do evento no fim da saída. O serviço e o statefulset foram criados.
Normal SuccessfulCreate 10s statefulset-controller
Message: create Claim hello-web-disk-statefulset-demo-0 Pod statefulset-demo-0 in StatefulSet statefulset-demo success
Normal SuccessfulCreate 10s statefulset-controller
Message: create Pod statefulset-demo-0 in StatefulSet statefulset-demo successful
- Liste os pods do cluster:
kubectl get pods
Saída:
NAME READY STATUS RESTARTS AGE
statefulset-demo-0 1/1 Running 0 6m
statefulset-demo-1 1/1 Running 0 3m
statefulset-demo-2 1/1 Running 0 2m
- Para listar os PVCs, execute o comando a seguir:
kubectl get pvc
Saída:
NAME STATUS VOLUME CAPACITY ACCESS
hello-web-disk Bound pvc-86117ea6-...34 30Gi RWO
hello-web-disk-st...-demo-0 Bound pvc-92d21d0f-...34 30Gi RWO
hello-web-disk-st...-demo-1 Bound pvc-9bc84d92-...34 30Gi RWO
hello-web-disk-st...-demo-2 Bound pvc-a526ecdf-...34 30Gi RWO
O hello-web-disk original ainda está presente, e agora é possível ver os PVCs individuais criados para cada pod no novo pod do statefulset.
- Use "kubectl describe" para ver os detalhes do primeiro PVC no StatefulSet:
kubectl describe pvc hello-web-disk-statefulset-demo-0
Clique em Verificar meu progresso para ver o objetivo.
Crie StatefulSets com PVCs
Tarefa 4: Verificar a persistência das conexões dos volumes permanentes com os pods gerenciados por StatefulSets
Nesta tarefa, você vai verificar a conexão dos pods nos StatefulSets com os PVs particulares quando os pods são interrompidos e reiniciados.
- É necessário ter acesso shell ao seu pod para verificar se é possível acessar o PVC nele. Execute o comando a seguir para iniciar a sessão do shell:
kubectl exec -it statefulset-demo-0 -- sh
- Verifique se não há arquivos de texto
index.html
no diretório /var/www/html
:
cat /var/www/html/index.html
- Digite os comandos a seguir para criar uma mensagem de texto simples como página da Web no pod:
echo Test webpage in a persistent volume!>/var/www/html/index.html
chmod +x /var/www/html/index.html
- Verifique se o arquivo de texto contém sua mensagem:
cat /var/www/html/index.html
Saída:
Test webpage in a persistent volume!
- Digite o comando abaixo para sair do shell interativo no contêiner nginx:
exit
- Exclua o pod em que o arquivo foi atualizado no PVC:
kubectl delete pod statefulset-demo-0
- Liste os pods do cluster:
kubectl get pods
Você vai ver que o StatefulSet reinicia automaticamente o pod statefulset-demo-0
.
Observação: aguarde até o status do pod mostrar que ele está novamente em execução.
- Conecte-se ao shell no novo pod
statefulset-demo-0
:
kubectl exec -it statefulset-demo-0 -- sh
- Verifique se o arquivo de texto ainda contém sua mensagem:
cat /var/www/html/index.html
Saída:
Test webpage in a persistent volume!
O StatefulSet reinicia o pod e reconecta o PVC dedicado ao novo pod, garantindo a preservação dos dados dele.
- Digite o comando abaixo para sair do shell interativo no contêiner nginx:
exit
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
- 1 estrela = muito insatisfeito
- 2 estrelas = insatisfeito
- 3 estrelas = neutro
- 4 estrelas = satisfeito
- 5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.