Você pode provisionar volumes de memória não volátil (NVM) com base no produto de memória persistente (PMEM) da Intel. O NVM permite expandir a capacidade de memória com custos reduzidos e acessar dados persistentes com menor latência, reunindo as vantagens de produtos de memória e armazenamento. Este tópico descreve como utilizar volumes NVM em clusters do Container Service for Kubernetes (ACK) e apresenta exemplos práticos.
Informações básicas
O PMEM oferece memória de alto desempenho com suporte à persistência de dados. Por residir no barramento de memória, ele permite o acesso aos dados da mesma forma que a memória dinâmica de acesso aleatório (DRAM). O PMEM proporciona velocidade e latência quase equivalentes às da DRAM, mantendo a não volatilidade da memória flash NAND. Seus principais benefícios incluem:
Latência inferior à dos SSDs flash no acesso a dados.
Throughput superior ao do armazenamento flash.
Custo mais baixo em comparação à DRAM.
Cache de dados. Isso resolve a limitação de cache na CPU para dados transmitidos via Peripheral Component Interconnect Express (PCIe).
Acesso em tempo real e ultrarrápido a grandes conjuntos de dados.
Retenção de dados na memória mesmo após o desligamento da máquina, oferecendo a mesma vantagem da memória flash.
Como usar volumes NVM
Use o driver Container Storage Interface (CSI) fornecido pela Alibaba Cloud para gerenciar o ciclo de vida de dispositivos NVM em clusters ACK. Esse driver possibilita alocar, montar e utilizar recursos NVM por meio de declarações declarativas.
Utilize volumes NVM em clusters ACK de uma das seguintes formas:
-
PMEP-LVM (use NVM as non-intrusive block storage)
Recursos NVM funcionam como armazenamento em bloco ou sistemas de arquivos. Reivindique esses recursos diretamente, sem modificar suas aplicações. Use o Logical Volume Manager (LVM) para virtualizar os recursos PMEM de um nó em grupos de volumes (VGs) e criar persistent volume claims (PVCs) com os tipos e capacidades necessários.
Essa abordagem é ideal para aplicações serverless, computação de dados com alto throughput e baixa latência, além de pipelines de CI/CD curtos que exigem armazenamento temporário de alta velocidade. O throughput de E/S aumenta de 2 a 10 vezes. Para mais exemplos, consulte Melhorar o desempenho de leitura e gravação com memória não volátil.
-
PMEM-direct memory
Recursos NVM também atuam como memória direta. Ao ajustar funções de alocação de memória com base no SDK do PMEM, você provisiona recursos NVM como memória direta e obtém throughput e latência similares aos da memória tradicional.
Esse método é recomendado para bancos de dados em memória, como Redis e SAP HANA, quando se busca grande capacidade de memória com custo-benefício. A redução nos custos de memória varia de 30% a 50%. Para mais exemplos, consulte Implantar uma instância Redis com volume NVM montado como memória direta.
A tabela a seguir detalha a comparação entre os diferentes métodos de uso de volumes NVM.
|
Método |
Suporte a armazenamento fragmentado |
Suporte a expansão online |
Suporte a persistência de memória |
Requer modificação na aplicação |
Latência (4K/RW) |
Throughput (4K/RW) |
Capacidade máxima por instância ECS (ecs.ebmre6p.26xlarge) |
|
PMEM-LVM |
Não |
Sim |
Sim |
Não |
10 us |
10W |
1536 GB |
|
PMEM-Direct |
Sim |
Não |
Não |
Sim |
1,2 us |
56W |
768 GB |
|
SSD |
Não |
Sim |
Sim |
Não |
100 us |
1W |
32 TB |
Implantar componentes CSI
Introdução aos componentes CSI
Para utilizar NVM em clusters ACK, implante os seguintes componentes:
CSI-Plugin: inicializa dispositivos PMEM e executa operações de criação, exclusão, montagem e desmontagem de volumes.
CSI-Provisioner: detecta e inicia solicitações de criação e exclusão de volumes.
CSI-Scheduler: gerencia o agendamento de armazenamento (o agendador do ACK já vem pré-instalado).
Implantar componentes CSI
-
Adicione instâncias do Elastic Compute Service (ECS) equipadas com recursos PMEM ao seu cluster ACK. Por exemplo, adicione instâncias ECS do tipo ecs.ebmre6p.26xlarge. A família de instâncias re6p otimizadas para memória persistente e a família de instâncias bare metal ECS ebmre6p otimizadas para memória persistente suportam a primeira geração de PMEM.
-
Para garantir que o plug-in CSI monte corretamente os recursos PMEM, adicione os seguintes rótulos às instâncias ECS equipadas com PMEM:
pmem.csi.alibabacloud.com: ativa a O&M automática para dispositivos NVM.pmem.csi.alibabacloud.com/type: lvm: habilita o suporte ao método PMEM-LVM.pmem.csi.alibabacloud.com/type: direct: habilita o suporte ao método de memória direta PMEM.
-
Implante o plug-in CSI para PMEM.
-
Implante o CSI-Plugin.
-
Implante o CSI-Provisioner.
-
Crie StorageClasses.
-
Exemplos
Use AEP as block storage volumes
-
Crie uma PVC usando o seguinte modelo YAML.
Para agendar a PVC em um nó NVM específico, adicione a anotação
annotations: volume.kubernetes.io/selected-node.apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX name: pmem-lvm spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: pmem-lvm -
Implante uma carga de trabalho com o seguinte modelo YAML:
apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-lvm labels: app: busybox-lvm spec: selector: matchLabels: app: busybox-lvm serviceName: "busybox" template: metadata: labels: app: busybox-lvm spec: containers: - name: busybox image: busybox command: ["sh", "-c"] args: ["sleep 10000"] volumeMounts: - name: pmem-pvc mountPath: "/data" volumes: - name: pmem-pvc persistentVolumeClaim: claimName: pmem-lvm -
Verifique os resultados.
-
Execute o comando a seguir para consultar a PVC criada:
kubectl get pvcSaída esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pmem-lvm Bound disk-**** 10Gi RWO pmem-lvm 10m -
Execute o comando a seguir para consultar o pod criado:
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE sts-lvm-0 1/1 Running 0 10m
-
-
Execute o comando a seguir para acessar a aplicação e verificar o caminho de montagem do volume:
kubectl exec -ti sts-lvm-0 -- df /dataA saída a seguir indica que um volume de armazenamento em bloco foi criado e montado no pod da aplicação:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/pmemvgregion0-disk--**** 10255636 36888 10202364 1% /data
Use NVM as direct memory volumes
-
Crie uma PVC usando o seguinte modelo YAML.
Para agendar a PVC em um nó NVM específico, adicione a anotação
annotations: volume.kubernetes.io/selected-node.apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX name: pmem-direct spec: accessModes: - ReadWriteOnce resources: requests: storage: 9Gi storageClassName: pmem-direct -
Implante uma carga de trabalho com o seguinte modelo:
apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-direct labels: app: busybox-direct spec: selector: matchLabels: app: busybox-direct serviceName: "busybox" template: metadata: labels: app: busybox-direct spec: containers: - name: busybox image: busybox command: ["sh", "-c"] args: ["sleep 1000"] volumeMounts: - name: pmem-pvc mountPath: "/data" volumes: - name: pmem-pvc persistentVolumeClaim: claimName: pmem-direct -
Verifique os resultados.
-
Execute o comando a seguir para consultar a PVC criada:
kubectl get pvc pmem-directSaída esperada:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pmem-direct Bound disk-**** 9Gi RWO pmem-direct 17m -
Execute o comando a seguir para consultar o pod criado:
kubectl get podSaída esperada:
NAME READY STATUS RESTARTS AGE sts-direct-0 1/1 Running 0 17m
-
-
Execute o comando a seguir para acessar a aplicação e verificar o caminho de montagem do volume:
kubectl exec -ti sts-direct-0 -- df /dataA saída a seguir indica que um volume de armazenamento em bloco foi criado e montado no pod da aplicação:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/pmem0 9076344 36888 9023072 1% /data