Gerenciar armazenamento de pods em clusters Kubernetes
Embora a maioria dos aplicativos que você pretende implantar no AKS no Azure Stack HCI sejam sem monitoração de estado, os desenvolvedores da Contoso identificaram algumas cargas de trabalho com monitoração de estado que estão planejando colocar em contêineres. Para acomodar esse requisito, você precisa explorar o suporte para preservar o estado dos pods em execução confiando nos volumes persistentes do Kubernetes.
Implementar volumes persistentes para AKS no Azure Stack HCI
Por padrão, pods individuais operam como recursos sem monitoração de 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 em contêiner permaneça disponível. No entanto, sem provisões adicionais para preservar o estado, quaisquer dados em que 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 armazenar dados de cargas de trabalho em contêineres além da vida útil de pods individuais.
Para implementar um volume em um cluster 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 necessário e o tamanho do volume. 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.
Nota
O AKS no Azure Stack HCI oferece a classe de armazenamento padrão, que implementa discos baseados em VHDX.
Defina os requisitos de armazenamento dos pods implantados incluindo especificações de volume persistentes nos arquivos de manifesto correspondentes. Além de acionar 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 (onde o 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 pod como um arquivo YAML e executar o utilitário de linha de comando kubectl para provisionar o volume e montá-lo (onde 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 dentro do caminho do sistema de arquivos designado pelo valor do mountPath
elemento.
Para excluir a declaração de volume persistente, você precisa primeiro excluir todos os pods e implantações que estão usando no momento. Nesse ponto, para concluir a tarefa, você pode usar o kubectl delete PersistentVolumeClaim
comando, seguido pelo nome da declaração de volume persistente.