Conceitos de armazenamento para Kubernetes

Concluído

O Kubernetes é uma plataforma aberta que gerencia aplicativos baseados em contêiner e seus respectivos componentes de rede e armazenamento. Fornece uma abordagem declarativa das implantações, corroborada por um sólido conjunto de APIs para as operações de gerenciamento.

Você pode compilar e executar aplicativos modernos, portáteis e baseados em microsserviços usando o Kubernetes para orquestrar e gerenciar a disponibilidade dos componentes do aplicativo.

Gerenciamento e orquestração de contêineres

Gerenciamento de contêineres é o processo de organizar, adicionar, remover ou atualizar um número significativo de contêineres. Um orquestrador de contêineres é um sistema que implanta e gerencia automaticamente os aplicativos conteinerizados. Por exemplo, o orquestrador pode reagir dinamicamente a alterações no ambiente de forma a aumentar ou reduzir as instâncias do aplicativo gerenciado implantadas, ou pode garantir que todas as instâncias de contêiner implantadas sejam atualizadas caso uma nova versão de um serviço seja lançada.

Arquitetura do Kubernetes

A arquitetura do Kubernetes é criada em clusters. Um cluster do Kubernetes é dividido em dois componentes de infraestrutura básicos:

  • Um painel de controle, que fornece os serviços básicos do Kubernetes e a orquestração de cargas de trabalho do seu aplicativo.
  • Os nós, que executam as cargas de trabalho do seu aplicativo. Cada cluster tem pelo menos um nó, mas você pode definir o número e o tamanho dos nós. Um pool de nós é um grupo de nós que compartilham a mesma configuração.

Os recursos das cargas de trabalho do seu aplicativo ficam contidos em pods. Um pod no Kubernetes é um recurso efêmero que representa uma única instância do seu aplicativo. Consiste em um ou mais contêineres, com armazenamento e recursos de rede compartilhados e uma especificação de como executar os contêineres. O conteúdo de um Pod é sempre colocalizado e coagendado, e executado em um contexto compartilhado.

Armazenamento persistente no Kubernetes

Na unidade anterior, aprendemos sobre os mecanismos de suporte em contêineres do Windows, que permitem que você forneça um armazenamento persistente para seus aplicativos em um ambiente local por meio de montagens vinculadas e volumes nomeados. No entanto, os volumes e as montagens vinculadas têm algumas desvantagens quando usados em um ambiente distribuído como o Kubernetes.

Os volumes e as montagens vinculadas ficam ligados a um computador host específico, o que significa que não são transportáveis entre os nós de um cluster. Se for agendado em um nó diferente daquele em que os respectivos dados estão armazenados, o contêiner não poderá acessá-lo. Além disso, os volumes e as montagens vinculadas não são dimensionáveis nem resilientes, já que dependem da disponibilidade e da capacidade de um único computador host.

O Kubernetes soluciona os desafios do armazenamento de contêineres introduzindo duas abstrações: volumes persistentes e declarações de volumes persistentes.

Volumes persistentes

Um volume persistente (PV) é um recurso de armazenamento no cluster, criado e gerenciado pela API do Kubernetes, que pode existir além do tempo de vida de um pod individual. Um administrador de cluster pode criar um PersistentVolume estaticamente, ou o servidor de API do Kubernetes pode criá-lo dinamicamente usando Classes de armazenamento. Um PV é um recurso no cluster, assim como um nó é um recurso do cluster. Os PVs têm um ciclo de vida independente de qualquer Pod individual que use o PV.

Declarações de volume persistente

Uma declaração de volume persistente (PVC) solicita o armazenamento de uma determinada StorageClass, modo de acesso e tamanho. O PVC atua como uma verificação de declaração para o recurso de armazenamento. O servidor de API do Kubernetes pode provisionar o recurso de armazenamento subjacente dinamicamente, se não houver nenhum recurso existente para satisfazer a declaração com base na classe de armazenamento definida.

Uma StorageClass fornece uma maneira para que os administradores descrevam as "classes" de armazenamento que oferecem. Classes diferentes podem ser mapeadas para níveis de qualidade de serviço, para políticas de backup ou para políticas arbitrárias determinadas pelos administradores do cluster. O Kubernetes propriamente dito não tem uma opinião sobre o que as classes representam.

Após o servidor de API do Kubernetes atribuir um recurso de armazenamento disponível ao pod que solicita o armazenamento, o PV é vinculado a um PVC. Volumes persistentes são um mapeamento tipo um para um para uma declaração de volume persistente.