16 SUSE Storage #
O SUSE Storage é um sistema de armazenamento em blocos distribuído, leve, confiável e amigável projetado para Kubernetes. Trata-se de um produto com base no Longhorn, um projeto de código-fonte aberto inicialmente desenvolvido pela Rancher Labs e que agora é incubado pela CNCF.
16.1 Pré-requisitos #
Se você está seguindo este guia, já deve ter os seguintes itens disponíveis:
No mínimo, um host com o SUSE Linux Micro 6.2 instalado, que pode ser físico ou virtual
Um cluster Kubernetes instalado, K3s ou RKE2
Helm
16.2 Instalação manual do SUSE Storage #
16.2.1 Instalando o Open-iSCSI #
Um requisito essencial da implantação e do uso do SUSE Storage é a
instalação do pacote open-iscsi e a execução do daemon
iscsid em todos os nós Kubernetes. Isso é necessário
porque o Longhorn conta com o iscsiadm no host para
fornecer volumes persistentes ao Kubernetes.
Vamos instalá-lo:
transactional-update pkg install open-iscsiComo o SUSE Linux Micro é um sistema operacional imutável, é importante
notar que o pacote será instalado apenas em um novo instantâneo após a
conclusão da operação. Para carregá-lo e para que o daemon
iscsid seja executado, é necessário reinicializar no novo
instantâneo que acabamos de criar. Execute o comando de reinicialização
quando você estiver pronto:
reboot16.2.2 Instalando o SUSE Storage #
Há várias maneiras de instalar o SUSE Storage em clusters Kubernetes. Este guia orienta na instalação pelo Helm, mas você poderá seguir a documentação oficial se preferir outra abordagem.
Faça login na Rancher Application Collection:
helm registry login dp.apps.rancher.io --username $APPS.RANCHER.IO_USERNAME --password $APPS.RANCHER.IO_ACCESS_TOKENInstale o SUSE Storage no namespace
longhorn-systeme adicione as credenciais do seu registro de contêiner:helm install longhorn oci://dp.apps.rancher.io/charts/suse-storage \ --version 1.10.1 \ --namespace longhorn-system \ --create-namespace \ --set privateRegistry.createSecret=true \ --set privateRegistry.registryUrl=dp.apps.rancher.io \ --set privateRegistry.registryUser=$APPS.RANCHER.IO_USERNAME \ --set privateRegistry.registryPasswd=$APPS.RANCHER.IO_ACCESS_TOKEN \ --set privateRegistry.registrySecret=application-collectionConfirme se a implantação foi bem-sucedida:
kubectl -n longhorn-system get podslocalhost:~ # kubectl -n longhorn-system get pods NAME READY STATUS RESTARTS AGE csi-attacher-7656559cf4-pkhh6 1/1 Running 0 103s csi-attacher-7656559cf4-pnzw5 1/1 Running 0 103s csi-attacher-7656559cf4-z94mm 1/1 Running 0 103s csi-provisioner-6d9cf6456d-kcwtq 1/1 Running 0 103s csi-provisioner-6d9cf6456d-mvvml 1/1 Running 0 103s csi-provisioner-6d9cf6456d-q4f88 1/1 Running 0 103s csi-resizer-f587cd467-clr2n 1/1 Running 0 103s csi-resizer-f587cd467-z28v4 1/1 Running 0 103s csi-resizer-f587cd467-zxmtx 1/1 Running 0 103s csi-snapshotter-6dcdf78684-757mg 1/1 Running 0 103s csi-snapshotter-6dcdf78684-8ktgc 1/1 Running 0 103s csi-snapshotter-6dcdf78684-ffsqr 1/1 Running 0 103s engine-image-ei-099f845a-lvdtr 1/1 Running 0 2m21s instance-manager-4adffddaffe02374cd5635b8a6113de7 1/1 Running 0 111s longhorn-csi-plugin-w7pwr 3/3 Running 0 103s longhorn-driver-deployer-6886fb84bc-wm9h6 1/1 Running 2 (2m32s ago) 2m45s longhorn-manager-zblbl 2/2 Running 0 2m45s longhorn-ui-6bcc65d4bd-mcn6r 1/1 Running 0 2m45s longhorn-ui-6bcc65d4bd-rwf97 1/1 Running 0 2m45s
16.3 Criando volumes do SUSE Storage #
O SUSE Storage usa os recursos do Kubernetes chamados
StorageClass para provisionar automaticamente os objetos
PersistentVolume aos pods. Pense no
StorageClass como um método para os administradores
descreverem classes ou perfis do
armazenamento que eles oferecem.
Vamos criar um StorageClass com algumas opções padrão:
kubectl apply -f - <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn-example
provisioner: driver.longhorn.io
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
fsType: "ext4"
EOFAgora que temos um StorageClass, precisamos que um
PersistentVolumeClaim faça referência a ele. Um
PersistentVolumeClaim (PVC) é uma solicitação de
armazenamento feita pelo usuário. Os PVCs consomem os recursos
PersistentVolume. As declarações podem solicitar tamanhos
e modos de acesso específicos (por exemplo, é possível montá-las como
leitura/gravação uma vez ou como somente leitura várias vezes).
Vamos criar um PersistentVolumeClaim:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: longhorn-volv-pvc
namespace: longhorn-system
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn-example
resources:
requests:
storage: 2Gi
EOFPronto! Com a criação do PersistentVolumeClaim, podemos
prosseguir e anexá-lo a um Pod. Quando o
Pod é implantado, o Kubernetes cria o volume do Longhorn
e o vincula ao Pod quando há armazenamento disponível.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: volume-test
namespace: longhorn-system
spec:
containers:
- name: volume-test
image: nginx:stable-alpine
imagePullPolicy: IfNotPresent
volumeMounts:
- name: volv
mountPath: /data
ports:
- containerPort: 80
volumes:
- name: volv
persistentVolumeClaim:
claimName: longhorn-volv-pvc
EOFO conceito de armazenamento no Kubernetes é um tópico complexo, porém importante. Mencionamos brevemente alguns dos recursos mais comuns do Kubernetes, no entanto, sugerimos a familiarização com a documentação de terminologia que o Longhorn oferece.
Neste exemplo, o resultado deve ter esta aparência:
localhost:~ # kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
longhorn (default) driver.longhorn.io Delete Immediate true 12m
longhorn-example driver.longhorn.io Delete Immediate true 24s
localhost:~ # kubectl get pvc -n longhorn-system
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
longhorn-volv-pvc Bound pvc-f663a92e-ac32-49ae-b8e5-8a6cc29a7d1e 2Gi RWO longhorn-example 54s
localhost:~ # kubectl get pods -n longhorn-system
NAME READY STATUS RESTARTS AGE
csi-attacher-5c4bfdcf59-qmjtz 1/1 Running 0 14m
csi-attacher-5c4bfdcf59-s7n65 1/1 Running 0 14m
csi-attacher-5c4bfdcf59-w9xgs 1/1 Running 0 14m
csi-provisioner-667796df57-fmz2d 1/1 Running 0 14m
csi-provisioner-667796df57-p7rjr 1/1 Running 0 14m
csi-provisioner-667796df57-w9fdq 1/1 Running 0 14m
csi-resizer-694f8f5f64-2rb8v 1/1 Running 0 14m
csi-resizer-694f8f5f64-z9v9x 1/1 Running 0 14m
csi-resizer-694f8f5f64-zlncz 1/1 Running 0 14m
csi-snapshotter-959b69d4b-5dpvj 1/1 Running 0 14m
csi-snapshotter-959b69d4b-lwwkv 1/1 Running 0 14m
csi-snapshotter-959b69d4b-tzhwc 1/1 Running 0 14m
engine-image-ei-5cefaf2b-hvdv5 1/1 Running 0 14m
instance-manager-0ee452a2e9583753e35ad00602250c5b 1/1 Running 0 14m
longhorn-csi-plugin-gd2jx 3/3 Running 0 14m
longhorn-driver-deployer-9f4fc86-j6h2b 1/1 Running 0 15m
longhorn-manager-z4lnl 1/1 Running 0 15m
longhorn-ui-5f4b7bbf69-bln7h 1/1 Running 3 (14m ago) 15m
longhorn-ui-5f4b7bbf69-lh97n 1/1 Running 3 (14m ago) 15m
volume-test 1/1 Running 0 26s16.4 Acessando a IU #
Se você instalou o SUSE Storage com kubectl ou Helm, precisa configurar um controlador de entrada para permitir tráfego externo no cluster. A autenticação não está habilitada por padrão. Se o aplicativo de catálogo do Rancher foi usado, o Rancher cria automaticamente um controlador de entrada com controle de acesso (o rancher-proxy).
Obtenha o endereço IP do serviço externo do Longhorn:
kubectl -n longhorn-system get svcDepois que você recuperar o endereço IP do
longhorn-frontend, poderá começar a usar a IU navegando até ela pelo navegador.
16.5 Instalando com o Edge Image Builder #
O SUSE Edge usa Capítulo 11, Edge Image Builder para personalizar as imagens base de SO do SUSE Linux Micro. Vamos demonstrar como fazer isso para provisionar um cluster RKE2 com o SUSE Storage sobreposto.
Vamos criar o arquivo de definição:
export CONFIG_DIR=$HOME/eib
mkdir -p $CONFIG_DIR
cat << EOF > $CONFIG_DIR/iso-definition.yaml
apiVersion: 1.3
image:
imageType: iso
baseImage: SL-Micro.x86_64-6.2-Base-SelfInstall-GM.install.iso
arch: x86_64
outputImageName: eib-image.iso
kubernetes:
version: v1.34.2+rke2r1
helm:
charts:
- name: suse-storage
releaseName: longhorn
version: 1.10.1
repositoryName: rancher-application-collection
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
repositories:
- name: rancher-application-collection
url: oci://dp.apps.rancher.io/charts
authentication:
username: $APPS.RANCHER.IO_USERNAME
password: $APPS.RANCHER.IO_ACCESS_TOKEN
embeddedArtifactRegistry:
registries:
- uri: dp.apps.rancher.io
authentication:
username: $APPS.RANCHER.IO_USERNAME
password: $APPS.RANCHER.IO_ACCESS_TOKEN
images:
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-attacher:4.10.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-provisioner:5.3.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-resizer:1.14.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-external-snapshotter:8.4.0-8.9
- name: dp.apps.rancher.io/containers/kubernetes-csi-livenessprobe:2.17.0-8.8
- name: dp.apps.rancher.io/containers/kubernetes-csi-node-driver-registrar:2.15.0-8.8
- name: dp.apps.rancher.io/containers/longhorn-backing-image-manager:1.10.1-1.11
- name: dp.apps.rancher.io/containers/longhorn-engine:1.10.1-1.16
- name: dp.apps.rancher.io/containers/longhorn-instance-manager:1.10.1-1.17
- name: dp.apps.rancher.io/containers/longhorn-manager:1.10.1-1.9
- name: dp.apps.rancher.io/containers/longhorn-share-manager:1.10.1-1.8
- name: dp.apps.rancher.io/containers/longhorn-ui:1.10.1-1.8
- name: dp.apps.rancher.io/containers/rancher-support-bundle-kit:0.0.71-4.13
operatingSystem:
packages:
sccRegistrationCode: <reg-code>
packageList:
- open-iscsi
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOFA personalização dos valores de gráficos Helm é possível por um arquivo
separado disponível em helm.charts[].valuesFile. Consulte
a documentação
upstream para obter detalhes.
Vamos criar a imagem:
podman run --rm --privileged -it -v $CONFIG_DIR:/eib registry.suse.com/edge/3.5/edge-image-builder:1.3.2 build --definition-file $CONFIG_DIR/iso-definition.yamlApós a criação da imagem, você poderá usá-la para instalar o sistema
operacional em um host físico ou virtual. Depois que o provisionamento é
concluído, é possível fazer login no sistema usando o par de credenciais
root:eib.
Verifique se o SUSE Storage foi instalado com êxito:
localhost:~ # /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml -n longhorn-system get pods
NAME READY STATUS RESTARTS AGE
csi-attacher-5c4bfdcf59-qmjtz 1/1 Running 0 103s
csi-attacher-5c4bfdcf59-s7n65 1/1 Running 0 103s
csi-attacher-5c4bfdcf59-w9xgs 1/1 Running 0 103s
csi-provisioner-667796df57-fmz2d 1/1 Running 0 103s
csi-provisioner-667796df57-p7rjr 1/1 Running 0 103s
csi-provisioner-667796df57-w9fdq 1/1 Running 0 103s
csi-resizer-694f8f5f64-2rb8v 1/1 Running 0 103s
csi-resizer-694f8f5f64-z9v9x 1/1 Running 0 103s
csi-resizer-694f8f5f64-zlncz 1/1 Running 0 103s
csi-snapshotter-959b69d4b-5dpvj 1/1 Running 0 103s
csi-snapshotter-959b69d4b-lwwkv 1/1 Running 0 103s
csi-snapshotter-959b69d4b-tzhwc 1/1 Running 0 103s
engine-image-ei-5cefaf2b-hvdv5 1/1 Running 0 109s
instance-manager-0ee452a2e9583753e35ad00602250c5b 1/1 Running 0 109s
longhorn-csi-plugin-gd2jx 3/3 Running 0 103s
longhorn-driver-deployer-9f4fc86-j6h2b 1/1 Running 0 2m28s
longhorn-manager-z4lnl 1/1 Running 0 2m28s
longhorn-ui-5f4b7bbf69-bln7h 1/1 Running 3 (2m7s ago) 2m28s
longhorn-ui-5f4b7bbf69-lh97n 1/1 Running 3 (2m10s ago) 2m28sEssa instalação não funciona em ambientes totalmente air-gapped. Para esses casos, consulte a Seção 27.8, “Instalação do SUSE Storage”.