Uso de um bucket do OBS através de um PV dinâmico
Esta seção descreve como criar automaticamente um bucket do OBS. É aplicável quando nenhum volume de armazenamento subjacente estiver disponível.
Restrições
- Se forem utilizados volumes do OBS, o grupo proprietário e a permissão do ponto de montagem não podem ser modificados.
- O CCE permite que sistemas de arquivos paralelos sejam montados usando SDKs ou PVCs do OBS. Se for usada montagem em PVC, a ferramenta obsfs fornecida pelo OBS deve ser usada. Um processo residente de obsfs é gerado cada vez que um volume de armazenamento de objetos gerado a partir de um sistema de arquivos paralelo é montado em um nó.
Figura 1 Processo residente do obsfs
Reserve 1 GiB de memória para cada processo de obsfs. Por exemplo, para um nó com 4 vCPUs e 8 GiB de memória, um sistema de arquivos paralelo obsfs deve ser montado em no máximo oito pods.
- Um processo residente do obsfs é executado em um nó. Se a memória consumida exceder o limite superior do nó, o nó funciona mal. Em um nó com 4 vCPUs e 8 GiB de memória, se mais de 100 pods forem montados em um sistema de arquivos paralelo, o nó não estará disponível. Controle o número de pods montados em um sistema de arquivos paralelo em um único nó.
- Ao usar obsfs, cumpra com as Restrições de obsfs.
- Os contêineres de Kata não suportam volumes do OBS.
- O OBS permite que um único usuário crie no máximo 100 buckets. Se um grande número de PVCs dinâmicas for criado, o número de buckets poderá exceder o limite superior e nenhum outro bucket do OBS poderá ser criado. Nesse caso, use o OBS chamando sua API ou SDK e não monte buckets do OBS em cargas de trabalho.
Criar automaticamente um volume do OBS no console
- Efetue logon no console do CCE e acesse o console do cluster.
- Crie dinamicamente uma PVC e um PV.
- Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs). Clique em Create PVC no canto superior direito. Na caixa de diálogo exibida, configure os parâmetros de PVC.
Parâmetro
Descrição
PVC Type
Neste exemplo, selecione OBS.
PVC Name
Digite o nome da PVC, que deve ser exclusivo no mesmo namespace.
Creation Method
- Se nenhum armazenamento subjacente estiver disponível, selecione Dynamically provision para criar uma PVC, um PV e armazenamento subjacente no console no modo de cascata.
- Se o armazenamento subjacente estiver disponível, crie um volume de armazenamento ou use um volume de armazenamento existente para criar estaticamente uma PVC com base em se um PV foi criado. Para mais detalhes, consulte Uso de um bucket do OBS existente através de um PV estático.
Neste exemplo, selecione Dynamically provision.
Storage Classes
A classe de armazenamento dos volumes do OBS é csi-obs.
Instance Type
- Parallel file system: um sistema de arquivos de alto desempenho fornecido pelo OBS. Ele fornece latência de acesso de milissegundos, largura de banda no nível de TB/s e IOPS no nível de milhões. Sistemas de arquivos paralelos são recomendados.
- Object bucket: um contêiner que armazena objetos no OBS. Todos os objetos em um bucket estão no mesmo nível lógico.
OBS Class
Você pode selecionar os seguintes tipos de bucket de objetos:- Standard: aplicável quando um grande número de arquivos de hotspot ou arquivos de pequeno porte precisam ser acessados com frequência (várias vezes por mês, em média) e exigem resposta de acesso rápida.
- Infrequent access: aplicável quando os dados não são acessados com frequência (menos de 12 vezes por ano, em média), mas exigem resposta de acesso rápido.
Access Mode
Os volumes do OBS suportam apenas ReadWriteMany, indicando que um volume de armazenamento pode ser montado em vários nós no modo de leitura/gravação. Para mais detalhes, consulte Modos de acesso a volume.
Secret
Custom: personalize um segredo se você quiser atribuir permissões de usuário diferentes a diferentes dispositivos de armazenamento do OBS. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.
Somente segredos com o rótulo secret.kubernetes.io/used-by = csi podem ser selecionados. O tipo de segredo é cfe/secure-opaque. Se nenhum segredo estiver disponível, clique em Create Secret para criar um.- Name: insira um nome de segredo.
- Namespace: selecione o namespace onde o segredo está.
- Access Key (AK/SK): carregue um arquivo de chave no formato .csv. Para mais detalhes, consulte Obter uma chave de acesso.
Enterprise Project
Projetos empresariais suportados: padrão, aquele ao qual o cluster pertence ou aquele especificado pela classe de armazenamento.
- Clique em Create para criar uma PVC e um PV.
Você pode escolher Storage no painel de navegação e exibir a PVC e o PV criados nas páginas de guia PersistentVolumeClaims (PVCs) e PersistentVolumes (PVs), respectivamente.
- Escolha Storage no painel de navegação e clique na guia PersistentVolumeClaims (PVCs). Clique em Create PVC no canto superior direito. Na caixa de diálogo exibida, configure os parâmetros de PVC.
- Crie uma aplicação.
- No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia Deployments.
- Clique em Create Workload no canto superior direito. Na página exibida, clique em Data Storage na área Container Settings e clique em Add Volume para selecionar PVC.
Monte e use volumes de armazenamento, conforme mostrado na Tabela 1. Para obter detalhes sobre outros parâmetros, consulte Cargas de trabalho.
Tabela 1 Montagem de um volume de armazenamento Parâmetro
Descrição
PVC
Selecione um volume de armazenamento de objetos existente.
Mount Path
Digite um caminho de montagem, por exemplo, /tmp.
Este parâmetro indica o caminho do contêiner no qual um volume de dados será montado. Não monte o volume em um diretório do sistema como / ou /var/run. Caso contrário, os contêineres estarão com defeito. Monte o volume em um diretório vazio. Se o diretório não estiver vazio, verifique se não há arquivos que afetem a inicialização do contêiner. Caso contrário, os arquivos serão substituídos, causando falhas de inicialização do contêiner ou falhas de criação de carga de trabalho.AVISO:Se um volume for montado em um diretório de alto risco, use uma conta com permissões mínimas para iniciar o contêiner. Caso contrário, arquivos de alto risco no host podem ser danificados.
Subpath
Digite um subcaminho, por exemplo, tmp, indicando que os dados no caminho de montagem do contêiner serão armazenados na pasta tmp do volume.
Um subcaminho é usado para montar um volume local para que o mesmo volume de dados seja usado em um único pod. Se este parâmetro for deixado em branco, o caminho raiz é usado por padrão.
Permission
- Read-only: você só pode ler os dados nos volumes montados.
- Read/Write: você pode modificar os volumes de dados montados no caminho. Os dados recém-gravados não serão migrados se o contêiner for migrado, o que pode causar perda de dados.
Neste exemplo, o disco é montado no caminho /data do contêiner. Os dados de contêiner gerados nesse caminho são armazenados no volume do OBS.
- Após a configuração, clique em Create Workload.
Depois que a carga de trabalho for criada, os dados no diretório de montagem do contêiner serão armazenados persistentemente. Verifique o armazenamento referindo-se a Política de recuperação da PV.
(kubectl) Criação automática de um volume do OBS
- Use o kubectl para se conectar ao cluster.
- Use StorageClass para criar dinamicamente uma PVC e um PV.
- Crie o arquivo pvc-obs-auto.yaml.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-obs-auto namespace: default annotations: everest.io/obs-volume-type: STANDARD # Object storage type. csi.storage.k8s.io/fstype: obsfs # Instance type. csi.storage.k8s.io/node-publish-secret-name: <your_secret_name> # Custom secret name. csi.storage.k8s.io/node-publish-secret-namespace: <your_namespace> # Namespace of the custom secret. everest.io/enterprise-project-id: <your_project_id> # (Optional) Enterprise project ID. If an enterprise project is specified, use the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to a PV. spec: accessModes: - ReadWriteMany # The value must be ReadWriteMany for object storage. resources: requests: storage: 1Gi # OBS volume capacity. storageClassName: csi-obs # The storage class type is OBS.
Tabela 2 Parâmetros principais Parâmetro
Obrigatório
Descrição
everest.io/obs-volume-type
Sim
Classe de armazenamento do OBS.
- Se fsType for definido como s3fs, STANDARD (bucket padrão) e WARM (bucket de acesso infrequente) serão suportados.
- Este parâmetro é inválido quando fsType é definido como obsfs.
csi.storage.k8s.io/fstype
Sim
Tipos de instância. O valor pode ser obsfs ou s3fs.
- obsfs: sistema de arquivos paralelo, que é montado usando obsfs (recomendado).
- s3fs: bucket de objetos, que é montado usando s3fs.
csi.storage.k8s.io/node-publish-secret-name
Não
Nome de segredo personalizado.
(Recomendado) Selecione esta opção se quiser atribuir permissões de usuário diferentes a diferentes dispositivos de armazenamento do OBS. Para mais detalhes, consulte Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS.
csi.storage.k8s.io/node-publish-secret-namespace
Não
Namespace de um segredo personalizado.
everest.io/enterprise-project-id
Não
ID do projeto do OBS.
Para obter um ID de projeto empresarial, efetue logon no console do EPS, clique no nome do projeto empresarial de destino e copie o ID do projeto empresarial.
storage
Sim
Capacidade solicitada na PVC, em Gi.
Para buckets do OBS, esse campo é usado apenas para verificação (não pode estar vazio ou 0). Seu valor é fixado em 1, e qualquer valor que você definir não terá efeito para buckets do OBS.
storageClassName
Sim
Nome da classe de armazenamento. O nome da classe de armazenamento dos volumes do OBS é csi-obs.
- Execute o seguinte comando para criar uma PVC:
kubectl apply -f pvc-obs-auto.yaml
- Crie o arquivo pvc-obs-auto.yaml.
- Crie uma aplicação.
- Crie um arquivo chamado web-demo.yaml. Neste exemplo, o volume do OBS é montado no caminho /data.
apiVersion: apps/v1 kind: Deployment metadata: name: web-demo namespace: default spec: replicas: 2 selector: matchLabels: app: web-demo template: metadata: labels: app: web-demo spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: pvc-obs-volume #Volume name, which must be the same as the volume name in the volumes field. mountPath: /data #Location where the storage volume is mounted. imagePullSecrets: - name: default-secret volumes: - name: pvc-obs-volume #Volume name, which can be customized. persistentVolumeClaim: claimName: pvc-obs-auto #Name of the created PVC.
- Execute o seguinte comando para criar uma carga de trabalho na qual o volume do OBS está montado:
kubectl apply -f web-demo.yaml
Depois que a carga de trabalho é criada, você pode tentar Verificar a persistência e o compartilhamento de dados.
- Crie um arquivo chamado web-demo.yaml. Neste exemplo, o volume do OBS é montado no caminho /data.
Verificar a persistência e o compartilhamento de dados
- Exiba a aplicação implementada e os arquivos.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep web-demo
Saída esperada:web-demo-846b489584-mjhm9 1/1 Running 0 46s web-demo-846b489584-wvv5s 1/1 Running 0 46s
- Execute os seguintes comandos em sequência para visualizar os arquivos no caminho /data dos pods:
kubectl exec web-demo-846b489584-mjhm9 -- ls /data kubectl exec web-demo-846b489584-wvv5s -- ls /data
Se nenhum resultado for retornado para ambos os pods, nenhum arquivo existirá no caminho /data.
- Execute o seguinte comando para exibir o pod criado:
- Execute o seguinte comando para criar um arquivo chamado static no caminho /data:
kubectl exec web-demo-846b489584-mjhm9 -- touch /data/static
- Execute o seguinte comando para exibir os arquivos no caminho /data:
kubectl exec web-demo-846b489584-mjhm9 -- ls /data
Saída esperada:
static
- Verifique a persistência dos dados.
- Execute o seguinte comando para excluir o pod chamado web-demo-846b489584-mjhm9:
kubectl delete pod web-demo-846b489584-mjhm9
Saída esperada:
pod "web-demo-846b489584-mjhm9" deleted
Após a eliminação, o controlador de Implementação cria automaticamente uma réplica.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep web-demo
A saída esperada é a seguinte, na qual web-demo-846b489584-d4d4j é o pod recém-criado:web-demo-846b489584-d4d4j 1/1 Running 0 110s web-demo-846b489584-wvv5s 1/1 Running 0 7m50s
- Execute o seguinte comando para verificar se os arquivos no caminho /data do pod novo foram modificados:
kubectl exec web-demo-846b489584-d4d4j -- ls /data
Saída esperada:
static
Se o arquivo static ainda existir, os dados podem ser armazenados persistentemente.
- Execute o seguinte comando para excluir o pod chamado web-demo-846b489584-mjhm9:
- Verifique o compartilhamento de dados.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep web-demo
Saída esperada:web-demo-846b489584-d4d4j 1/1 Running 0 7m web-demo-846b489584-wvv5s 1/1 Running 0 13m
- Execute o seguinte comando para criar um arquivo chamado share no caminho /data de qualquer pod: Neste exemplo, selecione o pod chamado web-demo-846b489584-d4d4j.
kubectl exec web-demo-846b489584-d4d4j -- touch /data/share
Verifique os arquivos no caminho /data do pod.kubectl exec web-demo-846b489584-d4d4j -- ls /data
Saída esperada:
share static
- Verifique se o arquivo share existe no caminho /data de outro pod (web-demo-846b489584-wvv5s) também para verificar o compartilhamento de dados.
kubectl exec web-demo-846b489584-wvv5s -- ls /data
Saída esperada:
share static
Depois de criar um arquivo no caminho /data de um pod, se o arquivo também for criado no caminho /data do outro pod, os dois pods compartilharão o mesmo volume.
- Execute o seguinte comando para exibir o pod criado:
Operações relacionadas
Operação |
Descrição |
Procedimento |
---|---|---|
Atualizar uma chave de acesso |
Atualize a chave de acesso do armazenamento de objetos no console do CCE. |
|
Visualizar eventos |
Você pode visualizar nomes de eventos, tipos de eventos, número de ocorrências, eventos do Kubernetes, horário da primeira ocorrência e horário da última ocorrência da PVC ou PV. |
|
Exibir um arquivo YAML |
Você pode visualizar, copiar e fazer download dos arquivos YAML de uma PVC ou um PV. |
|