Compartilhe um volume NFS entre namespaces
Usando Trident, você pode criar um volume em um namespace primário e compartilhá-lo em um ou mais namespaces secundários.
Características
O CR TridentVolumeReference permite que você compartilhe com segurança volumes NFS ReadWriteMany (RWX) entre um ou mais namespaces do Kubernetes. Essa solução nativa do Kubernetes oferece os seguintes benefícios:
-
Múltiplos níveis de controle de acesso para garantir a segurança
-
Compatível com todos os drivers de volume Trident NFS
-
Sem dependência do tridentctl ou de qualquer outro recurso não nativo do Kubernetes
Este diagrama ilustra o compartilhamento de volumes NFS entre dois namespaces do Kubernetes.
Início rápido
Você pode configurar o compartilhamento de volumes NFS em apenas alguns passos.
Configure o PVC de origem para compartilhar o volumeO proprietário do namespace de origem concede permissão para acessar os dados no PVC de origem.
Conceda permissão para criar um CR no namespace de destinoO administrador do cluster concede permissão ao proprietário do namespace de destino para criar o TridentVolumeReference CR.
Criar TridentVolumeReference no namespace de destinoO proprietário do namespace de destino cria o TridentVolumeReference CR para fazer referência ao PVC de origem.
Crie o PVC subordinado no namespace de destinoO proprietário do namespace de destino cria o PVC subordinado para usar a fonte de dados do PVC de origem.
Configure os namespaces de origem e destino
Para garantir a segurança, o compartilhamento entre namespaces exige colaboração e ação do proprietário do namespace de origem, do administrador do cluster e do proprietário do namespace de destino. A função do usuário é designada em cada etapa.
-
Proprietário do namespace de origem: Crie o PVC (
pvc1no namespace de origem que concede permissão para compartilhar com o namespace de destino (namespace2usando a anotaçãoshareToNamespace.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc1 namespace: namespace1 annotations: trident.netapp.io/shareToNamespace: namespace2 spec: accessModes: - ReadWriteMany storageClassName: trident-csi resources: requests: storage: 100GiTrident cria o PV e seu volume de armazenamento NFS de backend.
-
Você pode compartilhar o PVC com vários namespaces usando uma lista separada por vírgulas. Por exemplo,
trident.netapp.io/shareToNamespace: namespace2,namespace3,namespace4. -
Você pode compartilhar com todos os namespaces usando
*. Por exemplo,trident.netapp.io/shareToNamespace: * -
Você pode atualizar o PVC para incluir a
shareToNamespaceanotação a qualquer momento.
-
-
Administrador do cluster: Certifique-se de que o RBAC adequado esteja implementado para conceder permissão ao proprietário do namespace de destino para criar o CR TridentVolumeReference no namespace de destino.
-
Proprietário do namespace de destino: Crie um CR TridentVolumeReference no namespace de destino que faça referência ao namespace de origem
pvc1.apiVersion: trident.netapp.io/v1 kind: TridentVolumeReference metadata: name: my-first-tvr namespace: namespace2 spec: pvcName: pvc1 pvcNamespace: namespace1 -
Proprietário do namespace de destino: Crie um PVC (
pvc2) no namespace de destino (namespace2) usando a anotaçãoshareFromPVCpara designar o PVC de origem.kind: PersistentVolumeClaim apiVersion: v1 metadata: annotations: trident.netapp.io/shareFromPVC: namespace1/pvc1 name: pvc2 namespace: namespace2 spec: accessModes: - ReadWriteMany storageClassName: trident-csi resources: requests: storage: 100GiO tamanho do PVC de destino deve ser menor ou igual ao do PVC de origem.
Trident lê a shareFromPVC anotação no PVC de destino e cria o PV de destino como um volume subordinado, sem recurso de armazenamento próprio, que aponta para o PV de origem e compartilha o recurso de armazenamento do PV de origem. O PVC de destino e o PV de destino aparecem vinculados normalmente.
Excluir um volume compartilhado
Você pode excluir um volume compartilhado entre vários namespaces. Trident removerá o acesso ao volume no namespace de origem e manterá o acesso para outros namespaces que compartilham o volume. Quando todos os namespaces que fazem referência ao volume são removidos, Trident exclui o volume.
Use tridentctl get para consultar volumes subordinados
Usando o[tridentctl utilitário, você pode executar o get comando para obter volumes subordinados. Para mais informações, consulte tridentctl comandos e opções.
Usage: tridentctl get [option]
Bandeiras:
-
`-h, --help: Ajuda para volumes. -
--parentOfSubordinate string: limitar a consulta ao volume de origem subordinado. -
--subordinateOf string: limitar a consulta aos subordinados do volume.
Limitações
-
Trident não pode impedir que os namespaces de destino gravem no volume compartilhado. Você deve usar bloqueio de arquivos ou outros processos para evitar a sobrescrita de dados do volume compartilhado.
-
Não é possível revogar o acesso ao PVC de origem removendo as
shareToNamespaceoushareFromNamespaceanotações ou excluindo oTridentVolumeReferenceCR. Para revogar o acesso, é necessário excluir o PVC subordinado. -
Snapshots, clones e espelhamento não são possíveis em volumes subordinados.
Para obter mais informações
Para saber mais sobre acesso a volumes entre namespaces:
-
Visite "Compartilhamento de volumes entre namespaces: diga olá ao acesso a volumes entre namespaces".
-
Veja a demonstração em "NetAppTV".