Provisione e gerencie volumes locais como PVs e PVCs em nós de cluster ACK Edge Pro com o LVM. Os pods são agendados nos nós com base na capacidade de armazenamento LVM disponível.
Pré-requisitos
Discos locais disponíveis nos nós do cluster.
A porta TCP 1736 no nó de armazenamento deve estar acessível a partir do nó da nuvem.
Etapa 1: Instale os add-ons node-resource-manager, csi-plugin e csi-provisioner
Esses add-ons fornecem suporte à Container Storage Interface (CSI) para volumes LVM locais. Instale todos os três antes de usar o LVM para gerenciar o armazenamento local.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em nome do cluster desejado e escolha no painel de navegação à esquerda.
Na página Add-ons, clique em aba Storage. Localize o node-resource-manager, o csi-plugin e o csi-provisioner, e clique em Install.
Na caixa de diálogo, clique em OK.
Etapa 2: Configure o VolumeGroup
Um VolumeGroup especifica quais discos locais o LVM gerencia em um nó. Crie um ConfigMap para mapear rótulos de nós às topologias de disco. O termo VolumeGroup no texto descritivo corresponde ao campo volumegroup no YAML do ConfigMap.
Para garantir a segurança dos dados, os add-ons não excluem VolumeGroups ou volumes físicos (volumes físicos do LVM, distintos dos PersistentVolumes do Kubernetes). Exclua um VolumeGroup existente antes de redefini-lo.
-
Configure a topologia do VolumeGroup com o seguinte ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: node-resource-topo namespace: kube-system data: volumegroup: |- volumegroup: - name: volumegroup1 key: kubernetes.io/storagetype operator: In value: lvm topology: type: device devices: - /dev/sdb1 - /dev/sdb2 - /dev/sdcA tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
name
Nome do VolumeGroup.
key
Chave do rótulo para correspondência nos nós.
operator
Operador do seletor de rótulos. Valores válidos: In, NotIn, Exists, DoesNotExist. Consulte a tabela de valores de operador abaixo.
value
Valor do rótulo a ser correspondido para a chave especificada.
topology
Topologia do dispositivo no nó. O campo
topology.deviceslista os caminhos dos discos locais a serem adicionados ao VolumeGroup.Valores do operador
Valor
Comportamento
In
Corresponde quando o valor do rótulo do nó é igual ao
valueespecificado.NotIn
Corresponde quando o valor do rótulo do nó difere do
valueespecificado.Exists
Corresponde quando o nó possui um rótulo com a chave especificada.
DoesNotExist
Corresponde quando o nó não possui um rótulo com a chave especificada.
-
Adicione rótulos aos nós.
Adicione os seguintes rótulos aos nós de armazenamento:
Rótulo de topologia personalizado: Rotule os nós de armazenamento para corresponder ao seletor do ConfigMap. Exemplo:
kubernetes.io/storagetype=lvm.Rótulo de habilitação de armazenamento local: Adicione
alibabacloud.com/edge-enable-localstorage='true'para permitir o agendamento de pods de armazenamento local no nó.
Após adicionar ambos os rótulos, o node-resource-manager cria automaticamente um volume físico e o adiciona ao VolumeGroup.
Etapa 3: Crie um PVC e implante uma carga de trabalho
Defina um PVC com a StorageClass no YAML a seguir e execute kubectl apply -f ****.yaml para criá-lo. Cada PVC mapeia para um volume lógico no nó, montado quando o pod inicia.
Neste exemplo, o storageClassName padrão é csi-local-lvm.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lvm-pvc-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Mi
storageClassName: csi-local-lvm
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: local-test
name: local-test
namespace: default
spec:
replicas: 1
selector:
matchLabels:
k8s-app: local-test
template:
metadata:
labels:
k8s-app: local-test
spec:
hostNetwork: true
containers:
- image: nginx:1.15.7-alpine
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
volumeMounts:
- name: local-pvc
mountPath: /data
dnsPolicy: ClusterFirst
restartPolicy: Always
tolerations:
- operator: Exists
nodeSelector:
alibabacloud.com/is-edge-worker: "true"
volumes:
- name: local-pvc
persistentVolumeClaim:
claimName: lvm-pvc-test
Verifique o resultado
Verifique se o volume lógico está montado:
kubectl exec -it local-test-564dfcf6dc-qhfsf sh
/ # ls /data
Saída esperada:
lost+found
Isso confirma que o volume lógico está montado no pod.