Como adicionar armazenamento permanente aos pods do Kubernetes

Os sistemas de arquivos do Kubernetes Pod são efêmeros por padrão. Isso está de acordo com a natureza sem estado dos contêineres. Os dados persistentes devem ser armazenados fora do contêiner, mesmo quando parecer que estão dentro do sistema de arquivos do contêiner. Veja como provisionar armazenamento persistente no Kubernetes.
A unidade básica de armazenamento persistente do Kubernetes é um volume persistente. Esta é uma abstração do Volume mais fundamental.
Os volumes persistentes existem independentemente de qualquer pod específico. Da mesma forma que os volumes simples do Docker, o Kubernetes &’ Volumes persistentes podem permanecer em seu cluster mesmo quando não há pods usando-os.
Os pods recebem acesso a volumes persistentes fazendo uma reivindicação de volume persistente. Este é outro tipo de recurso que representa uma solicitação de pod para usar armazenamento persistente. A reivindicação lida com o provisionamento de Volumes Persistentes que atendem à solicitação.
Um exemplo básico
Vejamos como criar um sistema de armazenamento persistente configurando manualmente um Volume Persistente e uma Reivindicação de Volume Persistente. Cada recurso irá para seu próprio arquivo de manifesto. Você pode aplicar esses arquivos ao seu cluster com kubectl apply.
Crie um volume persistente
Comece criando seu volume:
apiVersion: v1 kind: PersistentVolume metadata: name: my-volume namespace: pvc-demo spec: storageClassName: manual capacity: storage: 2Gi accessModes: - ReadWriteOnce hostPath: path: / mnt / data
Esta definição cria um volume chamado meu-volume. Ele tem uma capacidade de 2Gi e será armazenado em / mnt / data no nó host. Como estamos criando este volume manualmente, o storageClassName está definido como manual. As classes de armazenamento podem ser usadas para exigir que os volumes sejam vinculados apenas a declarações de volume que solicitem a mesma classe.
Crie uma reivindicação de volume persistente
Agora você pode configurar uma reivindicação de volume persistente:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-volume-claim namespace: pvc-demo spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
A reivindicação solicita 1Gi de armazenamento de um volume usando a classe manual. O volume que criamos anteriormente pode atender a essas condições. Quando a declaração é criada, o Kubernetes deve perceber isso e vincular a declaração ao volume.
Se você inspecionasse os detalhes do volume e da reivindicação, você &’ veria que ambos mostram um status de Vinculado.
kubectl get pv my-volume kubectl get pvc my-volume-claim
Adicionar um pod
O estágio final é usar sua declaração de volume para adicionar armazenamento persistente a um pod.
apiVersion: v1 kind: Pod metadata: name: my-pod namespace: pvc-demo spec: containers: - name: my-container image: my-image: últimas volumeMounts: - mountPath: / path / in / container name : volumes my-pod-volume: - name: my-pod-volume persistentVolumeClaim: claimName: my-volume-claim
Na seção de volumes, uma referência à reivindicação de volume persistente é configurada. Você não precisa especificar nenhuma outra informação sobre o volume. O pod usará a declaração, que fornecerá o volume ao qual está vinculado.
A reivindicação é referenciada em volumeMounts. Certifique-se de usar o mesmo nome em volumes e volumesMounts. O volume será montado em seu Pod no local especificado por mountPath.
Seu pod agora tem armazenamento persistente disponível. Qualquer coisa escrita em / path / in / container será armazenada no Volume Persistente. A reivindicação de volume persistente será reutilizada por novos pods que fazem referência a ela, permitindo que os dados sobrevivam a qualquer pod individual.
Classes de armazenamento
A classe de armazenamento manual é usada quando você está criando seu próprio volume e manifestos de reivindicação de volume. Drivers de plugin de volume diferentes fornecem suas próprias classes de armazenamento. Faça referência à classe de armazenamento que representa o tipo de volume que você deseja usar.
Os serviços Kubernetes gerenciados geralmente fornecem suas próprias classes de armazenamento que mapeiam para a implementação de armazenamento em bloco da plataforma. Os exemplos incluem gcePersistentDisk com Google Kubernetes Engine ou do-block-storage com DigitalOcean Managed Kubernetes.
Nesses cenários, você não precisa criar o manifesto PersistentVolume manualmente. Crie um PersistentVolumeClaim com o storageClassName correto e use o campo resources. requests. storage (mostrado acima) para especificar a capacidade desejada. O driver de armazenamento vinculará automaticamente a declaração a uma instância de volume compatível.
Modos de acesso
Existem três valores suportados para o campo accessModes:
- ReadWriteOnce – O volume só pode ser montado em um único nó do Kubernetes. Esse nó terá acesso total de leitura e gravação ao volume.
- ReadOnlyMany – O volume pode ser consumido por vários nós simultaneamente. Cada nó tem acesso somente leitura (nada pode gravar no volume).
- ReadWriteMany – O volume pode ser montado em vários nós simultaneamente. Cada nó pode ler e gravar no volume.
Apenas um modo de acesso pode ser usado por um determinado volume a qualquer momento. Isso significa que duas declarações de volume só serão vinculadas ao mesmo volume se ambas declararem o mesmo modo de acesso.
O modo de acesso de seus volumes afeta a capacidade do programador Kubernetes de abranger réplicas de seus pods em vários nós. Os modos ReadOnlyMany / ReadWriteMany devem ser usados se você precisar que os pods compartilhem o armazenamento persistente e sejam replicados em vários nós.
Esteja ciente de que nem todos os drivers de armazenamento suportam todos os modos de acesso – você deve verificar com o provedor do seu plug-in. Uma lista não exaustiva de plug-ins de volume e modos de acesso compatíveis é fornecida na documentação do Kubernetes.
Conclusão
O armazenamento persistente no Kubernetes não é tão assustador quanto parece à primeira vista. Certifique-se de que os pods que precisam de acesso ao armazenamento tenham volumes vinculados a uma reivindicação de volume persistente.
Quando as declarações de volume persistente são usadas, o Kubernetes cria Volumes persistentes que sobrevivem aos pods individuais. Quando seus pods forem substituídos, os volumes reivindicados serão montados automaticamente nos novos pods. Os dados não serão destruídos até que a reivindicação seja excluída.
Nenhum comentário