Gerenciamento de armazenamento do Kubernetes em seu dispositivo de GPU Azure Stack Edge Pro

APLICA-SE A:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro R Azure Stack Edge Mini RYes for Mini R SKU

No dispositivo Azure Stack Edge Pro, um cluster Kubernetes é criado quando você configura a função de computação. Depois que o cluster Kubernetes é criado, os aplicativos em contêineres podem ser implantados no cluster Kubernetes em pods. Há maneiras distintas de fornecer armazenamento para pods em seu cluster Kubernetes.

Este artigo descreve os métodos para provisionar armazenamento em um cluster Kubernetes em geral e especificamente no contexto do seu dispositivo Azure Stack Edge Pro.

Requisitos de armazenamento para pods do Kubernetes

Os pods do Kubernetes são sem estado, mas os aplicativos que eles executam geralmente são stateful. Como os pods podem ter vida curta e reiniciar, fazer failover ou se mover entre nós do Kubernetes, os seguintes requisitos devem ser atendidos para armazenamento associado ao pod.

A armazenagem deve:

  • Viva fora do pod.
  • Seja independente do ciclo de vida do pod.
  • Ser acessível a partir de todos os nós do Kubernetes.

Para entender como o armazenamento é gerenciado para o Kubernetes, é preciso entender dois recursos de API:

  • PersistentVolume (PV): Esta é uma parte do armazenamento no cluster do Kubernetes. O armazenamento do Kubernetes pode ser provisionado estaticamente como PersistentVolume. Ele também pode ser provisionado dinamicamente como StorageClass.

  • PersistentVolumeClaim (PVC): Esta é uma solicitação de armazenamento por um usuário. Os PVCs consomem recursos fotovoltaicos. Os PVCs podem solicitar tamanhos e modos de acesso específicos.

    Como os usuários precisam de propriedades variadas para problemas diferentes, os administradores de cluster precisam PersistentVolumes ser capazes de oferecer uma variedade de diferentes maneiras do que apenas os modos de PersistentVolumes tamanho e acesso. Para essas necessidades, você precisa do StorageClass recurso.

O provisionamento de armazenamento pode ser estático ou dinâmico. Cada um dos tipos de provisionamento é discutido nas seções a seguir.

Provisionamento estático

Os administradores de clusters do Kubernetes podem aprovisionar estaticamente o armazenamento. Para fazer isso, eles podem usar back-end de armazenamento com base em sistemas de arquivos SMB/NFS ou usar discos iSCSI que se conectam localmente pela rede em um ambiente local ou até mesmo usar Arquivos do Azure ou Discos do Azure na nuvem. Esse tipo de armazenamento não é provisionado por padrão e os administradores de cluster precisam planejar e gerenciar esse provisionamento.

Aqui está um diagrama que mostra como o armazenamento provisionado estaticamente é consumido no Kubernetes:

Static provisioning via PersistentVolumes

As seguintes etapas ocorrem:

  1. Provisionar armazenamento: o administrador do cluster provisiona o armazenamento. Neste exemplo, o administrador do cluster cria um ou mais compartilhamentos SMB que criam automaticamente objetos de volume persistentes no cluster Kubernetes correspondentes a esses compartilhamentos.

  2. Armazenamento de declaração: você envia uma implantação de PVC que solicita o armazenamento. Essa declaração de armazenamento é o PersistentVolumeClaim (PVC). Se o tamanho e o modo de acesso do PV corresponderem ao do PVC, então o PVC está ligado ao PV. O PVC e o PV mapeiam um a um.

  3. Monte o PVC no recipiente: Uma vez que o PVC está ligado ao PV, você pode montar esse PVC em um caminho em seu recipiente. Quando a lógica do aplicativo no contêiner lê/grava de/para esse caminho, os dados são gravados no armazenamento SMB.

Provisionamento dinâmico

Aqui está um diagrama que mostra como o armazenamento provisionado estaticamente é consumido no Kubernetes:

Dynamic provisioning via StorageClasses

As seguintes etapas ocorrem:

  1. Definir classe de armazenamento: o administrador do cluster define uma classe de armazenamento dependendo do ambiente operacional do cluster do Kubernetes. O administrador do cluster também implanta um provisionador, que é mais um pod ou aplicativo implantado no cluster do Kubernetes. O provisionador tem todos os detalhes para provisionar as ações dinamicamente.

  2. Armazenamento de declaração: você envia um aplicativo que reivindicaria o armazenamento. Depois que um PVC é criado com essa referência de classe de armazenamento, o provisionador é invocado.

  3. Provisionar armazenamento dinamicamente: o provisionador cria dinamicamente o compartilhamento associado ao armazenamento em disco local. Uma vez que o compartilhamento é criado, ele também cria um objeto PV automaticamente correspondente a esse compartilhamento.

  4. Monte o PVC no recipiente: Uma vez que o PVC está ligado ao PV, você pode montar o PVC no contêiner em um caminho da mesma forma que o provisionamento estático e ler ou gravar no compartilhamento.

Provisionamento de armazenamento no Azure Stack Edge Pro

No dispositivo Azure Stack Edge Pro, os provisionados PersistentVolumes estaticamente são criados usando os recursos de armazenamento do dispositivo. Quando você provisiona um compartilhamento e a opção Usar o compartilhamento com computação de borda está habilitada, essa ação cria um recurso PV automaticamente no cluster do Kubernetes.

Local share creation in Azure portal for static provisioning

Para usar a hierarquização da nuvem, você pode criar um compartilhamento de nuvem de Borda com a opção Usar o compartilhamento com computação de Borda habilitada. Um PV é novamente criado automaticamente para este compartilhamento. Todos os dados de aplicativos gravados no compartilhamento de Borda são hierarquizados na nuvem.

Cloud share creation in Azure portal for static provisioning

Você pode criar compartilhamentos SMB e NFS para provisionar estaticamente PVs no dispositivo Azure Stack Edge Pro. Assim que o PV for provisionado, você enviará um PVC para reivindicar esse armazenamento. Aqui está um exemplo de uma implantação yaml de PVC que reivindica o armazenamento e usa os compartilhamentos provisionados.

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
  name: pvc-smb-flexvol 
spec: 
  accessModes: 
  - ReadWriteMany 
  resources: 
    requests: 
      storage: 10Gi 
  volumeName: <nfs-or-smb-share-name-here> 
  storageClassName: ""

Para obter o valor do campo, selecione o Ponto de montagem local para módulos de computação de volumeName borda ao selecionar o compartilhamento SMB ou NFS após a criação. Isso é o mesmo que o nome do compartilhamento.

Para obter mais informações, consulte Implantar um aplicativo com monitoração de estado por meio do provisionamento estático no Azure Stack Edge Pro via kubectl.

Para acessar o mesmo armazenamento provisionado estaticamente, as opções de montagem de volume correspondentes para associações de armazenamento para IoT são as seguintes. O /home/input é o caminho no qual o volume está acessível dentro do contêiner.

{
"HostConfig": {
"Mounts": [
{
"Target": "/home/input",
"Source": "<nfs-or-smb-share-name-here>",
"Type": "volume"
},
{
"Target": "/home/output",
"Source": "<nfs-or-smb-share-name-here>",
"Type": "volume"
}]
}
}

O Azure Stack Edge Pro também tem um builtin StorageClass chamado ase-node-local que usa um armazenamento de disco de dados anexado ao nó Kubernetes. Isso StorageClass oferece suporte ao provisionamento dinâmico. Você pode fazer uma StorageClass referência nos aplicativos pod e um PV é criado automaticamente para você. Para obter mais informações, consulte o painel do Kubernetes para consultar ase-node-local StorageClasso .

Built-in storage class in Kubernetes dashboard

Para obter mais informações, consulte Implantar um aplicativo com monitoração de estado por meio do provisionamento dinâmico em seu Azure Stack Edge Pro via kuebctl.

Escolha o tipo de armazenamento

Talvez seja necessário escolher o tipo de armazenamento, dependendo da carga de trabalho que está implantando.

  • Se você quiser o modo de acesso para onde PersistentVolumes os volumes são montados como leitura-gravação por muitos nós implantando, use o ReadWriteMany provisionamento estático para os compartilhamentos SMB/NFS.

  • Se os aplicativos que você está implantando tiverem um requisito de conformidade POSIX, por exemplo, aplicativos como MongoDB, PostgreSQL, MySQL ou Prometheus, use o StorageClass integrado. Os modos de acesso são ReadWriteOnce ou o volume é montado como leitura-gravação por um único nó.

Para obter mais informações sobre modos de acesso, consulte Modo de acesso a volumes do Kubernetes.

Próximos passos

Para entender como você pode provisionar estaticamente um PersistentVolume, consulte:

Para saber como você pode provisionar dinamicamente um StorageClass, consulte: