O cliente Container Network File System (CNFS) permite acessar dados por meio de múltiplas conexões, armazenar metadados em cache e fazer cache de dados de forma distribuída para aumentar a velocidade de leitura. O cliente CNFS também oferece suporte a monitoramento de desempenho e qualidade de serviço (QoS). Este tópico descreve como ativar o recurso de cache distribuído do cliente CNFS e como utilizá-lo para melhorar a velocidade de leitura.
Pré-requisitos
Utilize o Alibaba Cloud Linux 2 com versão de kernel entre 4.19.91-23 e 4.19.91-26. O recurso de cache distribuído é compatível com o Alibaba Cloud Linux 2.
Crie um cluster do Container Service for Kubernetes (ACK) executando Kubernetes 1.20 ou posterior. Utilize o plug-in Container Storage Interface (CSI) como plug-in de volume. Para mais informações, consulte Criar um cluster gerenciado do ACK.
Verifique se as versões do csi-plugin e do csi-provisioner são v1.22.11-abbb810e-aliyun ou posteriores. Para mais informações sobre como atualizar o csi-plugin e o csi-provisioner, consulte Instalar e atualizar o plug-in CSI.
Verifique se a versão do storage-operator é v1.22.86-041b094-aliyun ou posterior. Para mais informações sobre como atualizar o storage-operator, consulte Gerenciar componentes.
Conecte um cliente kubectl ao cluster. Para mais informações, consulte Conectar-se a um cluster ACK usando kubectl.
Principais indicadores de desempenho do recurso de cache distribuído
Indicador | Cenário de benchmark① | Cache distribuído desativado | Cache distribuído ativado |
Desempenho de leitura e gravação de metadados | Tempo para percorrer um milhão de diretórios | 18 minutos | < 60 segundos |
Tempo para criar um arquivo de 4 KB | 3.000 microssegundos | < 200 microssegundos | |
Tempo para ler um arquivo de 4 KB pela segunda vez | 400 microssegundos | < 100 microssegundos | |
Throughput de leitura e gravação | Throughput de leitura e gravação de um único nó② | 200 a 500 MB/s | > 800 MB/s |
Desempenho geral em cenários abrangentes | Tempo para extrair 5.000 imagens de 150 KB cada | 52 segundos | Cerca de 15 segundos |
Tempo para criar um projeto Redis | 27 segundos | Cerca de 21 segundos |
Os valores apresentados na tabela anterior são apenas teóricos (valores de referência). Os valores reais dependem do seu ambiente operacional.
Nota ①: O tipo de instância do Elastic Compute Service (ECS) utilizada para executar o teste de benchmark é ecs.hfg6.4xlarge. Os dados do benchmark podem variar conforme o ambiente.
Nota ②: A largura de banda da instância ECS e o tipo de sistema de arquivos do File Storage NAS (NAS) afetam o throughput de leitura e gravação do nó.
Etapa 1: Monte um sistema de arquivos NAS com cache distribuído ativado
-
Execute o comando a seguir para criar e implantar o ConfigMap do csi-plugin no cluster e instale o cliente CNFS:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cnfs-client-properties: | nas-efc=true nas-efc-cache: | enable=true container-number=3 volume-type=memory volume-size=15Gi node-selector: | cache=true EOFParâmetro
Descrição
cnfs-client-properties
Define se o cache distribuído deve ser ativado. Se você especificar
nas-efc=true, o recurso de cache distribuído será ativado para aumentar a velocidade de leitura.nfs-efc-cache.
container-number
Este parâmetro é obrigatório ao ativar o cache distribuído.
Ele define o número de contêineres que o DaemonSet cria para o recurso de cache. Caso o recurso de cache atinja um gargalo de desempenho, aumente o valor deste parâmetro.
nfs-efc-cache.
volume-type
Este parâmetro é obrigatório ao ativar o cache distribuído.
Meio utilizado pelo volume emptyDir do pod criado pelo DaemonSet. Valores válidos:
diskmemory
nfs-efc-cache.
volume-size
Este parâmetro é obrigatório ao ativar o cache distribuído. Tamanho do volume a ser armazenado em cache. Unidade: GiB.
node-selector
O pod criado pelo DaemonSet para o recurso de cache distribuído é agendado com base em rótulos. Se este parâmetro não for especificado, o DaemonSet será agendado em todos os nós do cluster.
ImportanteAo definir o meio como disco ou memória, os recursos de disco de dados ou memória do nó serão consumidos. Certifique-se de que isso não afete negativamente suas cargas de trabalho.
Neste exemplo, o DaemonSet do recurso de cache distribuído cria três contêineres, cada um montado com um volume tmpfs de 5 GiB. Os contêineres só podem ser agendados em um nó que possua o rótulo
cache=true.
Após a configuração do ConfigMap, o sistema implanta automaticamente o DaemonSet e o Service com base nessa configuração.
-
Execute o comando a seguir para reiniciar o CSI-Plugin e instale as dependências:
kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete pod -
Execute o comando a seguir para ativar o recurso de cache distribuído do cliente CNFS:
Crie um sistema de arquivos NAS gerenciado pelo CNFS. O StatefulSet monta o volume NAS acelerado pelo CNFS como um volume provisionado dinamicamente. A imagem busybox é utilizada neste exemplo. Após o início do pod, o sistema executa o comando
ddpara gravar um arquivo de 1 GB no caminho/data. Esse arquivo serve para verificar se o recurso de cache distribuído entrou em vigor. -
Execute o comando a seguir para verificar se o volume NAS com cache distribuído ativado foi montado:
kubectl exec cnfs-nas-sts-0 -- mount | grep /dataSaída esperada:
xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)Um destino de montagem aparece na saída, indicando que o volume NAS com cache distribuído ativado foi montado com sucesso.
-
Execute o comando a seguir para verificar se o DaemonSet do recurso de cache distribuído foi iniciado:
kubectl get ds/cnfs-cache-ds -n kube-system -owideSaída esperada:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR cnfs-cache-ds 3 3 3 3 3 <none> 19d alinas-dadi-container registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-dsNeste exemplo, o cluster possui três nós. Os três pods criados pelo DaemonSet estão prontos, o que indica que o DaemonSet do recurso de cache distribuído foi iniciado corretamente.
-
Execute o comando a seguir para verificar se o Service de cache distribuído consegue descobrir os pods de backend:
kubectl get ep cnfs-cache-ds-service -n kube-system -owideSaída esperada:
NAME ENDPOINTS AGE cnfs-cache-ds-service 10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500 19dA saída mostra que o Service descobriu os pods de backend. Os endpoints dos pods são 10.19.1.130, 10.19.1.40 e 10.19.1.66, utilizando a porta 6500.
Etapa 2: Verifique o recurso de cache
-
Execute o comando a seguir para copiar o arquivo tmpfile do diretório
/datapara o diretório/e verifique o tempo consumido. O tamanho do arquivo é de 1 GB.kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /Saída esperada:
real 0m 5.66s user 0m 0.00s sys 0m 0.75sA saída indica que o tempo necessário para copiar o arquivo é de cerca de cinco segundos quando o recurso de cache distribuído está desativado.
-
Execute o comando a seguir várias vezes para verificar o tempo necessário para copiar o arquivo:
kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /Saída esperada:
real 0m 0.79s user 0m 0.00s sys 0m 0.58sA saída demonstra que o tempo necessário para copiar o arquivo é reduzido de seis a sete vezes quando o arquivo é acessado mais de uma vez.