Buscar

Kubernetes - Kubernetesio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 184 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 184 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 184 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Documentação
1: Kubernetes
1.1: Versões Suportadas da Documentação do Kubernetes
2: Instalação
3: Conceitos
3.1: Visão Geral
3.1.1: O que é Kubernetes?
3.1.2: Componentes do Kubernetes
3.1.3: Objetos do Kubernetes
3.1.3.1: Nomes
3.2: Volumes Persistentes
3.3: Arquitetura do Kubernetes
3.3.1: Comunicação entre Nó e Control Plane
3.3.2: Conceitos sobre Cloud Controller Manager
3.3.3: Controladores
3.4: Contêineres
3.4.1: Imagens
3.4.2: Ambiente de Contêiner
3.4.3: Classes de execução
3.4.4: Hooks de Ciclo de Vida do Contêiner
3.5: Serviços, balanceamento de carga e conectividade
3.5.1: Políticas de rede
3.6: Con�guração
3.6.1: Melhores Práticas de Con�guração
3.6.2: Con�gMaps
3.6.3: Organizando o acesso ao cluster usando arquivos kubecon�g
3.7: Segurança
3.7.1: Visão Geral da Segurança Cloud Native
3.8: Escalonamento
3.8.1: Escalonador do Kubernetes
3.8.2: Sobrecarga de Pod
3.9: Administração de Cluster
3.9.1: Visão Geral da Administração de Cluster
3.9.2: Certi�cates
3.9.3: Conectividade do Cluster
3.9.4: Arquitetura de Log
3.9.5: Logs de Sistema
3.9.6: Con�gurando o Garbage Collection do kubelet
3.9.7: Instalando Complementos
3.10: Extendendo o Kubernetes
3.10.1: Extendendo a API do Kubernetes
3.10.1.1: Extendendo a API do Kubernetes com a camada de agregação
3.10.2: Extensões de Computação, armazenamento e redes
3.10.2.1: Plugins de rede
3.10.3: Padrão Operador
4: Tarefas
4.1: Gerenciando Secrets
4.1.1: Gerenciando Secret usando kubectl
4.1.2: Gerenciando Secret usando Arquivo de Con�guração
4.1.3: Gerenciando Secret usando Kustomize
5: Tutoriais
5.1: Olá, Minikube!
5.2: Aprenda as noções básicas do Kubernetes
5.2.1: Crie um Cluster
5.2.1.1: Usando Minikube para criar um cluster
5.2.1.2: Tutorial interativo - Criando um cluster
5.2.2: Implantar um aplicativo
5.2.2.1: Usando kubectl para criar uma implantação
5.2.2.2: Tutorial interativo - implantando um aplicativo
5.2.3: Explore seu aplicativo
5.2.3.1: Visualizando Pods e Nós (Nodes)
5.2.3.2: Tutorial Interativo - Explorando seu aplicativo
5.2.4: Exponha publicamente seu aplicativo
5.2.4.1: Utilizando um serviço para expor seu aplicativo
5.2.4.2: Tutorial Interativo - Expondo seu aplicativo
5.2.5: Escale seu aplicativo
5.2.5.1: Executando múltiplas instâncias de seu aplicativo
5.2.5.2: Tutorial Interativo - Escalando seu aplicativo
6: Referência
6.1: Glossário
6.2: Autenticação
6.3: Autenticando com Tokens de Inicialização
6.4: kubectl CLI
6.4.1: kubectl Cheat Sheet
6.5: Ferramentas
7: Contribua com a documentação do Kubernetes
7.1: Visualizando Analytics do Site
8:
9: Resultados da pesquisa
à documentação do Kubernetes em Português
pode ver, a maior parte da documentação ainda está disponível apenas em inglês, mas não se
á uma equipe trabalhando na tradução para o português.
er participar, você pode entrar no canal Slack #kubernetes-docs-pt (http://slack.kubernetes.io/) e fazer
uipe por trás da tradução.
m pode acessar o canal para solicitar a tradução de uma página especí�ca ou relatar qualquer erro que
do encontrado. Qualquer contribuição será bem recebida!
formações sobre como contribuir, dê uma olhada github.com/kubernetes/website
ub.com/kubernetes/website/).
http://slack.kubernetes.io/
https://github.com/kubernetes/website/
1 - Kubernetes
1.1 - Versões Suportadas da Documentação
do Kubernetes
Este site contém documentação para a versão atual do Kubernetes e as quatro versões anteriores do
Kubernetes.
Versão Atual
A versão atual é v1.22 (/).
Versões anteriores
v1.21 (https://v1-21.docs.kubernetes.io)
v1.20 (https://v1-20.docs.kubernetes.io)
v1.19 (https://v1-19.docs.kubernetes.io)
v1.18 (https://v1-18.docs.kubernetes.io)
https://kubernetes.io/
https://v1-21.docs.kubernetes.io/
https://v1-20.docs.kubernetes.io/
https://v1-19.docs.kubernetes.io/
https://v1-18.docs.kubernetes.io/
2 - Instalação
Essa seção lista as diferentes formas de instalar e executar o Kubernetes. Quando você realiza a
instalação de um cluster Kubernetes, deve decidir o tipo de instalação baseado em critérios como
facilidade de manutenção, segurança, controle, quantidade de recursos disponíveis e a experiência
necessária para gerenciar e operar o cluster.
Você pode criar um cluster Kubernetes em uma máquina local, na nuvem, em um datacenter on-
premises ou ainda escolher uma oferta de um cluster Kubernetes gerenciado pelo seu provedor de
computação em nuvem.
Existem ainda diversos outros tipos de soluções customizadas, que você pode se deparar ao buscar
formas de instalação e gerenciamento de seu cluster.
Ambientes de aprendizado
Se você está aprendendo ou pretende aprender mais sobre o Kubernetes, use ferramentas suportadas
pela comunidade, ou ferramentas no ecossistema que te permitam criar um cluster Kubernetes em sua
máquina virtual.
Temos como exemplo aqui o Minikube (/docs/tasks/tools/install-minikube/) e o KinD
(https://kind.sigs.k8s.io/docs/user/quick-start/)
Ambientes de produção
Ao analisar uma solução para um ambiente de produção, devem ser considerados quais aspectos de
operação de um cluster Kubernetes você deseja gerenciar, ou então delegar ao seu provedor.
Temos diversas opções para esse provisionamento, desde o uso de uma ferramenta de deployment de
um cluster tal qual o Kubeadm (/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
ou o Kubespray (/docs/setup/production-environment/tools/kubespray/) quando se trata de um cluster
local, ou ainda o uso de um cluster gerenciado por seu provedor de nuvem.
Para a escolha do melhor ambiente e da melhor forma para fazer essa instalação, você deve considerar:
Se você deseja se preocupar com a gestão de backup da sua estrutura do ambiente de
gerenciamento
Se você deseja ter um cluster mais atualizado, com novas funcionalidades, ou se deseja seguir a
versão suportada pelo fornecedor
Se você deseja ter um cluster com um alto nível de serviço, ou com auto provisionamento de alta
disponibilidade
Quanto você deseja pagar por essa produção
https://kubernetes.io/docs/tasks/tools/install-minikube/
https://kind.sigs.k8s.io/docs/user/quick-start/
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://kubernetes.io/docs/setup/production-environment/tools/kubespray/
3 - Conceitos
A seção de Conceitos irá te ajudar a aprender mais sobre as partes do ecossistema Kubernetes e as
abstrações que o Kubernetes usa para representar seu 
cluster (/pt-br/docs/reference/glossary/?all=true#term-cluster).
Ela irá lhe ajudar a obter um entendimento mais profundo sobre como o Kubernetes funciona.
3.1 - Visão Geral
Obtenha uma visão em alto-nível do Kubernetes e dos componentes a partir dos
quais ele é construído.
3.1.1 - O que é Kubernetes?
Kubernetes é um plataforma de código aberto, portável e extensiva para o
gerenciamento de cargas de trabalho e serviços distribuídos em contêineres, que
facilita tanto a con�guração declarativa quanto a automação. Ele possui um
ecossistema grande, e de rápido crescimento. Serviços, suporte, e ferramentas
para Kubernetes estão amplamente disponíveis.
Essa página é uma visão geral do Kubernetes.
Kubernetes é um plataforma de código aberto, portável e extensiva para o gerenciamento de cargas de
trabalho e serviços distribuídos em contêineres, que facilita tanto a con�guração declarativa quanto a
automação. Ele possui um ecossistema grande, e de rápido crescimento. Serviços, suporte, e
ferramentas para Kubernetes estão amplamente disponíveis.
O Google tornou Kubernetes um projeto de código-aberto em 2014. O Kubernetes combina mais de 15
anos de experiência do Google (/blog/2015/04/borg-predecessor-to-kubernetes/) executando cargas de
trabalho produtivas em escala, com as melhores idéias e práticas da comunidade.
O nome Kubernetes tem origem no Grego, signi�cando timoneiro ou piloto. K8s é a abreviação derivada
pela troca das oito letras "ubernete" por "8", se tornado K"8"s.
Voltando no tempo
Vamos daruma olhada no porque o Kubernetes é tão útil, voltando no tempo.
Era da implantação tradicional: No início, as organizações executavam aplicações em servidores
físicos. Não havia como de�nir limites de recursos para aplicações em um mesmo servidor físico, e isso
causava problemas de alocação de recursos. Por exemplo, se várias aplicações fossem executadas em
um mesmo servidor físico, poderia haver situações em que uma aplicação ocupasse a maior parte dos
recursos e, como resultado, o desempenho das outras aplicações seria inferior. Uma solução para isso
seria executar cada aplicação em um servidor físico diferente. Mas isso não escalava, pois os recursos
eram subutilizados, e se tornava custoso para as organizações manter muitos servidores físicos.
Era da implantação virtualizada: Como solução, a virtualização foi introduzida. Esse modelo permite
que você execute várias máquinas virtuais (VMs) em uma única CPU de um servidor físico. A
virtualização permite que as aplicações sejam isoladas entre as VMs, e ainda fornece um nível de
segurança, pois as informações de uma aplicação não podem ser acessadas livremente por outras
aplicações.
https://kubernetes.io/pt-br/docs/reference/glossary/?all=true#term-cluster
https://kubernetes.io/blog/2015/04/borg-predecessor-to-kubernetes/
A virtualização permite melhor utilização de recursos em um servidor físico, e permite melhor
escalabilidade porque uma aplicação pode ser adicionada ou atualizada facilmente, reduz os custos de
hardware e muito mais. Com a virtualização, você pode apresentar um conjunto de recursos físicos
como um cluster de máquinas virtuais descartáveis.
Cada VM é uma máquina completa que executa todos os componentes, incluindo seu próprio sistema
operacional, além do hardware virtualizado.
Era da implantação em contêineres: Contêineres são semelhantes às VMs, mas têm propriedades de
isolamento �exibilizados para compartilhar o sistema operacional (SO) entre as aplicações. Portanto, os
contêineres são considerados leves. Semelhante a uma VM, um contêiner tem seu próprio sistema de
arquivos, compartilhamento de CPU, memória, espaço de processo e muito mais. Como eles estão
separados da infraestrutura subjacente, eles são portáveis entre nuvens e distribuições de sistema
operacional.
Contêineres se tornaram populares porque eles fornecem benefícios extra, tais como:
Criação e implantação ágil de aplicações: aumento da facilidade e e�ciência na criação de imagem
de contêiner comparado ao uso de imagem de VM.
Desenvolvimento, integração e implantação contínuos: fornece capacidade de criação e de
implantação de imagens de contêiner de forma con�ável e frequente, com a funcionalidade de
efetuar reversões rápidas e e�cientes (devido à imutabilidade da imagem).
Separação de interesses entre Desenvolvimento e Operações: crie imagens de contêineres de
aplicações no momento de construção/liberação em vez de no momento de implantação,
desacoplando as aplicações da infraestrutura.
A capacidade de observação (Observabilidade) não apenas apresenta informações e métricas no
nível do sistema operacional, mas também a integridade da aplicação e outros sinais.
Consistência ambiental entre desenvolvimento, teste e produção: funciona da mesma forma em
um laptop e na nuvem.
Portabilidade de distribuição de nuvem e sistema operacional: executa no Ubuntu, RHEL, CoreOS,
localmente, nas principais nuvens públicas e em qualquer outro lugar.
Gerenciamento centrado em aplicações: eleva o nível de abstração da execução em um sistema
operacional em hardware virtualizado à execução de uma aplicação em um sistema operacional
usando recursos lógicos.
Microserviços fracamente acoplados, distribuídos, elásticos e livres: as aplicações são divididas em
partes menores e independentes e podem ser implantados e gerenciados dinamicamente - não
uma pilha monolítica em execução em uma grande máquina de propósito único.
Isolamento de recursos: desempenho previsível de aplicações.
Utilização de recursos: alta e�ciência e densidade.
Por que você precisa do Kubernetes e o que ele pode
fazer
Os contêineres são uma boa maneira de agrupar e executar suas aplicações. Em um ambiente de
produção, você precisa gerenciar os contêineres que executam as aplicações e garantir que não haja
tempo de inatividade. Por exemplo, se um contêiner cair, outro contêiner precisa ser iniciado. Não seria
mais fácil se esse comportamento fosse controlado por um sistema?
É assim que o Kubernetes vem ao resgate! O Kubernetes oferece uma estrutura para executar sistemas
distribuídos de forma resiliente. Ele cuida do escalonamento e do recuperação à falha de sua aplicação,
fornece padrões de implantação e muito mais. Por exemplo, o Kubernetes pode gerenciar facilmente
uma implantação no método canário para seu sistema.
O Kubernetes oferece a você:
Descoberta de serviço e balanceamento de carga O Kubernetes pode expor um contêiner
usando o nome DNS ou seu próprio endereço IP. Se o tráfego para um contêiner for alto, o
Kubernetes pode balancear a carga e distribuir o tráfego de rede para que a implantação seja
estável.
Orquestração de armazenamento O Kubernetes permite que você monte automaticamente um
sistema de armazenamento de sua escolha, como armazenamentos locais, provedores de nuvem
pública e muito mais.
Lançamentos e reversões automatizadas Você pode descrever o estado desejado para seus
contêineres implantados usando o Kubernetes, e ele pode alterar o estado real para o estado
desejado em um ritmo controlada. Por exemplo, você pode automatizar o Kubernetes para criar
novos contêineres para sua implantação, remover os contêineres existentes e adotar todos os
seus recursos para o novo contêiner.
Empacotamento binário automático Você fornece ao Kubernetes um cluster de nós que pode
ser usado para executar tarefas nos contêineres. Você informa ao Kubernetes de quanta CPU e
memória (RAM) cada contêiner precisa. O Kubernetes pode encaixar contêineres em seus nós para
fazer o melhor uso de seus recursos.
Autocorreção O Kubernetes reinicia os contêineres que falham, substitui os contêineres, elimina
os contêineres que não respondem à veri�cação de integridade de�nida pelo usuário e não os
anuncia aos clientes até que estejam prontos para servir.
Gerenciamento de con�guração e de segredos O Kubernetes permite armazenar e gerenciar
informações con�denciais, como senhas, tokens OAuth e chaves SSH. Você pode implantar e
atualizar segredos e con�guração de aplicações sem reconstruir suas imagens de contêiner e sem
expor segredos em sua pilha de con�guração.
O que o Kubernetes não é
O Kubernetes não é um sistema PaaS (plataforma como serviço) tradicional e completo. Como o
Kubernetes opera no nível do contêiner, e não no nível do hardware, ele fornece alguns recursos
geralmente aplicáveis comuns às ofertas de PaaS, como implantação, escalonamento, balanceamento
de carga, e permite que os usuários integrem suas soluções de logging, monitoramento e alerta. No
entanto, o Kubernetes não é monolítico, e essas soluções padrão são opcionais e conectáveis. O
Kubernetes fornece os blocos de construção para a construção de plataformas de desenvolvimento,
mas preserva a escolha e �exibilidade do usuário onde é importante.
Kubernetes:
Não limita os tipos de aplicações suportadas. O Kubernetes visa oferecer suporte a uma variedade
extremamente diversa de cargas de trabalho, incluindo cargas de trabalho sem estado, com
estado e de processamento de dados. Se uma aplicação puder ser executada em um contêiner, ele
deve ser executado perfeitamente no Kubernetes.
Não implanta código-fonte e não constrói sua aplicação. Os �uxos de trabalho de integração
contínua, entrega e implantação (CI/CD) são determinados pelas culturas e preferências da
organização, bem como pelos requisitos técnicos.
Não fornece serviços em nível de aplicação, tais como middleware (por exemplo, barramentos de
mensagem), estruturas de processamento de dados (por exemplo,Spark), bancos de dados (por
exemplo, MySQL), caches, nem sistemas de armazenamento em cluster (por exemplo, Ceph), como
serviços integrados. Esses componentes podem ser executados no Kubernetes e/ou podem ser
acessados por aplicações executadas no Kubernetes por meio de mecanismos portáteis, como o
Open Service Broker (https://openservicebrokerapi.org/).
Não dita soluções de logging, monitoramento ou alerta. Ele fornece algumas integrações como
prova de conceito e mecanismos para coletar e exportar métricas.
Não fornece nem exige um sistema/idioma de con�guração (por exemplo, Jsonnet). Ele fornece
uma API declarativa que pode ser direcionada por formas arbitrárias de especi�cações
declarativas.
Não fornece nem adota sistemas abrangentes de con�guração de máquinas, manutenção,
gerenciamento ou autocorreção.
Adicionalmente, o Kubernetes não é um mero sistema de orquestração. Na verdade, ele elimina a
necessidade de orquestração. A de�nição técnica de orquestração é a execução de um �uxo de
trabalho de�nido: primeiro faça A, depois B e depois C. Em contraste, o Kubernetes compreende
um conjunto de processos de controle independentes e combináveis que conduzem
continuamente o estado atual em direção ao estado desejado fornecido. Não importa como você
vai de A para C. O controle centralizado também não é necessário. Isso resulta em um sistema que
é mais fácil de usar e mais poderoso, robusto, resiliente e extensível.
Qual é o próximo
Dê uma olhada em Componentes do Kubernetes (/pt-br/docs/concepts/overview/components/).
Pronto para Iniciar (/docs/setup/)?
https://openservicebrokerapi.org/
https://kubernetes.io/pt-br/docs/concepts/overview/components/
https://kubernetes.io/docs/setup/
3.1.2 - Componentes do Kubernetes
Um cluster Kubernetes consiste de componentes que representam a camada de
gerenciamento, e um conjunto de máquinas chamadas nós.
Ao implantar o Kubernetes, você obtém um cluster.
Um cluster Kubernetes consiste em um conjunto de servidores de processamento, chamados 
nós (/docs/concepts/architecture/nodes/), que executam aplicações containerizadas. Todo cluster
possui ao menos um servidor de processamento (worker node).
O servidor de processamento hospeda os Pods (/docs/concepts/workloads/pods/) que são
componentes de uma aplicação. O 
ambiente de gerenciamento (/pt-br/docs/reference/glossary/?all=true#term-control-plane) gerencia os
nós de processamento e os Pods no cluster. Em ambientes de produção, o ambiente de gerenciamento
geralmente executa em múltiplos computadores e um cluster geralmente executa em múltiplos nós
(nodes) , provendo tolerância a falhas e alta disponibilidade.
Este documento descreve os vários componentes que você precisa ter para implantar um cluster
Kubernetes completo e funcional.
Esse é o diagrama de um cluster Kubernetes com todos os componentes interligados.
k-proxy
kubelet
sched
schedsched
Control Plane
Node
etcd
Kubernetes cluster
api
api
api
c-c-m
c-c-m
c-c-m
c-m
c-m
c-m
Node Node
k-proxy
kubelet kubelet
k-proxy
Control plane
Scheduler
sched
Cloud controller
manager
(optional) c-c-m
Controller
manager c-m
kubelet
kubelet
kube-proxy
k-proxy
(persistence store)
etcd
etcd
Node
API server
api
Componentes da camada de gerenciamento
Os componentes da camada de gerenciamento tomam decisões globais sobre o cluster (por exemplo,
agendamento de pods), bem como detectam e respondem aos eventos do cluster (por exemplo,
iniciando um novo pod (/docs/concepts/workloads/pods/) quando o campo replicas de um Deployment
não está atendido).
Os componentes da camada de gerenciamento podem ser executados em qualquer máquina do
cluster. Contudo, para simpli�car, os scripts de con�guração normalmente iniciam todos os
componentes da camada de gerenciamento na mesma máquina, e não executa contêineres de usuário
nesta máquina. Veja Construindo clusters de alta disponibilidade (/docs/admin/high-availability/) para
um exemplo de con�guração de múltiplas VMs para camada de gerenciamento (multi-main-VM).
kube-apiserver
O servidor de API é um componente da 
Camada de gerenciamento (/pt-br/docs/reference/glossary/?all=true#term-control-plane) do Kubernetes
que expõe a API do Kubernetes. O servidor de API é o front end para a camada de gerenciamento do
Kubernetes.
A principal implementação de um servidor de API do Kubernetes é kube-apiserver
(/docs/reference/generated/kube-apiserver/). O kube-apiserver foi projetado para ser escalonado
horizontalmente — ou seja, ele pode ser escalado com a implantação de mais instâncias. Você pode
executar várias instâncias do kube-apiserver e balancear (balanceamento de carga, etc) o tráfego entre
essas instâncias.
etcd
https://kubernetes.io/docs/concepts/architecture/nodes/
https://kubernetes.io/docs/concepts/workloads/pods/
https://kubernetes.io/pt-br/docs/reference/glossary/?all=true#term-control-plane
https://kubernetes.io/docs/concepts/workloads/pods/
https://kubernetes.io/docs/admin/high-availability/
https://kubernetes.io/pt-br/docs/reference/glossary/?all=true#term-control-plane
https://kubernetes.io/docs/reference/generated/kube-apiserver/
Armazenamento do tipo Chave-Valor consistente e em alta-disponibilidade usado como repositório de
apoio do Kubernetes para todos os dados do cluster.
Se o seu cluster Kubernetes usa etcd como seu armazenamento de apoio, certi�que-se de ter um plano
de back up (/docs/tasks/administer-cluster/con�gure-upgrade-etcd/#backing-up-an-etcd-cluster) para
seus dados.
Você pode encontrar informações detalhadas sobre o etcd na seção o�cial da documentação
(https://etcd.io/docs/).
kube-scheduler
Componente da camada de gerenciamento que observa os pods (/docs/concepts/workloads/pods/) recém-
criados sem nenhum nó (/docs/concepts/architecture/nodes/) atribuído, e seleciona um nó para
executá-los.
Os fatores levados em consideração para as decisões de agendamento incluem: requisitos de recursos
individuais e coletivos, hardware/software/política de restrições, especi�cações de a�nidade e
antia�nidade, localidade de dados, interferência entre cargas de trabalho, e prazos.
kube-controller-manager
Componente da camada de gerenciamento que executa os processos de 
controlador (/docs/concepts/architecture/controller/).
Logicamente, cada controlador (/docs/concepts/architecture/controller/) está em um processo separado,
mas para reduzir a complexidade, eles todos são compilados num único binário e executam em um
processo único.
Alguns tipos desses controladores são:
Controlador de nó: responsável por perceber e responder quando os nós caem.
Controlador de Job: Observa os objetos Job que representam tarefas únicas e, em seguida, cria
pods para executar essas tarefas até a conclusão.
Controlador de endpoints: preenche o objeto Endpoints (ou seja, junta os Serviços e os pods).
Controladores de conta de serviço e de token: crie contas padrão e tokens de acesso de API para
novos namespaces.
cloud-controller-manager
Um componente da 
camada de gerenciamento (/pt-br/docs/reference/glossary/?all=true#term-control-plane) do Kubernetes
que incorpora a lógica de controle especí�ca da nuvem. O gerenciador de controle de nuvem permite
que você vincule seu cluster na API do seu provedor de nuvem, e separar os componentes que
interagem com essa plataforma de nuvem a partir de componentes que apenas interagem com seu
cluster.
O cloud-controller-manager executa apenas controladores que são especí�cos para seu provedor de
nuvem. Se você estiver executando o Kubernetes em suas próprias instalações ou em um ambiente de
aprendizagem dentro de seu próprio PC, o cluster não possui um gerenciador de controlador de nuvem.
Tal como acontece com o kube-controller-manager, o cloud-controller-manager combina vários ciclos de
controle logicamente independentes em um binário único que você executa como um processo único.
Você pode escalar horizontalmente (exectuar mais de uma cópia) para melhorar o desempenho ou para
auxiliar na tolerânciaa falhas.
Os seguintes controladores podem ter dependências de provedor de nuvem:
Controlador de nó: para veri�car junto ao provedor de nuvem para determinar se um nó foi
excluído da nuvem após parar de responder.
Controlador de rota: para con�gurar rotas na infraestrutura de nuvem subjacente.
Controlador de serviço: Para criar, atualizar e excluir balanceadores de carga do provedor de
nuvem.
Node Components
Os componentes de nó são executados em todos os nós, mantendo os pods em execução e fornecendo
o ambiente de execução do Kubernetes.
https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster
https://etcd.io/docs/
https://kubernetes.io/docs/concepts/workloads/pods/
https://kubernetes.io/docs/concepts/architecture/nodes/
https://kubernetes.io/docs/concepts/architecture/controller/
https://kubernetes.io/docs/concepts/architecture/controller/
https://kubernetes.io/pt-br/docs/reference/glossary/?all=true#term-control-plane
kubelet
Um agente que é executado em cada node (/docs/concepts/architecture/nodes/) no cluster. Ele garante
que os contêineres (/docs/concepts/containers/) estejam sendo executados em um 
Pod (/docs/concepts/workloads/pods/).
O kubelet utiliza um conjunto de PodSpecs que são fornecidos por vários mecanismos e garante que os
contêineres descritos nesses PodSpecs estejam funcionando corretamente. O kubelet não gerencia
contêineres que não foram criados pelo Kubernetes.
kube-proxy
kube-proxy é um proxy de rede executado em cada nó (/docs/concepts/architecture/nodes/) no seu
cluster, implementando parte do conceito de serviço (/docs/concepts/services-networking/service/) do
Kubernetes.
kube-proxy (/docs/reference/command-line-tools-reference/kube-proxy/) mantém regras de rede nos
nós. Estas regras de rede permitem a comunicação de rede com seus pods a partir de sessões de rede
dentro ou fora de seu cluster.
kube-proxy usa a camada de �ltragem de pacotes do sistema operacional se houver uma e estiver
disponível. Caso contrário, o kube-proxy encaminha o tráfego ele mesmo.
Container runtime
O agente de execução (runtime) de contêiner é o software responsável por executar os contêineres.
O Kubernetes suporta diversos agentes de execução de contêineres: 
Docker (https://docs.docker.com/engine/), containerd (https://containerd.io/docs/), 
CRI-O (https://cri-o.io/#what-is-cri-o), e qualquer implementação do Kubernetes CRI (Container Runtime
Interface) (https://github.com/kubernetes/community/blob/master/contributors/devel/sig-
node/container-runtime-interface.md).
Addons
Complementos (addons) usam recursos do Kubernetes (
DaemonSet (/docs/concepts/workloads/controllers/daemonset), 
Deployment (/docs/concepts/workloads/controllers/deployment/), etc) para implementar
funcionalidades do cluster. Como fornecem funcionalidades em nível do cluster, recursos de addons que
necessitem ser criados dentro de um namespace pertencem ao namespace kube-system .
Alguns addons selecionados são descritos abaixo; para uma lista estendida dos addons disponíveis, por
favor consulte Addons (/docs/concepts/cluster-administration/addons/).
DNS
Embora os outros complementos não sejam estritamente necessários, todos os clusters do Kubernetes
devem ter um DNS do cluster (/docs/concepts/services-networking/dns-pod-service/), já que muitos
exemplos dependem disso.
O DNS do cluster é um servidor DNS, além de outros servidores DNS em seu ambiente, que fornece
registros DNS para serviços do Kubernetes.
Os contêineres iniciados pelo Kubernetes incluem automaticamente esse servidor DNS em suas
pesquisas DNS.
Web UI (Dashboard)
Dashboard (/docs/tasks/access-application-cluster/web-ui-dashboard/) é uma interface de usuário Web,
de uso geral, para clusters do Kubernetes. Ele permite que os usuários gerenciem e solucionem
problemas de aplicações em execução no cluster, bem como o próprio cluster.
Monitoramento de recursos do contêiner
Monitoramento de recursos do contêiner (/docs/tasks/debug-application-cluster/resource-usage-
monitoring/) registra métricas de série temporal genéricas sobre os contêineres em um banco de dados
central e fornece uma interface de usuário para navegar por esses dados.
https://kubernetes.io/docs/concepts/architecture/nodes/
https://kubernetes.io/docs/concepts/containers/
https://kubernetes.io/docs/concepts/workloads/pods/
https://kubernetes.io/docs/concepts/architecture/nodes/
https://kubernetes.io/docs/concepts/services-networking/service/
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/
https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md
https://docs.docker.com/engine/
https://containerd.io/docs/
https://cri-o.io/#what-is-cri-o
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
https://kubernetes.io/docs/concepts/cluster-administration/addons/
https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/
Logging a nivel do cluster
Um mecanismo de logging a nível do cluster (/docs/concepts/cluster-administration/logging/) é
responsável por guardar os logs dos contêineres em um armazenamento central de logs com um
interface para navegação/pesquisa.
Qual é o próximo
Aprenda sobre Nós (/docs/concepts/architecture/nodes/).
Aprenda sobre Controladores (/docs/concepts/architecture/controller/).
Aprenda sobre kube-scheduler (/docs/concepts/scheduling-eviction/kube-scheduler/).
Leia a documentação (https://etcd.io/docs/) o�cial do etcd.
https://kubernetes.io/docs/concepts/cluster-administration/logging/
https://kubernetes.io/docs/concepts/architecture/nodes/
https://kubernetes.io/docs/concepts/architecture/controller/
https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/
https://etcd.io/docs/
3.1.3 - Objetos do Kubernetes
3.1.3.1 - Nomes
Cada objeto em um cluster possui um Nome que é único para aquele tipo de recurso. Todo objeto do
Kubernetes também possui um UID que é único para todo o cluster.
Por exemplo, você pode ter apenas um Pod chamado "myapp-1234", porém você pode ter um Pod e um
Deployment ambos com o nome "myapp-1234".
Para atributos não únicos providenciados por usuário, Kubernetes providencia labels
(/docs/concepts/overview/working-with-objects/labels/) e annotations
(/docs/concepts/overview/working-with-objects/annotations/).
Nomes
Recursos Kubernetes podem ter nomes com até 253 caracteres. Os caracteres permitidos em nomes
são: dígitos (0-9), letras minúsculas (a-z), - , e . .
A seguir, um exemplo para um Pod chamado nginx-demo .
Nota: Alguns tipos de recursos possuem restrições adicionais em seus nomes.
UIDs
Kubernetes UIDs são identi�cadores únicos universais (também chamados de UUIDs). UUIDs utilizam
padrões ISO/IEC 9834-8 e ITU-T X.667.
Qual é o próximo
Leia sobre labels (/docs/concepts/overview/working-with-objects/labels/) em Kubernetes.
Consulte o documento de design Identi�cadores e Nomes em Kubernetes
(https://git.k8s.io/community/contributors/design-proposals/architecture/identi�ers.md).
apiVersion: v1 
kind: Pod 
metadata: 
 name: nginx-demo 
spec:
 containers: 
 - name: nginx 
 image: nginx:1.7.9 
 ports:
 - containerPort: 80 
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
https://git.k8s.io/community/contributors/design-proposals/architecture/identifiers.md
3.2 - Volumes Persistentes
Esse documento descreve o estado atual dos volumes persistentes no Kubernetes. Sugerimos que esteja
familiarizado com volumes (/docs/concepts/storage/volumes/).
Introdução
O gerenciamento de armazenamentoé uma questão bem diferente do gerenciamento de instâncias
computacionais. O subsistema PersistentVolume provê uma API para usuários e administradores que
mostra de forma detalhada de como o armazenamento é provido e como ele é consumido. Para isso,
nós introduzimos duas novas APIs: PersistentVolume e PersistentVolumeClaim.
Um PersistentVolume (PV) é uma parte do armazenamento dentro do cluster que tenha sido
provisionada por um administrador, ou dinamicamente utilizando Classes de Armazenamento
(/docs/concepts/storage/storage-classes/). Isso é um recurso dentro do cluster da mesma forma que um
nó também é. PVs são plugins de volume da mesma forma que Volumes, porém eles têm um ciclo de
vida independente de qualquer Pod que utilize um PV. Essa API tem por objetivo mostrar os detalhes da
implementação do armazenamento, seja ele NFS, iSCSI, ou um armazenamento especí�co de um
provedor de cloud pública.
Uma_PersistentVolumeClaim_ (PVC) é uma requisição para armazenamento por um usuário. É similar a
um Pod. Pods utilizam recursos do nó e PVCs utilizam recursos do PV. Pods podem solicitar níveis
especí�cos de recursos (CPU e Memória). Claims podem solicitar tamanho e modos de acesso
especí�cos (exemplo: montagem como ReadWriteOnce, ReadOnlyMany ou ReadWriteMany, veja Modos
de Acesso).
Enquanto as PersistentVolumeClaims permitem que um usuário utilize recursos de armazenamento de
forma limitada, é comum que usuários precisem de PersistentVolumes com diversas propriedades,
como desempenho, para problemas diversos. Os administradores de cluster precisam estar aptos a
oferecer uma variedade de PersistentVolumes que di�ram em tamanho e modo de acesso, sem expor
os usuários a detalhes de como esses volumes são implementados. Para necessidades como essas,
temos o recurso de StorageClass.
Veja os exemplos de passo a passo de forma detalhada (/docs/tasks/con�gure-pod-container/con�gure-
persistent-volume-storage/).
Requisição e ciclo de vida de um volume
PVs são recursos dentro um cluster. PVCs são requisições para esses recursos e também atuam como
uma validação da solicitação desses recursos. O ciclo de vida da interação entre PVs e PVCs funcionam
da seguinte forma:
Provisionamento
Existem duas formas de provisionar um PV: estaticamente ou dinamicamente.
Estático
O administrador do cluster cria uma determinada quantidade de PVs. Eles possuem todos os detalhes
do armazenamento os quais estão atrelados, que neste caso �ca disponível para utilização por um
usuário dentro do cluster. Eles estão presentes na API do Kubernetes e disponíveis para utilização.
Dinâmico
Quando nenhum dos PVs estáticos, que foram criados anteriormente pelo administrador, satisfazem os
critérios de uma PersistentVolumeClaim enviado por um usuário, o cluster pode tentar realizar um
provisionamento dinâmico para atender a essa PVC. Esse provisionamento é baseado em
StorageClasses: a PVC deve solicitar uma classe de armazenamento (/docs/concepts/storage/storage-
classes/) e o administrador deve ter previamente criado e con�gurado essa classe para que o
provisionamento dinâmico possa ocorrer. Requisições que solicitam a classe "" efetivamente
desabilitam o provisionamento dinâmico para elas mesmas.
Para habilitar o provisionamento de armazenamento dinâmico baseado em classe de armazenamento,
o administrador do cluster precisa habilitar o controle de admissão (/docs/reference/access-authn-
authz/admission-controllers/#defaultstorageclass) DefaultStorageClass no servidor da API. Isso pode
https://kubernetes.io/docs/concepts/storage/volumes/
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass
ser feito, por exemplo, garantindo que DefaultStorageClass esteja entre aspas simples, ordenado por
uma lista de valores para a �ag --enable-admission-plugins , componente do servidor da API. Para
mais informações sobre os comandos das �ags do servidor da API, consulte a documentação kube-
apiserver (/docs/admin/kube-apiserver/).
Binding
Um usuário cria, ou em caso de um provisionamento dinâmico já ter criado, uma
PersistentVolumeClaim solicitando uma quantidade especí�ca de armazenamento e um determinado
modo de acesso. Um controle de loop no master monitora por novas PVCs, encontra um PV (se possível)
que satisfaça os requisitos e realiza o bind. Se o PV foi provisionado dinamicamente por uma PVC, o
loop sempre vai fazer o bind desse PV com essa PVC em especí�co. Caso contrário, o usuário vai receber
no mínimo o que ele havia solicitado, porém, o volume possa exceder em relação à solicitação inicial.
Uma vez realizado esse processo, PersistentVolumeClaim sempre vai ter um bind exclusivo, sem levar
em conta como o isso aconteceu. Um bind entre uma PVC e um PV é um mapeamento de um para um,
utilizando o ClaimRef que é um bind bidirecional entre o PersistentVolume e o PersistentVolumeClaim.
As requisições permanecerão sem bind se o volume solicitado não existir. O bind ocorrerá somente se
os requisitos forem atendidos exatamente da mesma forma como solicitado. Por exemplo, um bind de
uma PVC de 100 GB não ocorrerá num cluster que foi provisionado com vários PVs de 50 GB. O bind
ocorrerá somente no momento em que um PV de 100 GB for adicionado.
Utilização
Pods utilizam requisições como volumes. O cluster inspeciona a requisição para encontrar o volume
atrelado a ela e monta esse volume para um Pod. Para volumes que suportam múltiplos modos de
acesso, o usuário especi�ca qual o modo desejado quando utiliza essas requisições.
Uma vez que o usuário tem a requisição atrelada a um PV, ele pertence ao usuário pelo tempo que ele
precisar. Usuários agendam Pods e acessam seus PVs requisitados através da seção
persistentVolumeClaim no bloco volumes do Pod. Para mais detalhes sobre isso, veja Requisições
como Volumes.
Proteção de Uso de um Objeto de Armazenamento
O propósito da funcionalidade do Objeto de Armazenamento em Proteção de Uso é garantir que as
PersistentVolumeClaims (PVCs) que estejam sendo utilizadas por um Pod e PersistentVolume (PVs) que
pertençam aos PVCs não sejam removidos do sistema, pois isso pode resultar numa perda de dados.
Nota: Uma PVC está sendo utilizada por um Pod quando existe um Pod que está usando
essa PVC.
Se um usuário deleta uma PVC que está sendo utilizada por um Pod, esta PVC não é removida
imediatamente. A remoção da PVC é adiada até que a PVC não esteja mais sendo utilizado por nenhum
Pod. Se um administrador deleta um PV que está atrelado a uma PVC, o PV não é removido
imediatamente também. A remoção do PV é adiada até que o PV não esteja mais atrelado à PVC.
Note que uma PVC é protegida quando o status da PVC é Terminating e a lista Finalizers contém
kubernetes.io/pvc-protection :
Note que um PV é protegido quando o status da PVC é Terminating e a lista Finalizers contém
kubernetes.io/pv-protection também:
kubectl describe pvc hostpath 
Name: hostpath 
Namespace: default 
StorageClass: example-hostpath 
Status: Terminating 
Volume: 
Labels: <none> 
Annotations: volume.beta.kubernetes.io/storage-class=example-hostpath 
 volume.beta.kubernetes.io/storage-provisioner=example.com/hostpath 
Finalizers: [kubernetes.io/pvc-protection] 
... 
kubectl describe pv task-pv-volume 
Name: task-pv-volume 
https://kubernetes.io/docs/admin/kube-apiserver/
Recuperação
Quando um usuário não precisar mais utilizar um volume, ele pode deletar a PVC pela API, que, permite
a recuperação do recurso. A política de recuperação para um PersistentVolume diz ao cluster o que
fazer com o volume após ele ter sido liberado da sua requisição. Atualmente, volumes podem ser
Retidos, Reciclados ou Deletados.
Retenção
A política Retainpermite a recuperação de forma manual do recurso. Quando a
PersistentVolumeClaim é deletada, ela continua existindo e o volume é considerado "livre". Mas ele
ainda não está disponível para outra requisição porque os dados da requisição anterior ainda
permanecem no volume. Um administrador pode manualmente recuperar o volume executando os
seguintes passos:
1. Deletar o PersistentVolume. O armazenamento associado à infraestrutura externa (AWS EBS, GCE
PD, Azure Disk ou Cinder volume) ainda continuará existindo após o PV ser deletado.
2. Limpar os dados de forma manual no armazenamento associado.
3. Deletar manualmente o armazenamento associado. Caso você queira utilizar o mesmo
armazenamento, crie um novo PersistentVolume com esse armazenamento.
Deletar
Para plugins de volume que suportam a política de recuperação Delete , a deleção vai remover o tanto
o PersistentVolume do Kubernetes, quanto o armazenamento associado à infraestrutura externa, como
AWS EBS, GCE PD, Azure Disk, ou Cinder volume. Volumes que foram provisionados dinamicamente
herdam a política de retenção da sua StorageClass, que por padrão é Delete . O administrador precisa
con�gurar a StorageClass de acordo com as necessidades dos usuários. Caso contrário, o PV deve ser
editado ou reparado após sua criação. Veja Alterar a política de retenção de um PersistentVolume
(/docs/tasks/administer-cluster/change-pv-reclaim-policy/).
Reciclar
Aviso: A política de retenção Recycle está depreciada. Ao invés disso, recomendamos a
utilização de provisionamento dinâmico.
Em caso do volume plugin ter suporte a essa operação, a política de retenção Recycle faz uma limpeza
básica ( rm -rf /thevolume/* ) no volume e torna ele disponível novamente para outra requisição.
Contudo, um administrador pode con�gurar um template personalizado de um Pod reciclador
utilizando a linha de comando do gerenciamento de controle do Kubernetes como descrito em
referência (/docs/reference/command-line-tools-reference/kube-controller-manager/). O Pod reciclador
personalizado deve conter a spec volume como é mostrado no exemplo abaixo:
Labels: type=local 
Annotations: <none> 
Finalizers: [kubernetes.io/pv-protection] 
StorageClass: standard 
Status: Terminating 
Claim: 
Reclaim Policy: Delete 
Access Modes: RWO 
Capacity: 1Gi 
Message: 
Source: 
 Type: HostPath (bare host directory volume) 
 Path: /tmp/data 
 HostPathType: 
Events: <none> 
apiVersion: v1 
kind: Pod 
metadata: 
 name: pv-recycler 
 namespace: default 
spec:
 restartPolicy: Never 
 volumes: 
 - name: vol 
 hostPath: 
https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/
Contudo, o caminho especi�cado no Pod reciclador personalizado em volumes é substituído pelo
caminho do volume que está sendo reciclado.
Reservando um PersistentVolume
A camada de gerenciamento pode fazer o bind de um PersistentVolumeClaims com PersistentVolumes
equivalentes no cluster. Contudo, se você quer que uma PVC faça um bind com um PV especí�co, é
preciso fazer o pré-bind deles.
Especi�cando um PersistentVolume na PersistentVolumeClaim, você declara um bind entre uma PVC e
um PV especí�co. O bind ocorrerá se o PersistentVolume existir e não estiver reservado por uma
PersistentVolumeClaims através do seu campo claimRef .
O bind ocorre independentemente se algum volume atender ao critério, incluindo a�nidade de nó. A
camada de gerenciamento veri�ca se a classe de armazenamento (/docs/concepts/storage/storage-
classes/), modo de acesso e tamanho do armazenamento solicitado ainda são válidos.
Esse método não garante nenhum privilégio de bind no PersistentVolume. Para evitar que alguma outra
PersistentVolumeClaims possa usar o PV que você especi�car, você precisa primeiro reservar esse
volume de armazenamento. Especi�que sua PersistentVolumeClaim no campo claimRef do PV para
que outras PVCs não façam bind nele.
Isso é útil se você deseja utilizar PersistentVolumes que possuem suas claimPolicy con�guradas para
Retain , incluindo situações onde você estiver reutilizando um PV existente.
Expandindo Requisições de Volumes Persistentes
FEATURE STATE: Kubernetes v1.11 [beta]
Agora, o suporte à expansão de PersistentVolumeClaims (PVCs) já é habilitado por padrão. Você pode
expandir os tipos de volumes abaixo:
gcePersistentDisk
awsElasticBlockStore
Cinder
glusterfs
rbd
 path: /any/path/it/will/be/replaced 
 containers: 
 - name: pv-recycler 
 image: "k8s.gcr.io/busybox" 
 command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && 
 volumeMounts: 
 - name: vol 
 mountPath: /scrub 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
 name: foo-pvc 
 namespace: foo 
spec:
 storageClassName: "" # Empty string must be explicitly set otherwise default StorageClass will b
 volumeName: foo-pv 
 ... 
apiVersion: v1 
kind: PersistentVolume 
metadata: 
 name: foo-pv 
spec:
 storageClassName: "" 
 claimRef: 
 name: foo-pvc 
 namespace: foo 
 ... 
https://kubernetes.io/docs/concepts/storage/storage-classes/
Azure File
Azure Disk
Portworx
FlexVolumes
CSI (/docs/concepts/storage/volumes/#csi)
Você só pode expandir uma PVC se o campo da classe de armazenamento allowVolumeExpansion é
true .
Para solicitar um volume maior para uma PVC, edite a PVC e especi�que um tamanho maior. Isso irá
fazer com o que volume atrelado ao respectivo PersistentVolume seja expandido. Nunca um
PersistentVolume é criado para satisfazer a requisição. Ao invés disso, um volume existente é
redimensionado.
Expansão de volume CSI
FEATURE STATE: Kubernetes v1.16 [beta]
O suporte à expansão de volumes CSI é habilitada por padrão, porém é necessário um driver CSI
especí�co para suportar a expansão do volume. Veri�que a documentação do driver CSI especí�co para
mais informações.
Redimensionando um volume que contém um sistema de arquivo
Só podem ser redimensionados os volumes que contém os seguintes sistemas de arquivo: XFS, Ext3 ou
Ext4.
Quando um volume contém um sistema de arquivo, o sistema de arquivo somente é redimensionado
quando um novo Pod está utilizando a PersistentVolumeClaim no modo ReadWrite . A expansão de
sistema de arquivo é feita quando um Pod estiver inicializando ou quando um Pod estiver em execução
e o respectivo sistema de arquivo tenha suporte para expansão a quente.
FlexVolumes permitem redimensionamento se o RequiresFSResize do drive é con�gurado como
true . O FlexVolume pode ser redimensionado na reinicialização do Pod.
Redimensionamento de uma PersistentVolumeClaim em uso
FEATURE STATE: Kubernetes v1.15 [beta]
Nota: A Expansão de PVCs em uso está disponível como beta desde o Kubernetes 1.15, e
como alpha desde a versão 1.11. A funcionalidade ExpandInUsePersistentVolumes
precisa ser habilitada, o que já está automático para vários clusters que possuem
funcionalidades beta. Veri�que a documentação feature gate (/docs/reference/command-
line-tools-reference/feature-gates/) para mais informações.
Neste caso, você não precisa deletar e recriar um Pod ou um deployment que está sendo utilizado por
uma PVC existente. Automaticamente, qualquer PVC em uso �ca disponível para o Pod assim que o
sistema de arquivo for expandido. Essa funcionalidade não tem efeito em PVCs que não estão em uso
por um Pod ou deployment. Você deve criar um Pod que utilize a PVC antes que a expansão seja
completada.
Da mesma forma que outros tipos de volumes - volumes FlexVolume também podem ser expandidos
quando estiverem em uso por um Pod.
apiVersion: storage.k8s.io/v1 
kind: StorageClass 
metadata: 
 name: gluster-vol-default 
provisioner: kubernetes.io/glusterfs 
parameters: 
 resturl: "http://192.168.10.100:8080" 
 restusuário: "" 
 secretNamespace: ""secretName: "" 
allowVolumeExpansion: true 
https://kubernetes.io/docs/concepts/storage/volumes/#csi
https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
Nota: Redimensionamento de FlexVolume somente é possível quando o respectivo driver
suportar essa operação.
Nota: Expandir volumes do tipo EBS é uma operação que toma muito tempo. Além disso,
só é possível fazer uma modi�cação por volume a cada 6 horas.
Recuperação em caso de falha na expansão de volumes
Se a expansão do respectivo armazenamento falhar, o administrador do cluster pode recuperar
manualmente o estado da Persistent Volume Claim (PVC) e cancelar as solicitações de
redimensionamento. Caso contrário, as tentativas de solicitação de redimensionamento ocorrerão de
forma contínua pelo controlador sem nenhuma intervenção do administrador.
1. Marque o PersistentVolume(PV) que estiver atrelado à PersistentVolumeClaim(PVC) com a política
de recuperação Retain .
2. Delete a PVC. Desde que o PV tenha a política de recuperação Retain - nenhum dado será
perdido quando a PVC for recriada.
3. Delete a entrada claimRef da especi�cação do PV para que uma PVC possa fazer bind com ele.
Isso deve tornar o PV Available .
4. Recrie a PVC com um tamanho menor que o PV e con�gure o campo volumeName da PCV com o
nome do PV. Isso deve fazer o bind de uma nova PVC a um PV existente.
5. Não esqueça de restaurar a política de recuperação do PV.
Tipos de volumes persistentes
Tipos de PersistentVolume são implementados como plugins. Atualmente o Kubernetes suporta os
plugins abaixo:
awsElasticBlockStore (/docs/concepts/storage/volumes/#awselasticblockstore) - AWS Elastic
Block Store (EBS)
azureDisk (/docs/concepts/storage/volumes/#azuredisk) - Azure Disk
azureFile (/docs/concepts/storage/volumes/#azure�le) - Azure File
cephfs (/docs/concepts/storage/volumes/#cephfs) - CephFS volume
cinder (/docs/concepts/storage/volumes/#cinder) - Cinder (OpenStack block storage)
(depreciado)
csi (/docs/concepts/storage/volumes/#csi) - Container Storage Interface (CSI)
fc (/docs/concepts/storage/volumes/#fc) - Fibre Channel (FC) storage
flexVolume (/docs/concepts/storage/volumes/#�exVolume) - FlexVolume
flocker (/docs/concepts/storage/volumes/#�ocker) - Flocker storage
gcePersistentDisk (/docs/concepts/storage/volumes/#gcepersistentdisk) - GCE Persistent Disk
glusterfs (/docs/concepts/storage/volumes/#glusterfs) - Glusterfs volume
hostPath (/docs/concepts/storage/volumes/#hostpath) - HostPath volume (somente para teste de
nó único; ISSO NÃO FUNCIONARÁ num cluster multi-nós; ao invés disso, considere a utilização de
volume local .)
iscsi (/docs/concepts/storage/volumes/#iscsi) - iSCSI (SCSI over IP) storage
local (/docs/concepts/storage/volumes/#local) - storage local montados nos nós.
nfs (/docs/concepts/storage/volumes/#nfs) - Network File System (NFS) storage
photonPersistentDisk - Controlador Photon para disco persistente. (Esse tipo de volume não
funciona mais desde a removação do provedor de cloud correspondente.)
portworxVolume (/docs/concepts/storage/volumes/#portworxvolume) - Volume Portworx
quobyte (/docs/concepts/storage/volumes/#quobyte) - Volume Quobyte
rbd (/docs/concepts/storage/volumes/#rbd) - Volume Rados Block Device (RBD)
scaleIO (/docs/concepts/storage/volumes/#scaleio) - Volume ScaleIO (depreciado)
storageos (/docs/concepts/storage/volumes/#storageos) - Volume StorageOS
vsphereVolume (/docs/concepts/storage/volumes/#vspherevolume) - Volume vSphere VMDK
Volumes Persistentes
https://kubernetes.io/docs/concepts/storage/volumes/#awselasticblockstore
https://kubernetes.io/docs/concepts/storage/volumes/#azuredisk
https://kubernetes.io/docs/concepts/storage/volumes/#azurefile
https://kubernetes.io/docs/concepts/storage/volumes/#cephfs
https://kubernetes.io/docs/concepts/storage/volumes/#cinder
https://kubernetes.io/docs/concepts/storage/volumes/#csi
https://kubernetes.io/docs/concepts/storage/volumes/#fc
https://kubernetes.io/docs/concepts/storage/volumes/#flexVolume
https://kubernetes.io/docs/concepts/storage/volumes/#flocker
https://kubernetes.io/docs/concepts/storage/volumes/#gcepersistentdisk
https://kubernetes.io/docs/concepts/storage/volumes/#glusterfs
https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
https://kubernetes.io/docs/concepts/storage/volumes/#iscsi
https://kubernetes.io/docs/concepts/storage/volumes/#local
https://kubernetes.io/docs/concepts/storage/volumes/#nfs
https://kubernetes.io/docs/concepts/storage/volumes/#portworxvolume
https://kubernetes.io/docs/concepts/storage/volumes/#quobyte
https://kubernetes.io/docs/concepts/storage/volumes/#rbd
https://kubernetes.io/docs/concepts/storage/volumes/#scaleio
https://kubernetes.io/docs/concepts/storage/volumes/#storageos
https://kubernetes.io/docs/concepts/storage/volumes/#vspherevolume
Cada PV contém uma spec e um status, que é a especi�cação e o status do volume. O nome do
PersistentVolume deve ser um DNS (/docs/concepts/overview/working-with-objects/names#dns-
subdomain-names) válido.
Nota: Talvez sejam necessários programas auxiliares para um determinado tipo de volume
utilizar um PersistentVolume no cluster. Neste exemplo, o PersistentVolume é do tipo NFS
e o programa auxiliar /sbin/mount.nfs é necessário para suportar a montagem dos sistemas
de arquivos NFS.
Capacidade
Geralmente, um PV terá uma capacidade de armazenamento especí�ca. Isso é con�gurado usando o
atributo capacity do PV. Veja o Modelo de Recurso (https://git.k8s.io/community/contributors/design-
proposals/scheduling/resources.md) do Kubernetes para entender as unidades aceitas pelo atributo
capacity .
Atualmente, o tamanho do armazenamento é o único recurso que pode ser con�gurado ou solicitado.
Os futuros atributos podem incluir IOPS, throughput, etc.
Modo do Volume
FEATURE STATE: Kubernetes v1.18 [stable]
O Kubernetes suporta dois volumeModes de PersistentVolumes: Filesystem e Block .
volumeMode é um parâmetro opcional da API. Filesystem é o modo padrão utilizado quando o
parâmetro volumeMode é omitido.
Um volume com volumeMode: Filesystem é montado em um diretório nos Pods. Se o volume for de
um dispositivo de bloco e ele estiver vazio, o Kubernetes cria o sistema de arquivo no dispositivo antes
de fazer a montagem pela primeira vez.
Você pode con�gurar o valor do volumeMode para Block para utilizar um disco bruto como volume.
Esse volume é apresentado num Pod como um dispositivo de bloco, sem nenhum sistema de arquivo.
Esse modo é útil para prover ao Pod a forma mais rápida para acessar um volume, sem nenhuma
camada de sistema de arquivo entre o Pod e o volume. Por outro lado, a aplicação que estiver rodando
no Pod deverá saber como tratar um dispositivo de bloco. Veja Suporte a Volume de Bloco Bruto para
um exemplo de como utilizar o volume como volumeMode: Block num Pod.
Modos de Acesso
Um PersistentVolume pode ser montado num host das mais variadas formas suportadas pelo provedor.
Como mostrado na tabela abaixo, os provedores terão diferentes capacidades e cada modo de acesso
do PV são con�gurados nos modos especí�cos suportados para cada volume em particular. Por
exemplo, o NFS pode suportar múltiplos clientes read/write, mas um PV NFS especí�co pode ser
exportado no server como read-only. Cada PV recebe seu próprio modo de acesso que descreve suas
capacidades especí�cas.
Os modos de acesso são:
apiVersion: v1 
kind: PersistentVolume 
metadata: 
 name: pv0003 
spec:
 capacity: 
 storage: 5Gi 
 volumeMode: Filesystem 
 accessModes: 
 - ReadWriteOnce 
 persistentVolumeReclaimPolicy: Retain 
 storageClassName: slow 
 mountOptions:
 - hard
 - nfsvers=4.1 
 nfs: 
 path: /tmp 
 server: 172.17.0.2 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names#dns-subdomain-names
https://git.k8s.io/community/contributors/design-proposals/scheduling/resources.md
ReadWriteOnce -- o volume pode ser montado como leitura-escritapor um nó único
ReadOnlyMany -- o volume pode ser montado como somente-leitura por vários nós
ReadWriteMany -- o volume pode ser montado como leitura-escrita por vários nós
Na linha de comando, os modos de acesso �cam abreviados:
RWO - ReadWriteOnce
ROX - ReadOnlyMany
RWX - ReadWriteMany
Importante! Um volume somente pode ser montado utilizando um único modo de acesso
por vez, independente se ele suportar mais de um. Por exemplo, um GCEPersistentDisk
pode ser montado como ReadWriteOnce por um único nó ou ReadOnlyMany por vários nós,
porém não simultaneamente.
Plugin de
Volume ReadWriteOnce ReadOnlyMany ReadWriteMany
AWSElasticBlockS
tore
✓ - -
AzureFile ✓ ✓ ✓
AzureDisk ✓ - -
CephFS ✓ ✓ ✓
Cinder ✓ - -
CSI depende do
driver
depende do
driver
depende do driver
FC ✓ ✓ -
FlexVolume ✓ ✓ depende do driver
Flocker ✓ - -
GCEPersistentDis
k
✓ ✓ -
Glusterfs ✓ ✓ ✓
HostPath ✓ - -
iSCSI ✓ ✓ -
Quobyte ✓ ✓ ✓
NFS ✓ ✓ ✓
RBD ✓ ✓ -
VsphereVolume ✓ - (funcionam quando os Pods são do tipo
collocated)
PortworxVolume ✓ - ✓
ScaleIO ✓ ✓ -
StorageOS ✓ - -
Classe
Um PV pode ter uma classe, que é especi�cada na con�guração do atributo storageClassName com o
nome da StorageClass (/docs/concepts/storage/storage-classes/). Um PV de uma classe especí�ca só
pode ser atrelado a requisições PVCs dessa mesma classe. Um PV sem storageClassName não possui
nenhuma classe e pode ser montado somente a PVCs que não solicitem nenhuma classe em especí�co.
No passado, a notação volume.beta.kubernetes.io/storage-class era utilizada no lugar do atributo
storageClassName . Essa notação ainda funciona. Contudo, ela será totalmente depreciada numa futura
versão do Kubernetes.
Política de Retenção
Atualmente as políticas de retenção são:
Retain -- recuperação manual
Recycle -- limpeza básica ( rm -rf /thevolume/* )
Delete -- o volume de armazenamento associado, como AWS EBS, GCE PD, Azure Disk ou
OpenStack Cinder é deletado
Atualmente, somente NFS e HostPath suportam reciclagem. Volumes AWS EBS, GCE PD, Azure Disk e
Cinder suportam delete.
Opções de Montagem
Um administrador do Kubernetes pode especi�car opções de montagem adicionais quando um Volume
Persistente é montado num nó.
Nota: Nem todos os tipos de Volume Persistente suportam opções de montagem.
Seguem os tipos de volumes que suportam opções de montagem.
AWSElasticBlockStore
AzureDisk
AzureFile
CephFS
Cinder (OpenStack block storage)
GCEPersistentDisk
Glusterfs
NFS
Quobyte Volumes
RBD (Ceph Block Device)
StorageOS
VsphereVolume
iSCSI
Não há validação em relação às opções de montagem. A montagem irá falhar se houver alguma opção
inválida.
No passado, a notação volume.beta.kubernetes.io/mount-options era usada no lugar do atributo
mountOptions . Essa notação ainda funciona. Contudo, ela será totalmente depreciada numa futura
versão do Kubernetes.
A�nidade de Nó
Nota: Para a maioria dos tipos de volume, a con�guração desse campo não se faz
necessária. Isso é automaticamente populado pelos seguintes volumes de bloco do tipo:
AWS EBS (/docs/concepts/storage/volumes/#awselasticblockstore), GCE PD
(/docs/concepts/storage/volumes/#gcepersistentdisk) e Azure Disk
(/docs/concepts/storage/volumes/#azuredisk). Você precisa deixar isso con�gurado para
volumes do tipo local (/docs/concepts/storage/volumes/#local).
Um PV pode especi�car uma a�nidade de nó (/docs/reference/generated/kubernetes-
api/v1.22/#volumenodea�nity-v1-core) para de�nir restrições em relação ao limite de nós que podem
acessar esse volume. Pods que utilizam um PV serão somente reservados para nós selecionados pela
a�nidade de nó.
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://kubernetes.io/docs/concepts/storage/volumes/#awselasticblockstore
https://kubernetes.io/docs/concepts/storage/volumes/#gcepersistentdisk
https://kubernetes.io/docs/concepts/storage/volumes/#azuredisk
https://kubernetes.io/docs/concepts/storage/volumes/#local
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#volumenodeaffinity-v1-core
Estado
Um volume sempre estará em um dos seguintes estados:
Available -- um recurso que está livre e ainda não foi atrelado a nenhuma requisição
Bound -- um volume atrelado a uma requisição
Released -- a requisição foi deletada, mas o curso ainda não foi recuperado pelo cluster
Failed -- o volume fracassou na sua recuperação automática
A CLI mostrará o nome do PV que foi atrelado à PVC
PersistentVolumeClaims
Cada PVC contém uma spec e um status, que é a especi�cação e estado de uma requisição. O nome de
um objeto PersistentVolumeClaim precisa ser um DNS (/docs/concepts/overview/working-with-
objects/names#dns-subdomain-names) válido.
Modos de Acesso
As requisições usam as mesmas convenções que os volumes quando eles solicitam um armazenamento
com um modo de acesso especí�co.
Modos de Volume
As requisições usam as mesmas convenções que os volumes quando eles indicam o tipo de volume,
seja ele um sistema de arquivo ou dispositivo de bloco.
Recursos
Assim como Pods, as requisições podem solicitar quantidades especí�cas de recurso. Neste caso, a
solicitação é por armazenamento. O mesmo modelo de recurso
(https://git.k8s.io/community/contributors/design-proposals/scheduling/resources.md) vale para
volumes e requisições.
Seletor
Requisições podem especi�ar um seletor de rótulo (/docs/concepts/overview/working-with-
objects/labels/#label-selectors) para posteriormente �ltrar um grupo de volumes. Somente os volumes
que possuam rótulos que satisfaçam os critérios do seletor podem ser atrelados à requisição. O seletor
pode conter dois campos:
matchLabels - o volume deve ter um rótulo com esse valor
matchExpressions - uma lista de requisitos, como chave, lista de valores e operador relacionado
aos valores e chaves. São operadores válidos: In, NotIn, Exists e DoesNotExist.
Todos os requisitos de matchLabels e matchExpressions , são do tipo AND - todos eles juntos devem
ser atendidos.
Classe
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
 name: myclaim 
spec:
 accessModes: 
 - ReadWriteOnce 
 volumeMode: Filesystem 
 resources: 
 requests: 
 storage: 8Gi 
 storageClassName: slow 
 selector: 
 matchLabels: 
 release: "stable" 
 matchExpressions: 
 - {key: environment, operator: In, values: [dev]} 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names#dns-subdomain-names
https://git.k8s.io/community/contributors/design-proposals/scheduling/resources.md
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
Uma requisição pode solicitar uma classe especí�ca através da StorageClass
(/docs/concepts/storage/storage-classes/) utilizando o atributo storageClassName . Neste caso o bind
ocorrerá somente com os PVs que possuírem a mesma classe do storageClassName dos PVCs.
As PVCs não precisam necessariamente solicitar uma classe. Uma PVC com sua storageClassName
con�gurada como "" sempre solicitará um PV sem classe, dessa forma ela sempre será atrelada a um
PV sem classe (que não tenha nenhuma notação, ou seja, igual a "" ). Uma PVC sem storageClassName
não é a mesma coisa e será tratada pelo cluster de forma diferente, porém isso dependerá se o puglin
de admissão (/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
DefaultStorageClass estiver habilitado.
Se o plugin de admissão estiver habilitado, o administrador poderá especi�car a StorageClass
padrão. Todas as PVCs que não tiverem storageClassName podem ser atreladas somente a PVs
que atendam a esse padrão. A especi�cação de uma StorageClass padrão é feita através da
notação storageclass.kubernetes.io/is-default-class recebendo o valor true no objeto da
StorageClass. Se o administrador não especi�car nenhum padrão, o cluster vai tratar a criação de
uma PVC como se o plugin de admissão estivesse desabilitado. Se mais de um valor padrão for
especi�cado, o plugin de admissãoproíbe a criação de todas as PVCs.
Se o plugin de admissão estiver desabilitado, não haverá nenhuma notação para a StorageClass
padrão. Todas as PVCs que não tiverem storageClassName poderão ser atreladas somente aos
PVs que não possuem classe. Neste caso, as PVCs que não tiverem storageClassName são
tratadas da mesma forma como as PVCs que possuem suas storageClassName con�guradas
como "" .
Dependendo do modo de instalação, uma StorageClass padrão pode ser implantada num cluster
Kubernetes durante a instalação pelo addon manager.
Quando uma PVC especi�ca um selector para solicitar uma StorageClass, os requisitos são do tipo
AND: somente um PV com a classe solicitada e com o rótulo requisitado pode ser atrelado à PVC.
Nota: Atualmente, uma PVC que tenha selector não pode ter um PV dinamicamente
provisionado.
No passado, a notação volume.beta.kubernetes.io/storage-class era usada no lugar do atributo
storageClassName Essa notação ainda funciona. Contudo, ela será totalmente depreciada numa futura
versão do Kubernetes.
Requisições como Volumes
Os Pods podem ter acesso ao armazenamento utilizando a requisição como um volume. Para isso, a
requisição tem que estar no mesmo namespace que o Pod. Ao localizar a requisição no namespace do
Pod, o cluster passa o PersistentVolume para a requisição.
Sobre Namespaces
Os binds dos PersistentVolumes são exclusivos e, desde que as PersistentVolumeClaims são objetos do
namespace, fazer a montagem das requisições com "Muitos" nós ( ROX , RWX ) é possível somente para
um namespace.
PersistentVolumes do tipo hostPath
apiVersion: v1 
kind: Pod 
metadata: 
 name: mypod 
spec:
 containers: 
 - name: myfrontend 
 image: nginx 
 volumeMounts: 
 - mountPath: "/var/www/html" 
 name: mypd 
 volumes: 
 - name: mypd 
 persistentVolumeClaim: 
 claimName: myclaim 
https://kubernetes.io/docs/concepts/storage/storage-classes/
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass
Um PersistentVolume do tipo hostPath utiliza um arquivo ou diretório no nó para emular um network-
attached storage (NAS). Veja um exemplo de volume do tipo hostPath (/docs/tasks/con�gure-pod-
container/con�gure-persistent-volume-storage/#create-a-persistentvolume).
Suporte a Volume de Bloco Bruto
FEATURE STATE: Kubernetes v1.18 [stable]
Os plugins de volume abaixo suportam volumes de bloco bruto, incluindo provisionamento dinâmico
onde for aplicável:
AWSElasticBlockStore
AzureDisk
CSI
FC (Fibre Channel)
GCEPersistentDisk
iSCSI
Local volume
OpenStack Cinder
RBD (Ceph Block Device)
VsphereVolume
Utilização de PersistentVolume com Volume de Bloco Bruto
Requisição de PersistentVolumeClaim com Volume de Bloco Bruto
Especi�cação de Pod com Dispositivo de Bloco Bruto no contêiner
apiVersion: v1 
kind: PersistentVolume 
metadata: 
 name: block-pv 
spec:
 capacity: 
 storage: 10Gi 
 accessModes: 
 - ReadWriteOnce 
 volumeMode: Block 
 persistentVolumeReclaimPolicy: Retain 
 fc: 
 targetWWNs: ["50060e801049cfd1"] 
 lun: 0 
 readOnly: false 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
 name: block-pvc 
spec:
 accessModes: 
 - ReadWriteOnce 
 volumeMode: Block 
 resources: 
 requests: 
 storage: 10Gi 
apiVersion: v1 
kind: Pod 
metadata: 
 name: pod-with-block-volume 
spec:
 containers: 
 - name: fc-container 
 image: fedora:26 
 command: ["/bin/sh", "-c"] 
 args: [ "tail -f /dev/null" ]
 volumeDevices:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume
Nota: Quando adicionar um dispositivo de bloco bruto num Pod, você especi�ca o
caminho do dispositivo no contêiner ao invés de um ponto de montagem.
Bind de Volumes de Bloco
Se um usuário solicita um volume de bloco bruto através do campo volumeMode na spec da
PersistentVolumeClaim, as regras de bind agora têm uma pequena diferença em relação às versões
anteriores que não consideravam esse modo como parte da spec . A tabela abaixo mostra as possíveis
combinações que um usuário e um administrador pode especi�car para requisitar um dispositivo de
bloco bruto. A tabela indica se o volume será ou não atrelado com base nas combinações: Matriz de
bind de volume para provisionamento estático de volumes:
PV volumeMode PVC volumeMode Result
unspeci�ed unspeci�ed BIND
unspeci�ed Block NO BIND
unspeci�ed Filesystem BIND
Block unspeci�ed NO BIND
Block Block BIND
Block Filesystem NO BIND
Filesystem Filesystem BIND
Filesystem Block NO BIND
Filesystem unspeci�ed BIND
Nota: O provisionamento estático de volumes é suportado somente na versão alpha. Os
administradores devem tomar cuidado ao considerar esses valores quando estiverem
trabalhando com dispositivos de bloco bruto.
Snapshot de Volume e Restauração de Volume a partir
de um Snapshot
FEATURE STATE: Kubernetes v1.20 [stable]
O snapshot de volume é suportado somente pelo plugin de volume CSI. Veja Snapshot de Volume
(/docs/concepts/storage/volume-snapshots/) para mais detalhes. Plugins de volume in-tree estão
depreciados. Você pode consultar sobre os plugins de volume depreciados em Perguntas Frequentes
sobre Plugins de Volume (https://github.com/kubernetes/community/blob/master/sig-storage/volume-
plugin-faq.md).
Criar uma PersistentVolumeClaim a partir de um Snapshot de
Volume
 - name: data
 devicePath: /dev/xvda 
 volumes: 
 - name: data 
 persistentVolumeClaim: 
 claimName: block-pvc 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
 name: restore-pvc 
spec:
https://kubernetes.io/docs/concepts/storage/volume-snapshots/
https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md
Clonagem de Volume
A Clonagem de Volume (/docs/concepts/storage/volume-pvc-datasource/) é possível somente com
plugins de volume CSI.
Criação de PersistentVolumeClaim a partir de uma PVC já existente
Boas Práticas de Con�guração
Se você está criando templates ou exemplos que rodam numa grande quantidade de clusters e que
precisam de armazenamento persistente, recomendamos que utilize o padrão abaixo:
Inclua objetos PersistentVolumeClaim em seu pacote de con�guração (com Deployments,
Con�gMaps, etc.).
Não inclua objetos PersistentVolume na con�guração, pois o usuário que irá instanciar a
con�guração talvez não tenha permissão para criar PersistentVolume.
Dê ao usuário a opção dele informar o nome de uma classe de armazenamento quando instanciar
o template.
Se o usuário informar o nome de uma classe de armazenamento, coloque esse valor no
campo persistentVolumeClaim.storageClassName . Isso fará com que a PVC encontre a
classe de armazenamento correta se o cluster tiver a StorageClasses habilitado pelo
administrador.
Se o usuário não informar o nome da classe de armazenamento, deixe o campo
persistentVolumeClaim.storageClassName sem nenhum valor (vazio). Isso fará com que o
PV seja provisionado automaticamente no cluster para o usuário com o StorageClass padrão.
Muitos ambientes de cluster já possuem uma StorageClass padrão, ou então os
administradores podem criar suas StorageClass de acordo com seus critérios.
Durante suas tarefas de administração, busque por PVCs que após um tempo não estão sendo
atreladas, pois, isso talvez indique que o cluster não tem provisionamento dinâmico (onde o
usuário deveria criar um PV que satisfaça os critérios da PVC) ou cluster não tem um sistema de
armazenamento (onde usuário não pode realizar um deploy solicitando PVCs).
Qual é o próximo
Saiba mais sobre Criando um PersistentVolume (/docs/tasks/con�gure-pod-container/con�gure-
persistent-volume-storage/#create-a-persistentvolume).
Saiba mais sobre Criando um PersistentVolumeClaim (/docs/tasks/con�gure-pod-
container/con�gure-persistent-volume-storage/#create-a-persistentvolumeclaim).
 storageClassName:csi-hostpath-sc 
 dataSource: 
 name: new-snapshot-test 
 kind: VolumeSnapshot 
 apiGroup: snapshot.storage.k8s.io 
 accessModes: 
 - ReadWriteOnce 
 resources: 
 requests: 
 storage: 10Gi 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
 name: cloned-pvc 
spec:
 storageClassName: my-csi-plugin 
 dataSource: 
 name: existing-src-pvc-name 
 kind: PersistentVolumeClaim 
 accessModes: 
 - ReadWriteOnce 
 resources: 
 requests: 
 storage: 10Gi 
https://kubernetes.io/docs/concepts/storage/volume-pvc-datasource/
https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolume
https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolumeclaim
Leia a documentação sobre planejamento de Armazenamento Persistente
(https://git.k8s.io/community/contributors/design-proposals/storage/persistent-storage.md).
Referência
PersistentVolume (/docs/reference/generated/kubernetes-api/v1.22/#persistentvolume-v1-core)
PersistentVolumeSpec (/docs/reference/generated/kubernetes-api/v1.22/#persistentvolumespec-
v1-core)
PersistentVolumeClaim (/docs/reference/generated/kubernetes-api/v1.22/#persistentvolumeclaim-
v1-core)
https://git.k8s.io/community/contributors/design-proposals/storage/persistent-storage.md
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#persistentvolume-v1-core
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#persistentvolumespec-v1-core
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#persistentvolumeclaim-v1-core
3.3 - Arquitetura do Kubernetes
3.3.1 - Comunicação entre Nó e Control
Plane
Este documento cataloga os caminhos de comunicação entre o control plane (o apiserver) e o cluster
Kubernetes. A intenção é permitir que os usuários personalizem sua instalação para proteger a
con�guração de rede então o cluster pode ser executado em uma rede não con�ável (ou em IPs
totalmente públicos em um provedor de nuvem).
Nó para o Control Plane
Todos os caminhos de comunicação do cluster para o control plane terminam no apiserver (nenhum
dos outros componentes do control plane são projetados para expor Serviços remotos). Em uma
implantação típica, o apiserver é con�gurado para escutar conexões remotas em uma porta HTTPS
segura (443) com uma ou mais clientes autenticação (/docs/reference/access-authn-
authz/authentication/) habilitado. Uma ou mais formas de autorização (/docs/reference/access-authn-
authz/authorization/) deve ser habilitado, especialmente se requisições anônimas
(/docs/reference/access-authn-authz/authentication/#anonymous-requests) ou tokens da conta de
serviço (/docs/reference/access-authn-authz/authentication/#service-account-tokens) são autorizados.
Os nós devem ser provisionados com o certi�cado root público para o cluster de tal forma que eles
podem se conectar de forma segura ao apiserver junto com o cliente válido credenciais. Por exemplo,
em uma implantação padrão do GKE, as credenciais do cliente fornecidos para o kubelet estão na forma
de um certi�cado de cliente. Vejo bootstrapping TLS do kubelet (/docs/reference/command-line-tools-
reference/kubelet-tls-bootstrapping/) para provisionamento automatizado de certi�cados de cliente
kubelet.
Os pods que desejam se conectar ao apiserver podem fazê-lo com segurança, aproveitando conta de
serviço para que o Kubernetes injetará automaticamente o certi�cado raiz público certi�cado e um
token de portador válido no pod quando ele é instanciado. O serviço kubernetes (no namespace
default ) é con�gurado com um IP virtual endereço que é redirecionado (via kube-proxy) para o
endpoint com HTTPS no apiserver.
Os componentes do control plane também se comunicam com o apiserver do cluster através da porta
segura.
Como resultado, o modo de operação padrão para conexões do cluster (nodes e pods em execução nos
Nodes) para o control plane é protegido por padrão e pode passar por redes não con�áveis e/ou
públicas.
Control Plane para o nó
Existem dois caminhos de comunicação primários do control plane (apiserver) para os nós. O primeiro é
do apiserver para o processo do kubelet que é executado em cada nó no cluster. O segundo é do
apiserver para qualquer nó, pod, ou serviço através da funcionalidade de proxy do apiserver.
apiserver para o kubelet
As conexões do apiserver ao kubelet são usadas para:
Buscar logs para pods.
Anexar (através de kubectl) pods em execução.
Fornecer a funcionalidade de encaminhamento de porta do kubelet.
Essas conexões terminam no endpoint HTTPS do kubelet. Por padrão, o apiserver não veri�ca o
certi�cado de serviço do kubelet, o que torna a conexão sujeita a ataques man-in-the-middle, o que o
torna inseguro para passar por redes não con�áveis e / ou públicas.
Para veri�car essa conexão, use a �ag --kubelet-certificate-authority para fornecer o apiserver
com um pacote de certi�cado raiz para usar e veri�car o certi�cado de serviço da kubelet.
Se isso não for possível, use o SSH túnel (/docs/concepts/architecture/master-node-
communication/#ssh-tunnels) entre o apiserver e kubelet se necessário para evitar a conexão ao longo
de um rede não con�ável ou pública.
https://kubernetes.io/docs/reference/access-authn-authz/authentication/
https://kubernetes.io/docs/reference/access-authn-authz/authorization/
https://kubernetes.io/docs/reference/access-authn-authz/authentication/#anonymous-requests
https://kubernetes.io/docs/reference/access-authn-authz/authentication/#service-account-tokens
https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/
https://kubernetes.io/docs/concepts/architecture/master-node-communication/#ssh-tunnels
Finalmente, Autenticação e/ou autorização do Kubelet (/docs/admin/kubelet-authentication-
authorization/) deve ser ativado para proteger a API do kubelet.
apiserver para nós, pods e serviços
As conexões a partir do apiserver para um nó, pod ou serviço padrão para simples conexões HTTP não
são autenticadas nem criptografadas. Eles podem ser executados em uma conexão HTTPS segura
pre�xando https: no nó, pod, ou nome do serviço no URL da API, mas eles não validarão o certi�cado
fornecido pelo ponto de extremidade HTTPS, nem fornece credenciais de cliente, enquanto a conexão
será criptografada, não fornecerá nenhuma garantia de integridade. Estas conexões não são
atualmente seguras para serem usados por redes não con�áveis e/ou públicas.
SSH Túnel
O Kubernetes suporta túneis SSH para proteger os caminhos de comunicação do control plane para os
nós. Nesta con�guração, o apiserver inicia um túnel SSH para cada nó no cluster (conectando ao
servidor ssh escutando na porta 22) e passa todo o tráfego destinado a um kubelet, nó, pod ou serviço
através do túnel. Este túnel garante que o tráfego não seja exposto fora da rede aos quais os nós estão
sendo executados.
Atualmente, os túneis SSH estão obsoletos, portanto, você não deve optar por usá-los, a menos que
saiba o que está fazendo. O serviço Konnectivity é um substituto para este canal de comunicação.
Konnectivity service
FEATURE STATE: Kubernetes v1.18 [beta]
Como uma substituição aos túneis SSH, o serviço Konnectivity fornece proxy de nível TCP para a
comunicação do control plane para o cluster. O serviço Konnectivity consiste em duas partes: o servidor
Konnectivity na rede control plane e os agentes Konnectivity na rede dos nós. Os agentes Konnectivity
iniciam conexões com o servidor Konnectivity e mantêm as conexões de rede. Depois de habilitar o
serviço Konnectivity, todo o tráfego do control plane para os nós passa por essas conexões.
Veja a tarefa do Konnectivity (docs/tasks/extend-kubernetes/setup-konnectivity/) para con�gurar o
serviço Konnectivity no seu cluster.
https://kubernetes.io/docs/admin/kubelet-authentication-authorization/
https://kubernetes.io/pt-br/docs/_print/docs/tasks/extend-kubernetes/setup-konnectivity/

Continue navegando