Este guia descreve como pode criar um novo volume do Kubernetes com base no controlador CSI do Lustre gerido no GKE com aprovisionamento dinâmico. O controlador CSI Lustre gerido permite-lhe criar armazenamento com base em instâncias do Lustre gerido a pedido e aceder a este como volumes para as suas cargas de trabalho com estado.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Cloud Managed Lustre e a API Google Kubernetes Engine. Ativar APIs
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Para conhecer as limitações e os requisitos, consulte a vista geral do controlador CSI.
- Certifique-se de que ativa o controlador CSI Lustre gerido. Está desativado por predefinição nos clusters Standard e Autopilot.
Configure variáveis de ambiente
Configure as seguintes variáveis de ambiente:
export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
export CLUSTER_VERSION=CLUSTER_VERSION
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster.PROJECT_ID
: o seu Google Cloud ID do projeto.LUSTRE_NETWORK
: a rede da nuvem virtual privada (VPC) partilhada onde residem o cluster do GKE e a instância do Lustre gerida.LUSTRE_IP_RANGE
: o nome do intervalo de endereços IP criado para a interligação de redes VPC com o Managed Lustre.LUSTRE_FIREWALL_RULE
: o nome da regra de firewall para permitir o tráfego TCP do intervalo de endereços IP.ZONE
: a zona geográfica do seu cluster do GKE; por exemplo,us-central1-a
.CLUSTER_VERSION
: a versão do cluster do GKE.
Configure uma rede de VPC
Tem de especificar a mesma rede VPC quando criar a instância do Lustre gerido e os clusters do GKE, ou ligar através do Centro de conectividade de rede se usar uma rede VPC com peering.
Para ativar a rede de serviços, execute o seguinte comando:
gcloud services enable servicenetworking.googleapis.com \ --project=${PROJECT_ID}
Crie uma rede de VPC. Definir a flag
--mtu
como8896
resulta num aumento de 10% no desempenho.gcloud compute networks create ${NETWORK_NAME} \ --subnet-mode=auto --project=${PROJECT_ID} \ --mtu=8896
Crie um intervalo de endereços IP.
gcloud compute addresses create ${IP_RANGE_NAME} \ --global \ --purpose=VPC_PEERING \ --prefix-length=20 \ --description="Managed Lustre VPC Peering" \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID}
Obtenha o intervalo CIDR associado ao intervalo que criou no passo anterior.
CIDR_RANGE=$( gcloud compute addresses describe ${IP_RANGE_NAME} \ --global \ --format="value[separator=/](address, prefixLength)" \ --project=${PROJECT_ID} )
Crie uma regra de firewall para permitir o tráfego TCP do intervalo de endereços IP que criou.
gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \ --allow=tcp:988,tcp:6988 \ --network=${NETWORK_NAME} \ --source-ranges=${CIDR_RANGE} \ --project=${PROJECT_ID}
Para configurar a interligação de redes para o seu projeto, verifique se tem as autorizações de IAM necessárias, especificamente a função
compute.networkAdmin
ouservicenetworking.networksAdmin
.- Aceda a Google Cloud consola > IAM e administração e, de seguida, pesquise o principal proprietário do projeto.
- Clique no ícone de lápis e, de seguida, em + ADICIONAR OUTRA FUNÇÃO.
- Selecione Administrador de rede de cálculo ou Administrador de rede de serviços.
- Clique em Guardar.
Estabeleça a ligação de peering.
gcloud services vpc-peerings connect \ --network=${NETWORK_NAME} \ --project=${PROJECT_ID} \ --ranges=${IP_RANGE_NAME} \ --service=servicenetworking.googleapis.com
Configure o controlador CSI Lustre gerido
Esta secção aborda como pode ativar e desativar o controlador CSI Lustre gerido, se necessário.
Portas de comunicação do Lustre
O controlador CSI do Lustre gerido do GKE usa portas diferentes para a comunicação com instâncias do Lustre gerido, consoante a versão do cluster do GKE e as configurações do Lustre gerido existentes.
Porta predefinida (recomendado): para novos clusters do GKE que executam a versão
1.33.2-gke.4780000
ou posterior, o controlador usa a porta988
para a comunicação Lustre por predefinição.Porta antiga: use a porta
6988
anexando a flag--enable-legacy-lustre-port
aos seus comandosgcloud
nos seguintes cenários:- Versões anteriores do GKE: se o seu cluster do GKE executar uma versão anterior à
1.33.2-gke.4780000
, a flag--enable-legacy-lustre-port
contorna um conflito de portas com ogke-metadata-server
nos nós do GKE. - Instâncias do Lustre existentes: se estiver a estabelecer ligação a uma instância do Lustre gerida existente que foi criada com a flag
gke-support-enabled
, tem de incluir--enable-legacy-lustre-port
nos comandosgcloud
, independentemente da versão do cluster. Sem esta flag, o cluster do GKE não consegue montar a instância do Lustre existente. Para informações sobre a flaggke-support-enabled
, consulte a descrição das flags opcionais em Crie uma instância.
- Versões anteriores do GKE: se o seu cluster do GKE executar uma versão anterior à
Pode configurar os clusters novos e existentes para usar a porta predefinida 988
ou a porta antiga 6988
.
Ative o controlador CSI Lustre gerido num novo cluster do GKE
As secções seguintes descrevem como ativar o controlador CSI Lustre gerido num novo cluster do GKE.
Usar a porta predefinida 988
Para ativar o controlador CSI Lustre gerido quando cria um novo cluster do GKE que executa a versão 1.33.2-gke.4780000
ou posterior, execute o seguinte comando:
Piloto automático
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver
Use a porta antiga 6988
Para ativar o controlador CSI Lustre gerido quando cria um novo cluster do GKE que executa uma versão anterior à 1.33.2-gke.4780000
, execute o seguinte comando:
Piloto automático
gcloud container clusters create-auto "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--enable-lustre-csi-driver \
--enable-legacy-lustre-port
Standard
gcloud container clusters create "${CLUSTER_NAME}" \
--location=${LOCATION} \
--network="${NETWORK_NAME}" \
--cluster-version=${CLUSTER_VERSION} \
--addons=LustreCsiDriver \
--enable-legacy-lustre-port
Ative o controlador CSI Lustre gerido em clusters do GKE existentes
As secções seguintes descrevem como ativar o controlador CSI Lustre gerido em clusters do GKE existentes.
Usar a porta predefinida 988
Para ativar o controlador CSI Lustre gerido num cluster do GKE existente que execute a versão 1.33.2-gke.4780000
ou posterior, execute o seguinte comando:
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=ENABLED
Use a porta antiga 6988
Para ativar o controlador CSI Lustre gerido num cluster do GKE existente, pode ter de usar a porta antiga 6988
adicionando a flag --enable-legacy-lustre-port
. Esta flag é obrigatória nos seguintes cenários:
- Se o seu cluster do GKE for executado numa versão anterior a
1.33.2-gke.4780000
. Se pretender associar este cluster a uma instância do Lustre gerida existente que foi criada com a flag
gke-support-enabled
.gcloud container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-legacy-lustre-port
É necessária a atualização de nós em clusters existentes
A ativação do controlador CSI Lustre gerido em clusters existentes pode acionar a recriação de nós para atualizar os módulos do kernel necessários para o cliente Lustre gerido. Para disponibilidade imediata, recomendamos que atualize manualmente os seus conjuntos de nós.
Os clusters do GKE num canal de lançamento são atualizados de acordo com a respetiva implementação agendada, que pode demorar várias semanas, consoante a sua janela de manutenção. Se estiver numa versão estática do GKE, tem de atualizar manualmente os seus conjuntos de nós.
Após a atualização do conjunto de nós, os nós da CPU podem parecer estar a usar uma imagem de GPU na saída da consolaGoogle Cloud ou da CLI. Por exemplo:
config:
imageType: COS_CONTAINERD
nodeImageConfig:
image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda
Este comportamento é o esperado. A imagem da GPU está a ser reutilizada em nós da CPU para instalar em segurança os módulos do kernel do Lustre gerido. Não lhe será cobrado o uso da GPU.
Desative o controlador CSI Lustre gerido
Pode desativar o controlador CSI Lustre gerido num cluster do GKE existente através da CLI Google Cloud.
gcloud container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--update-addons=LustreCsiDriver=DISABLED
Depois de o controlador CSI ser desativado, o GKE recria automaticamente os seus nós e desinstala os módulos do kernel Lustre geridos.
Crie um novo volume com o controlador CSI Lustre gerido
As secções seguintes descrevem o processo típico de criação de um volume do Kubernetes com base numa instância do Lustre gerida no GKE:
- Crie uma StorageClass.
- Use um PersistentVolumeClaim para aceder ao volume.
- Crie uma carga de trabalho que consuma o volume.
Crie uma StorageClass
Quando o controlador CSI Lustre gerido está ativado, o GKE cria automaticamente uma StorageClass para o aprovisionamento de instâncias do Lustre gerido. A StorageClass depende do nível de desempenho do Lustre gerido. GKE e é uma das seguintes opções:
lustre-rwx-125mbps-per-tib
lustre-rwx-250mbps-per-tib
lustre-rwx-500mbps-per-tib
lustre-rwx-1000mbps-per-tib
O GKE fornece uma StorageClass predefinida para cada nível de desempenho do Lustre gerido suportado. Isto simplifica o aprovisionamento dinâmico de instâncias do Lustre geridas, uma vez que pode usar as StorageClasses incorporadas sem ter de definir as suas próprias.
Para clusters zonais, o controlador CSI aprovisiona instâncias do Lustre gerido na mesma zona que o cluster. Para clusters regionais, aprovisiona a instância numa das zonas da região.
O exemplo seguinte mostra como criar uma StorageClass personalizada com requisitos de topologia específicos:
Guarde o seguinte manifesto num ficheiro com o nome
lustre-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: lustre-class provisioner: lustre.csi.storage.gke.io volumeBindingMode: Immediate reclaimPolicy: Delete parameters: perUnitStorageThroughput: "1000" network: LUSTRE_NETWORK allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - us-central1-a
Para ver a lista completa de campos suportados na StorageClass, consulte a documentação de referência do controlador CSI do Lustre gerido.
Execute este comando para criar a StorageClass:
kubectl apply -f lustre-class.yaml
Use uma PersistentVolumeClaim para aceder ao volume
Esta secção mostra como criar um recurso PersistentVolumeClaim que faz referência à StorageClass do controlador CSI Lustre gerido.
Guarde o seguinte manifesto num ficheiro com o nome
lustre-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: lustre-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 9000Gi storageClassName: lustre-class
Para ver a lista completa de campos suportados no PersistentVolumeClaim, consulte a documentação de referência do controlador CSI do Lustre gerido.
Execute este comando para criar o PersistentVolumeClaim:
kubectl apply -f lustre-pvc.yaml
Crie uma carga de trabalho para consumir o volume
Esta secção mostra um exemplo de como criar um Pod que consuma o recurso PersistentVolumeClaim que criou anteriormente.
Vários pods podem partilhar o mesmo recurso PersistentVolumeClaim.
Guarde o seguinte manifesto num ficheiro com o nome
my-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: lustre-volume mountPath: /data volumes: - name: lustre-volume persistentVolumeClaim: claimName: lustre-pvc
Aplique o manifesto ao cluster.
kubectl apply -f my-pod.yaml
Verifique se o Pod está em execução. O pod é executado depois de o PersistentVolumeClaim ser aprovisionado. Esta operação pode demorar alguns minutos a ser concluída.
kubectl get pods
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 11s
Use fsGroup com volumes Lustre geridos
Pode alterar a propriedade do grupo do diretório ao nível da raiz do sistema de ficheiros montado para corresponder a um fsGroup pedido pelo utilizador especificado no SecurityContext do pod. O fsGroup não altera recursivamente a propriedade de todo o sistema de ficheiros Lustre gerido montado. Apenas o diretório raiz do ponto de montagem é afetado.
Resolução de problemas
Para ver orientações de resolução de problemas, consulte a página de resolução de problemas na documentação do Lustre gerido.
Limpar
Para evitar incorrer em cobranças na sua conta do Google Cloud , elimine os recursos de armazenamento que criou neste guia.
Elimine o pod e o PersistentVolumeClaim.
kubectl delete pod my-pod kubectl delete pvc lustre-pvc
Verifique o estado do PersistentVolume.
kubectl get pv
O resultado é semelhante ao seguinte:
No resources found
A eliminação completa da instância do Lustre subjacente pode demorar alguns minutos.