Gerenciar o armazenamento de pods em clusters do Kubernetes

Concluído

Embora a maioria dos aplicativos que você pretende implantar no AKS no Azure Stack HCI seja sem estado, os desenvolvedores da Contoso identificaram algumas cargas de trabalho com estado que eles estão planejando colocar em contêineres. Para atender a esse requisito, você precisa explorar o suporte para preservar o estado dos pods em execução, contando com os volumes persistentes do Kubernetes.

Implementar volumes persistentes para o AKS no Azure Stack HCI

Por padrão, os pods individuais operam como recursos sem estado. Se um pod que faz parte de uma implantação falhar por algum motivo, o agendador do Kubernetes criará automaticamente um novo que fornece a funcionalidade correspondente, garantindo que o aplicativo conteinerizado permaneça disponível. No entanto, sem provisões adicionais para preservar o estado, todos os dados nos quais o pod com falha possa estar trabalhando são perdidos.

Há cenários em que os pods devem ser capazes de persistir e compartilhar seus dados e estado. Nesses cenários, você pode usar volumes persistentes, que são recursos de cluster que permitem o armazenamento de dados de cargas de trabalho conteinerizadas além da vida útil de pods individuais.

Para implementar um volume em um cluster do Kubernetes, você precisa definir uma declaração de volume persistente para uma classe de armazenamento específica. Uma classe de armazenamento representa as características do armazenamento subjacente, como desempenho ou suporte para acesso compartilhado. A declaração de volume persistente inclui informações sobre o modo de acesso e o tamanho do volume necessários. O servidor de API do Kubernetes usa a definição de declaração de volume persistente para provisionar dinamicamente um volume de armazenamento adequado sempre que exigido pelos pods implantados.

Observação

O AKS no Azure Stack HCI oferece a classe de armazenamento padrão, que implementa discos baseados em VHDX.

Defina os requisitos de armazenamento de pods implantados, incluindo especificações de volume persistente nos arquivos de manifesto correspondentes. Além de disparar o provisionamento dinâmico, isso também monta automaticamente o volume dentro dos pods.

Por exemplo, o manifesto a seguir define uma declaração de volume persistente para um disco não compartilhado de 100 GB que usa a classe de armazenamento padrão.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: pvc-akshci
spec:
 accessModes:
 - ReadWriteOnce
 resources:
  requests:
   storage: 100Gi

Para implementar essa declaração de volume persistente, você pode armazenar esse manifesto como um arquivo YAML e executar o utilitário de linha de comando kubectl para criar o recurso correspondente (em que pvc_definition.yaml representa o arquivo YAML):

kubectl create -f pvc_definition.yaml

Para definir um volume persistente correspondente para um pod, você pode usar o seguinte manifesto:

kind: Pod
apiVersion: v1
metadata:
  name: win-appserver
spec:
  containers:
    - name: win-appserver
      image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 
      volumeMounts:
      - name: akshciscsi
        mountPath: "/mnt/akshciscsi"
  volumes:
    - name: akshciscsi
      persistentVolumeClaim:
        claimName: pvc-akshci
  nodeSelector:
     kubernetes.io/os: windows

Para implementar esse volume persistente também, você pode armazenar o manifesto do pod como um arquivo YAML e executar o utilitário de linha de comando kubectl para provisionar o volume e montá-lo (em que o pv_definition.yaml representa o arquivo YAML):

kubectl create -f pv_definition.yaml

O pod resultante terá um volume de 100 GB de tamanho montado no caminho do sistema de arquivos designado pelo valor do elemento mountPath.

Para excluir a declaração de volume persistente, primeiro você precisa excluir quaisquer pods e implantações que a estão usando no momento. Nesse ponto, para concluir a tarefa, você pode usar o comando kubectl delete PersistentVolumeClaim, seguido pelo nome da declaração de volume persistente.