Neste tópico, explicamos como instalar um driver de armazenamento do Container Storage Interface (CSI) nos clusters locais do GKE On-Prem.
Visão geral
A CSI é uma API aberta padrão que permite ao Kubernetes expor sistemas de armazenamento arbitrários a cargas de trabalho em contêineres. Quando você implanta um driver de armazenamento compatível com CSI em um cluster do GKE On-Prem, o cluster pode se conectar diretamente a um dispositivo de armazenamento compatível sem precisar passar pelo armazenamento do vSphere.
Os volumes do Kubernetes são gerenciados por drivers de armazenamento específicos do fornecedor, que foram, ao longo dos anos, compilados em binários do Kubernetes. Anteriormente, não era possível usar um driver de armazenamento que não estava incluído no Kubernetes. A instalação de um driver CSI adiciona compatibilidade com um sistema de armazenamento que não é compatível nativamente com o Kubernetes. Além disso, o CSI permite o uso de recursos de armazenamento modernos, como snapshots e redimensionamento.
Para usar um driver da CSI, você precisa criar um StorageClass do Kubernetes. Defina o driver do CSI como provisionador do StorageClass. Em seguida, é possível definir o StorageClass como padrão do cluster ou configurar as cargas de trabalho usando o StorageClass (exemplo de StatefulSet).
Antes de começar
Revise os plug-ins de volume na árvore do Kubernetes e confirme se o Kubernetes já inclui o driver.
Por padrão, o GKE On-Prem usa o armazenamentos de dados do vSphere no driver vs.phereVolume integrado. Além disso, os drivers integrados para NFS e iSCSI podem anexar e ativar volumes existentes para suas cargas de trabalho.
Como instalar o driver CSI de um fornecedor
Os fornecedores de armazenamento desenvolvem os próprios drivers CSI e são responsáveis por fornecer instruções de instalação. Em casos simples, a instalação envolve apenas a implantação de manifestos nos clusters. Veja a lista de drivers CSI na documentação da CSI.
Como verificar a instalação de um driver
Depois de instalar um driver CSI, é possível verificar a instalação executando um dos seguintes comandos, dependendo da versão do GKE On-Prem do cluster:
1.2.0-gke.5
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.1.0-gke.6
kubectl get nodes \ -o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'
Como usar um driver CSI
Para usar um driver CSI:
Crie um StorageClass do Kubernetes que faça referência ao driver no campo
provisioner
.Para provisionar armazenamento, é possível:
- Faça referência ao StorageClass em uma especificação
volumeClaimTemplates
do StatefulSet. - Defini-lo como o StorageClass padrão do cluster.
- Faça referência ao StorageClass em uma especificação
Considerações para StorageClasses apoiadas por um driver CSI
Ao criar um StorageClass, considere o seguinte:
- A documentação do driver CSI precisa incluir os parâmetros específicos do driver que você provisiona ao StorageClass, incluindo o nome do provisionador.
- Nomeie o StorageClass de acordo com as propriedades dele (como "rápido" ou "altamente replicado"), em vez do nome do driver ou dispositivo específico por trás dele. Nomear o StorageClass de acordo com as propriedades dele permite criar um StorageClasses com o mesmo nome em vários clusters e ambientes, além de permitir que os aplicativos recebam armazenamento com as mesmas propriedades em vários clusters.
Exemplo: StorageClass de referência em um StatefulSet
O exemplo de modelos a seguir mostra como definir um driver CSI em um StorageClass e, em seguida, como referenciar o StorageClass em uma carga de trabalho StatefulSet. O exemplo pressupõe que o driver já foi instalado no cluster.
Veja abaixo um StorageClass simples chamado fast
, que usa um driver fictício CSI,
csi.example.com
, como o provisionador:
fast-sc.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: csi.example.com # CSI driver parameters: # You provide vendor-specific parameters to this specification type: example-parameter # Be sure to follow the vendor's instructions datastore: my-datastore reclaimPolicy: Retain allowVolumeExpansion: true
Você faz referência ao StorageClass na especificação volumeClaimTemplates
de um StatefulSet.
Quando você se referir a um StorageClass na especificação volumeClaimTemplates
de um StatefulSet, o Kubernetes fornecerá armazenamento estável usando PersistentVolumes (PVs).
O Kubernetes chama o provisionador definido no StorageClass para criar um novo
volume de armazenamento. Nesse caso, o Kubernetes chama o provedor fictício csi.example.com
,
que chama a API do provedor, para criar um volume. Depois que o
volume é provisionado, o Kubernetes cria automaticamente um PV para representar o
armazenamento.
Veja um StatefulSet simples que faz referência ao StorageClass:
statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: # This is the specification in which you reference the StorageClass - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi storageClassName: fast # This field references the existing StorageClass
A seguir
- Leia mais sobre os conceitos de armazenamento do GKE On-Prem
- Defina um StorageClass padrão para o cluster