17 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.
17.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.1 instalado, que pode ser físico ou virtual
Um cluster Kubernetes instalado, K3s ou RKE2
Helm
17.2 Instalação manual do SUSE Storage #
17.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-iscsi
Como 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:
reboot
17.2.2 Instalando o SUSE Storage #
Há várias maneiras de instalar o SUSE Storage em clusters Kubernetes. Este guia adota a instalação pelo Helm, mas você poderá seguir a documentação oficial caso queira outra abordagem.
Adicione o repositório de gráficos Helm do Rancher:
helm repo add rancher-charts https://charts.rancher.io/
Busque os gráficos mais recentes no repositório:
helm repo update
Instale o SUSE Storage no namespace
longhorn-system
:helm install longhorn-crd rancher-charts/longhorn-crd --namespace longhorn-system --create-namespace --version 106.2.0+up1.8.1 helm install longhorn rancher-charts/longhorn --namespace longhorn-system --version 106.2.0+up1.8.1
Confirme se a implantação foi bem-sucedida:
kubectl -n longhorn-system get pods
localhost:~ # kubectl -n longhorn-system get pod NAMESPACE NAME READY STATUS RESTARTS AGE longhorn-system longhorn-ui-5fc9fb76db-z5dc9 1/1 Running 0 90s longhorn-system longhorn-ui-5fc9fb76db-dcb65 1/1 Running 0 90s longhorn-system longhorn-manager-wts2v 1/1 Running 1 (77s ago) 90s longhorn-system longhorn-driver-deployer-5d4f79ddd-fxgcs 1/1 Running 0 90s longhorn-system instance-manager-a9bf65a7808a1acd6616bcd4c03d925b 1/1 Running 0 70s longhorn-system engine-image-ei-acb7590c-htqmp 1/1 Running 0 70s longhorn-system csi-attacher-5c4bfdcf59-j8xww 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-l69vh 1/1 Running 0 50s longhorn-system csi-attacher-5c4bfdcf59-xgd5z 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-dqkfr 1/1 Running 0 50s longhorn-system csi-attacher-5c4bfdcf59-wckt8 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-7n2kq 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-rp4gk 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-r6ljc 1/1 Running 0 50s longhorn-system csi-resizer-694f8f5f64-k7429 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-5k8pg 1/1 Running 0 50s longhorn-system csi-provisioner-667796df57-n5w9s 1/1 Running 0 50s longhorn-system csi-snapshotter-959b69d4b-x7b7t 1/1 Running 0 50s longhorn-system longhorn-csi-plugin-bsc8c 3/3 Running 0 50s
17.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"
EOF
Agora 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
EOF
Pronto! 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
EOF
O conceito de armazenamento no Kubernetes é um tópico complexo, porém importante. Mencionamos rapidamente alguns do recursos mais comuns do Kubernetes, mas sugerimos que você se familiarize 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 26s
17.4 Acessando a IU #
Se você instalou o Longhorn com o kubectl ou o Helm, precisa configurar um controle de entrada para permitir o tráfego externo no cluster. A autenticação não está habilitada por padrão. Se o app de catálogo do Rancher foi usado, o Rancher criou automaticamente um controlador de entrada com controle de acesso (rancher-proxy).
Obtenha o endereço IP do serviço externo do Longhorn:
kubectl -n longhorn-system get svc
Depois que você recuperar o endereço IP do
longhorn-frontend
, poderá começar a usar a IU navegando até ela pelo navegador.
17.5 Instalando com o Edge Image Builder #
O SUSE Edge usa o Capítulo 11, Edge Image Builder para personalizar as imagens base do sistema operacional SUSE Linux Micro. Vamos demonstrar como fazer isso para provisionar um cluster RKE2 junto com o Longhorn.
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.2
image:
imageType: iso
baseImage: SL-Micro.x86_64-6.1-Base-SelfInstall-GM.install.iso
arch: x86_64
outputImageName: eib-image.iso
kubernetes:
version: v1.32.4+rke2r1
helm:
charts:
- name: longhorn
version: 106.2.0+up1.8.1
repositoryName: longhorn
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
- name: longhorn-crd
version: 106.2.0+up1.8.1
repositoryName: longhorn
targetNamespace: longhorn-system
createNamespace: true
installationNamespace: kube-system
repositories:
- name: longhorn
url: https://charts.rancher.io
operatingSystem:
packages:
sccRegistrationCode: <reg-code>
packageList:
- open-iscsi
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOF
A personalização de qualquer um dos valores do gráfico Helm é possível com
um arquivo separado fornecido 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.3/edge-image-builder:1.2.1 build --definition-file $CONFIG_DIR/iso-definition.yaml
Apó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 Longhorn foi implantado com sucesso:
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) 2m28s
Essa instalação não funciona em ambientes totalmente air-gapped. Para esses casos, consulte a Seção 27.8, “Instalação do SUSE Storage”.