Instalar um controlador da interface de armazenamento de contentores

Esta página explica como instalar um controlador de armazenamento da interface de armazenamento de contentores (CSI) em clusters criados com o Google Distributed Cloud (apenas software) para VMware.

Vista geral

CSI é uma API de norma aberta que permite ao Kubernetes expor sistemas de armazenamento arbitrários a cargas de trabalho contentorizadas. Quando implementa um controlador de armazenamento compatível com CSI num cluster, o cluster pode ligar-se diretamente a um dispositivo de armazenamento compatível sem ter de passar pelo armazenamento do vSphere.

Os volumes do Kubernetes são geridos por controladores de armazenamento específicos do fornecedor, que foram historicamente compilados em ficheiros binários do Kubernetes. Anteriormente, não podia usar um controlador de armazenamento que não estivesse incluído no Kubernetes. A instalação de um controlador CSI adiciona suporte para um sistema de armazenamento que não é suportado nativamente pelo Kubernetes. Além disso, o CSI permite a utilização de funcionalidades de armazenamento modernas, como instantâneos e redimensionamento.

Para usar um controlador CSI, tem de criar uma StorageClass do Kubernetes. Definiu o controlador CSI como o aprovisionador para a StorageClass. Em seguida, pode definir StorageClass como predefinição do cluster ou configurar as suas cargas de trabalho para usar StorageClass (exemplo de StatefulSet).

Antes de começar

Por predefinição, o Google Distributed Cloud usa arquivos de dados do vSphere através do controlador vsphereVolume incorporado. Além disso, os controladores incorporados para NFS e iSCSI podem anexar e montar volumes existentes nas suas cargas de trabalho.

Instalar um controlador CSI de um fornecedor

Os fornecedores de armazenamento desenvolvem os seus próprios controladores CSI e são responsáveis por fornecer instruções de instalação. Em casos simples, a instalação pode envolver apenas a implementação de manifestos nos seus clusters. Consulte a lista de controladores CSI na documentação CSI.

Validar a instalação de um controlador

Depois de instalar um controlador CSI, pode validar a instalação executando o seguinte comando:

kubectl get csidrivers --kubeconfig KUBECONFIG

Usar um controlador CSI

Para usar um controlador CSI:

  1. Crie uma StorageClass do Kubernetes que faça referência ao controlador no respetivo campo provisioner.

  2. Para aprovisionar armazenamento, pode:

Considerações para StorageClasses suportadas por um controlador CSI

Quando cria uma StorageClass, considere o seguinte:

  • A documentação do controlador CSI deve incluir os parâmetros específicos do controlador que fornece à sua StorageClass, incluindo o nome do aprovisionador.
  • Deve dar o nome StorageClass de acordo com as respetivas propriedades e não de acordo com o nome do controlador ou do dispositivo específico subjacente. A atribuição de nomes à StorageClass com base nas respetivas propriedades permite-lhe criar StorageClasses com o mesmo nome em vários clusters e ambientes, e permite que as suas aplicações obtenham armazenamento com as mesmas propriedades em todos os clusters.

Exemplo: referencie StorageClass num StatefulSet

O exemplo seguinte modela como definir um controlador CSI numa StorageClass e, em seguida, referenciar a StorageClass numa carga de trabalho StatefulSet. O exemplo pressupõe que o controlador já foi instalado no cluster.

Segue-se uma StorageClass simples denominada premium-rwo que usa um controlador CSI fictício, csi.example.com, como o respetivo aprovisionador:

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
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

Referencia a StorageClass na especificação de um StatefulSet.volumeClaimTemplates

Quando faz referência a uma StorageClass na especificação de um StatefulSet, o Kubernetes fornece armazenamento estável através de PersistentVolumes (PVs).volumeClaimTemplates O Kubernetes chama o aprovisionador definido na StorageClass para criar um novo volume de armazenamento. Neste caso, o Kubernetes chama o fornecedor fictício csi.example.com que, por sua vez, chama a API do fornecedor para criar um volume. Depois de o volume ser aprovisionado, o Kubernetes cria automaticamente um PV para representar o armazenamento.

Segue-se um StatefulSet simples que faz referência à 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

O que se segue?