Este tópico traz respostas para algumas perguntas frequentes sobre volumes do File Storage NAS (NAS).
Por que o sistema exibe a mensagem "chown: Operation not permitted"?
O que fazer se não for possível criar ou modificar diretórios em um volume do NAS?
Por que o sistema exibe a mensagem "unknown filesystem type "xxx" ao montar um volume do NAS"?
Como usar o CSI para montar um sistema de arquivos do NAS com TLS ativado?
O que fazer se a desmontagem do volume do NAS expirar e o pod permanecer no estado Terminating?
Por que o sistema exibe a mensagem chown: Operation not permitted ao montar um volume do NAS?
Problema
O sistema exibe a mensagem chown: Operation not permitted ao montar um sistema de arquivos do NAS.
Causa
A função usada para executar o contêiner não tem permissões para gerenciar o volume do NAS.
Solução
O usuário que inicia o processo do contêiner não tem permissões de root. Use uma conta root para executar as operações chown e chgrp. Quando o
accessModesde um volume persistente (PV) está definido comoReadWriteOnce, use tambémsecurityContext.fsGrouppara configurar as permissões do volume e a política de alteração de propriedade para os pods. Para mais informações, consulte Configurar permissão de volume e política de alteração de propriedade para Pods.Se o problema persistir após usar uma conta root, verifique se o grupo de permissões do ponto de montagem do NAS define as permissões do usuário como No Anonymity (no_squash). Essa configuração permite que usuários root acessem o sistema de arquivos. Para mais informações, consulte Gerenciar grupos de permissões.
O que fazer se a fila de tarefas do alicloud-nas-controller estiver cheia e não for possível criar PVs ao usar um volume do NAS provisionado dinamicamente?
Problema
Ao usar um volume do NAS provisionado dinamicamente, se a velocidade de criação de subdiretórios for maior que a velocidade de exclusão, a fila de tarefas do alicloud-nas-controller pode ficar cheia, impedindo a criação de PVs.
Causa
O parâmetro reclaimPolicy está definido como Delete e o parâmetro archiveOnDelete está definido como false na configuração da StorageClass que monta o volume do NAS provisionado dinamicamente.
Solução
Defina archiveOnDelete como true. Dessa forma, quando um PV é excluído, apenas o nome do subdiretório montado no sistema de arquivos do NAS é modificado. Os arquivos no subdiretório não são excluídos.
Você deve excluir esses arquivos manualmente. Por exemplo, configure um nó para excluir automaticamente os arquivos no diretório raiz por agendamento ou inicie vários pods para excluir simultaneamente arquivos de formatos específicos nos subdiretórios.
Por que a montagem de um volume do NAS demora muito?
Problema
A montagem de um volume do NAS demora muito tempo.
Causa
Se as condições a seguir forem atendidas, a operação chmod ou chown será executada durante a montagem dos volumes, o que aumenta o tempo de execução.
O parâmetro AccessModes está definido como ReadWriteOnce nos modelos de volume persistente (PV) e de declaração de volume persistente (PVC).
O parâmetro securityContext.fsGroup está definido no modelo do aplicativo.
Solução
Se o parâmetro securityContext.fsGroup estiver definido no modelo do aplicativo, exclua o parâmetro fsGroup na seção securityContext.
Para configurar o ID de usuário (UID) e o mode dos arquivos no diretório montado, monte o diretório manualmente em uma instância do Elastic Compute Service (ECS). Em seguida, execute os comandos
chownechmodpor meio de uma CLI e provisione o volume do NAS por meio do plug-in CSI. Para mais informações sobre como usar o plug-in CSI para montar volumes do NAS, consulte Usar volumes estáticos do NAS ou Usar volumes dinâmicos do NAS.Além dos métodos anteriores, para clusters do Kubernetes 1.20 ou posterior, defina o parâmetro fsGroupChangePolicy como OnRootMismatch. Assim, a operação
chmodouchowné executada apenas quando o sistema inicia o pod pela primeira vez. O problema não ocorre ao montar volumes do NAS após a conclusão da primeira inicialização. Para mais informações sobre fsGroupChangePolicy, consulte Definir o contexto de segurança para um pod ou contêiner.
O que fazer se não for possível criar ou modificar diretórios em um volume do NAS?
Problema
Não é possível criar ou modificar diretórios em um volume do NAS.
Causa
Usuários sem privilégios de root não têm permissão para criar ou modificar diretórios em um PV.
Solução
Selecione um dos métodos a seguir para executar o comando chmod ou chown e modificar as permissões no diretório de montagem:
Inicie um contêiner de inicialização (init container) com privilégios de root, monte um PV e execute o comando
chmodouchownpara modificar as permissões no diretório de montagem. Depois disso, você poderá criar e modificar diretórios no PV.Defina o parâmetro fsGroupChangePolicy como OnRootMismatch. Dessa forma, na primeira vez que o sistema iniciar o pod, ele executará o comando
chmodouchownpara modificar as permissões no diretório de montagem. Em seguida, será possível criar e modificar diretórios no PV.
Por que o sistema exibe a mensagem unknown filesystem type "xxx" ao montar um volume do NAS?
Problema
O sistema exibe a mensagem unknown filesystem type "xxx" ao montar um volume do NAS.
Causa
As dependências do volume do NAS não estão instaladas no nó onde o aplicativo está implantado.
Solução
Verifique se o volume do NAS está configurado corretamente.
Para volumes do NAS, consulte Usar CNFS para gerenciar volumes do NAS (recomendado).
Para volumes do OSS, consulte Usar um volume estático do ossfs 1.0.
Por que o sistema exibe a mensagem NFS Stale File Handle quando um cliente lê ou grava dados em um volume do NAS?
Problema
O sistema exibe a mensagem NFS Stale File Handle quando um cliente lê ou grava dados em um volume do NAS.
Causa
O NAS não garante a consistência dos dados após a montagem de um volume do NAS em um contêiner. Suponha que um volume do NAS esteja montado em dois clientes. O Cliente 1 abre um arquivo no volume do NAS para obter o descritor de arquivo (FD) do arquivo. Se o Cliente 2 excluir o arquivo, o Cliente 1 não poderá ler ou gravar o arquivo e o sistema exibirá a mensagem NFS Stale File Handle.
Solução
Resolva os problemas de consistência de dados de acordo com os cenários do seu negócio.
O que fazer se um pod que usa dois PVCs para montar dois volumes do NAS diferentes permanecer no estado ContainerCreating?
Problema
A inicialização de um pod que usa dois PVCs para montar volumes do NAS falhou e o pod permanece no estado ContainerCreating. O pod pode ser iniciado se você configurá-lo para usar apenas um dos PVCs.
Causa
Os dois PVs associados aos dois PVCs usam o mesmo valor de spec.csi.volumeHandle. Como resultado, o kubelet não consegue diferenciar os dois PVs ao processar a lógica de montagem do PV.
Solução
Defina o parâmetro spec.csi.volumeHandle de cada PV com o nome real do PV.
Como usar o CSI para montar um sistema de arquivos do NAS com TLS ativado?
O NAS usa o TLS para garantir a segurança da transmissão de dados entre o cliente NAS e o serviço NAS, evitando roubo e adulteração de dados. O CSI permite usar o cliente NAS (aliNAS) da Alibaba Cloud para montar volumes e ativar o TLS.
Precauções
O cliente NAS usa o processo stunnel como um wrapper de criptografia TLS. Para aplicativos de alto throughput, o processo stunnel consome uma grande quantidade de recursos de CPU para realizar criptografia e descriptografia. Em casos extremos, cada operação de montagem ocupa um núcleo. Para mais informações, consulte Criptografia em trânsito para sistemas de arquivos NFS.
Procedimento
-
Instale o cliente NAS.
Modifique o ConfigMap do componente csi-plugin para reiniciar o csi-plugin.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cnfs-client-properties: | alinas-utils=true EOF kubectl rollout restart ds -n kube-system csi-plugin -
Monte um volume do NAS provisionado estaticamente ou um volume do NAS provisionado dinamicamente com base no código de exemplo a seguir:
Montar um volume do NAS provisionado dinamicamente
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-tls mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Add a TLS mount option. parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" mountProtocol: alinas # Declare to use the aliNAS client to mount the volume. provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-tls spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-tls resources: requests: storage: 20GiParâmetro
Descrição
parameters.mountProtocol
Defina o parâmetro como alinas para usar o cliente aliNAS para montar o volume. Por padrão, esse parâmetro é deixado vazio e o NFS é usado para montar o volume.
mountOptions
Adicione a opção tls para ativar o TLS. Adicione esta opção apenas quando mountProtocol estiver definido como alinas. Por padrão, o TLS é desativado.
Montar um volume do NAS provisionado estaticamente
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas-tls labels: alicloud-pvname: pv-nas-tls spec: capacity: storage: 5Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas # Enter the name of the PV. volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountProtocol: alinas # Declare to use the aliNAS client to mount the volume. mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Add a TLS mount option. --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas-tls spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas-tlsParâmetro
Descrição
spec.csi.volumeAttributes.mountProtocol
Defina o parâmetro como alinas para usar o cliente aliNAS para montar o volume. Por padrão, esse parâmetro é deixado vazio e o NFS é usado para montar o volume.
spec.mountOptions
Adicione a opção tls para ativar o TLS. Adicione esta opção apenas quando mountProtocol estiver definido como alinas. Por padrão, o TLS é desativado.
O que fazer se a desmontagem do volume do NAS expirar e o pod permanecer no estado Terminating?
Problema
Ao excluir um pod com um volume do NAS montado, o volume do NAS não pode ser desmontado e o pod permanece no estado Terminating.
Causa
O componente csi-plugin monta diretamente o diretório /var/run. Execute o comando a seguir. Se a saída não estiver vazia, o componente csi-plugin está montando diretamente o diretório /var/run.
kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'
Solução
Execute o comando a seguir para corrigir manualmente o arquivo YAML do csi-plugin e resolver o problema:
kubectl patch -n kube-system daemonset csi-plugin -p '
spec:
template:
spec:
containers:
- name: csi-plugin
volumeMounts:
- mountPath: /host/var/run/efc
name: efc-metrics-dir
- mountPath: /host/var/run/ossfs
name: ossfs-metrics-dir
- mountPath: /host/var/run/
$patch: delete
volumes:
- name: ossfs-metrics-dir
hostPath:
path: /var/run/ossfs
type: DirectoryOrCreate
- name: efc-metrics-dir
hostPath:
path: /var/run/efc
type: DirectoryOrCreate
- name: fuse-metrics-dir
$patch: delete'