Esta página explica como instalar um controlador de armazenamento da interface de armazenamento de contentores (CSI) em clusters do Google Distributed Cloud.
Vista geral
A interface de armazenamento de contentores (CSI) é uma API de norma aberta suportada por muitos fornecedores de armazenamento importantes que permite ao Kubernetes expor sistemas de armazenamento arbitrários a cargas de trabalho em contentores.
Os volumes do Kubernetes são geridos por controladores de armazenamento específicos do fornecedor, que têm sido 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 a StorageClass como predefinição do cluster ou configurar as suas cargas de trabalho para usar a StorageClass (exemplo de StatefulSet).
Instale 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.
Para o armazenamento de produção, recomendamos a instalação de um controlador CSI de um parceiro de armazenamento compatível com o GDC.
Valide a instalação de um controlador
Depois de instalar um controlador CSI, pode validar a instalação executando o seguinte comando:
kubectl get csinodes -o jsonpath='{range .items[*]} \
{.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
Use um controlador CSI
Para usar um controlador CSI:
Crie uma StorageClass do Kubernetes que faça referência ao controlador no respetivo campo
provisioner
.Para aprovisionar armazenamento, pode:
- Faça referência à StorageClass na especificação
volumeClaimTemplates
para um objeto StatefulSet. - Defini-la como a StorageClass predefinida do cluster.
- Faça referência à StorageClass na especificação
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, em vez do 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.
A StorageClass simples seguinte, premium-rwo
, 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: premium-rwo # This field references the existing StorageClass
O que se segue?
- Leia mais sobre os conceitos de armazenamento do Google Distributed Cloud
- Defina uma StorageClass predefinida para o seu cluster