Montagem dinâmica de um disco EVS para um StatefulSet
Cenários de aplicações
A montagem dinâmica está disponível apenas para a criação de um StatefulSet. Ela é implementada por meio de um modelo de declaração de volume (campo volumeClaimTemplates) e depende da classe de armazenamento para provisionar PVs dinamicamente. Nesse modo, cada pod em um StatefulSet de vários pods está associado a uma PVC e um PV exclusivos. Depois que um pod é reprogramado, os dados originais ainda podem ser montados nele com base no nome da PVC. No modo de montagem comum de uma Implementação, se ReadWriteMany for suportado, vários pods da Implementação serão montados no mesmo armazenamento subjacente.
Pré-requisitos
- Você criou um cluster e instalou o complemento Armazenamento do contêiner do CCE (Everest) no cluster.
- Se você quiser criar um cluster usando comandos, use kubectl para se conectar ao cluster. Para mais detalhes, consulte Conexão a um cluster usando o kubectl.
(Console) Montagem dinâmica de um disco EVS
- Efetue logon no console do CCE e clique no nome do cluster para acessar o console do cluster.
- No painel de navegação à esquerda, clique em Workloads. No painel direito, clique na guia StatefulSets.
- 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 VolumeClaimTemplate (VTC).
- Clique em Create PVC. Na caixa de diálogo exibida, configure os parâmetros de PVC.
Clique em Create.
Parâmetro
Descrição
PVC Type
Neste exemplo, selecione EVS.
PVC Name
Digite o nome da PVC. Depois que uma PVC é criada, um sufixo é adicionado automaticamente com base no número de pods. O formato é <Custom PVC name>-<Serial number>, por exemplo, example-0.
Creation Method
Você só pode selecionar Dynamically provision para criar uma PVC, um PV e armazenamento subjacente no console no modo de cascata.
Storage Classes
A classe de armazenamento para discos EVS é csi-disk.
AZ
Selecione a AZ do disco EVS. A AZ deve ser a mesma do nó do cluster.
NOTA:Um disco EVS só pode ser montado em um nó na mesma AZ. Depois que um disco EVS é criado, sua AZ não pode ser alterada.
Disk Type
Selecione um tipo de disco EVS.
Access Mode
Discos EVS suportam apenas ReadWriteOnce indicando que um volume de armazenamento pode ser montado em um nó no modo leitura/gravação. Para mais detalhes, consulte Modos de acesso a volume.
Capacity (GiB)
Capacidade do volume de armazenamento solicitado.
Encryption
Você pode selecionar Encryption e uma chave de criptografia para criptografar o armazenamento subjacente. Somente discos EVS e sistemas de arquivos do SFS suportam criptografia.
Enterprise Project
Projetos empresariais suportados: padrão, aquele ao qual o cluster pertence ou aquele especificado pela classe de armazenamento.
Resource Tag
Você pode adicionar tags de recurso para classificar recursos, que é suportado apenas quando a versão de everest no cluster é 2.1.39 ou posterior.
Você pode criar tags predefinidas no console do TMS. As tags predefinidas estão disponíveis para todos os recursos que suportam tags. Você pode usar tags predefinidas para melhorar a criação de tags e a eficiência da migração de recursos. Para obter detalhes, consulte Criação de tags predefinidas.
O CCE cria automaticamente as tags de sistema CCE-Cluster-ID={Cluster ID}, CCE-Cluster-Name={Cluster name} e CCE-Namespace={Namespace name}. Essas tags não podem ser modificadas.
NOTA:Depois que um PV dinâmico do tipo de EVS é criado, as tags de recurso não podem ser atualizadas no console do CCE. Para atualizar essas tags de recurso, acesse o console do EVS.
- Insira o caminho no qual o volume está montado.
Tabela 1 Montagem de um volume de armazenamento Parâmetro
Descrição
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 disco EVS.
- Monte e use dinamicamente volumes de armazenamento. Para obter detalhes sobre outros parâmetros, consulte Criação de um StatefulSet. 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 Verificar a persistência dos dados.
Montagem dinâmica de um volume do EVS usando kubectl
- Use o kubectl para se conectar ao cluster.
- Crie um arquivo chamado statefulset-evs.yaml. Neste exemplo, o volume do EVS é montado no caminho /data.
apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-evs namespace: default spec: selector: matchLabels: app: statefulset-evs template: metadata: labels: app: statefulset-evs spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: pvc-disk # The value must be the same as that in the volumeClaimTemplates field. mountPath: /data # Location where the storage volume is mounted. imagePullSecrets: - name: default-secret serviceName: statefulset-evs # Headless Service name. replicas: 2 volumeClaimTemplates: - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-disk namespace: default annotations: everest.io/disk-volume-type: SAS # EVS disk type. everest.io/crypt-key-id: <your_key_id> # (Optional) Encryption key ID. Mandatory for an encrypted disk. 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. labels: failure-domain.beta.kubernetes.io/region: <your_region> # Region of the node where the application is to be deployed. failure-domain.beta.kubernetes.io/zone: <your_zone> # AZ of the node where the application is to be deployed. spec: accessModes: - ReadWriteOnce # The value must be ReadWriteOnce for EVS disks. resources: requests: storage: 10Gi # EVS disk capacity, ranging from 1 to 32768. storageClassName: csi-disk # Storage class type for EVS disks. --- apiVersion: v1 kind: Service metadata: name: statefulset-evs # Headless Service name. namespace: default labels: app: statefulset-evs spec: selector: app: statefulset-evs clusterIP: None ports: - name: statefulset-evs targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP
Tabela 2 Parâmetros principais Parâmetro
Obrigatório
Descrição
failure-domain.beta.kubernetes.io/region
Sim
Região onde o cluster está localizado.
Para obter detalhes sobre o valor da region, consulte Regiões e pontos de extremidade.
failure-domain.beta.kubernetes.io/zone
Sim
AZ onde o volume do EVS é criado. Deve ser a mesma que a AZ planejada para a carga de trabalho.
Para obter detalhes sobre o valor da zone, consulte Regiões e pontos de extremidade.
everest.io/disk-volume-type
Sim
Tipos de disco EVS. Todas as letras estão em maiúsculas.- SAS: I/O alta
- SSD: I/O ultra-alta
- GPSSD: SSD de uso geral
- ESSD: SSD extremo
everest.io/crypt-key-id
Não
Obrigatório quando o disco EVS é criptografado. Insira o ID da chave de criptografia selecionada durante a criação do disco EVS.
Para obter o ID da chave de criptografia, faça logon no Cloud Server Console. No painel de navegação, escolha Elastic Volume Service > Disks. Clique no nome do disco EVS de destino para acessar sua página de detalhes. Na página de guia Summary, copie o valor de KMS Key ID na área Configuration Information.
everest.io/enterprise-project-id
Não
Opcional.
ID do projeto empresarial do disco EVS. Se um projeto empresarial for especificado, use o mesmo projeto empresarial ao criar uma PVC. Caso contrário, a PVC não pode ser vinculada a um PV.
Para obter o código do projeto empresarial, efetue logon no Cloud Server Console. No painel de navegação, escolha Elastic Volume Service > Disks. Clique no nome do disco EVS de destino para acessar sua página de detalhes. Na página de guia Summary, clique no projeto empresarial em Management Information para acessar o console do projeto empresarial. Copie o ID correspondente para obter o ID do projeto corporativo ao qual o disco EVS pertence.
storage
Sim
Capacidade de PVC solicitada, em Gi. O valor varia de 1 a 32768.
storageClassName
Sim
O nome da classe de armazenamento para discos EVS é csi-disk.
- Execute o seguinte comando para criar uma carga de trabalho na qual o volume do EVS está montado:
kubectl apply -f statefulset-evs.yaml
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 Verificar a persistência dos dados.
Verificar a persistência dos dados
- Visualize a aplicação implementado e os arquivos de volume do EVS.
- Execute o seguinte comando para exibir o pod criado:
kubectl get pod | grep statefulset-evs
Saída esperada:statefulset-evs-0 1/1 Running 0 45s statefulset-evs-1 1/1 Running 0 28s
- Execute o seguinte comando para verificar se o volume do EVS foi montado no caminho /data:
kubectl exec statefulset-evs-0 -- df | grep data
Saída esperada:
/dev/sdd 10255636 36888 10202364 0% /data
- Execute o seguinte comando para exibir os arquivos no caminho /data:
kubectl exec statefulset-evs-0 -- ls /data
Saída esperada:
lost+found
- Execute o seguinte comando para exibir o pod criado:
- Execute o seguinte comando para criar um arquivo chamado static no caminho /data:
kubectl exec statefulset-evs-0 -- touch /data/static
- Execute o seguinte comando para exibir os arquivos no caminho /data:
kubectl exec statefulset-evs-0 -- ls /data
Saída esperada:
lost+found static
- Execute o seguinte comando para excluir o pod chamado web-evs-auto-0:
kubectl delete pod statefulset-evs-0
Saída esperada:
pod "statefulset-evs-0" deleted
- Após a exclusão, o controlador de StatefulSet cria automaticamente uma réplica com o mesmo nome. Execute o seguinte comando para verificar se os arquivos no caminho /data foram modificados:
kubectl exec statefulset-evs-0 -- ls /data
Saída esperada:
lost+found static
Se o arquivo static ainda existir, os dados no volume de EVS podem ser armazenados persistentemente.
Operações relacionadas
Operação |
Descrição |
Procedimento |
---|---|---|
Expandir a capacidade de um disco EVS |
Expanda rapidamente a capacidade de um disco EVS montado no console do CCE. Somente a capacidade de discos EVS de pagamento por uso pode ser expandida no console do CCE. Para expandir a capacidade de discos EVS anuais/mensais, clique no nome do volume para ir para o console do EVS. |
|
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. |
|