L'esecuzione del cluster Ceph in container su SUSE CaaS Platform è un'anteprima. Non effettuare la distribuzione su un cluster Kubernetes di produzione.
Questo capitolo descrive come distribuire i cluster Kubernetes SUSE Enterprise Storage 6 sopra SUSE CaaS Platform 4 in container.
Prima di avviare la distribuzione, leggere le considerazioni seguenti:
Per eseguire Ceph in Kubernetes, SUSE Enterprise Storage 6 utilizza un progetto upstream denominato Rook (https://rook.io/).
A seconda della configurazione, Rook può consumare tutti i dischi inutilizzati su tutti i nodi in un cluster Kubernetes.
La configurazione richiede container con privilegi.
Prima di avviare la distribuzione, occorre disporre di:
Un cluster SUSE CaaS Platform 4 in esecuzione.
Nodi di lavoro SUSE CaaS Platform 4 con alcuni dischi aggiuntivi collegati come storage per il cluster Ceph.
L'unità di coordinamento di Rook utilizza i file di configurazione nel formato YAML, denominati manifesti. I manifesti necessari sono inclusi nel pacchetto RPM rook-k8s-yaml. Installarlo eseguendo
root #
zypper install rook-k8s-yaml
Rook-Ceph include due componenti principali: l'"operatore", eseguito da Kubernetes e che consente la creazione dei cluster Ceph, e lo stesso "cluster" Ceph, creato e parzialmente gestito dall'operatore.
I manifesti utilizzati in questa configurazione installano tutti i componenti di Rook e Ceph nello spazio dei nomi "rook-ceph". Se è necessario apportare modifiche, utilizzare di conseguenza tutti i riferimenti allo spazio dei nomi nei manifesti Kubernetes.
A seconda delle funzioni di Rook che si intende utilizzare, modificare la configurazione "Pod Security Policy" in common.yaml
per limitare i requisiti di sicurezza di Rook. Seguire i commenti nel file manifesto.
Il manifesto operator.yaml
consente di configurare l'operatore Rook. Questo valore non deve essere generalmente modificato. Seguire i commenti nel file manifesto per ulteriori informazioni.
Il manifesto cluster.yaml
è responsabile della configurazione del cluster Ceph effettivo che verrà eseguito in Kubernetes. Nella documentazione upstream di Rook all'indirizzo https://rook.io/docs/rook/v1.0/ceph-cluster-crd.html è possibile trovare la descrizione dettagliata di tutte le opzioni disponibili.
Per default, Rook è configurato sull'utilizzo di tutti i nodi non corrotti con node-role.kubernetes.io/master:NoSchedule
e seguirà le impostazioni di posizionamento configurate (consultare la pagina all'indirizzo https://rook.io/docs/rook/v1.0/ceph-cluster-crd.html#placement-configuration-settings). Nell'esempio seguente, tale comportamento viene disabilitato e vengono utilizzati soltanto i nodi elencati esplicitamente nella sezione corrispondente:
storage: useAllNodes: false nodes: - name: caasp4-worker-0 - name: caasp4-worker-1 - name: caasp4-worker-2
Per default, Rook utilizza come storage Ceph tutti i dischi vuoti e liberi presenti in ogni nodo.
La documentazione upstream di Rook-Ceph all'indirizzo https://rook.github.io/docs/rook/v1.3/ceph-storage.html contiene altri dettagli sulla configurazione di distribuzioni più avanzate. Utilizzarla come riferimento per conoscere le nozioni di base su Rook-Ceph prima di applicare configurazioni più avanzate.
All'indirizzo https://www.suse.com/documentation/suse-caasp sono disponibili ulteriori dettagli su SUSE CaaS Platform.
Installare i componenti comuni di Rook-Ceph, i ruoli CSI e l'operatore Rook-Ceph eseguendo il comando seguente sul nodo master di SUSE CaaS Platform:
root #
kubectl apply -f common.yaml -f operator.yaml
common.yaml
creerà lo spazio dei nomi "rook-ceph", le Custom Resource Definitions (CRD) di Ceph (consultare la pagina all'indirizzo https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) per segnalare a Kubernetes gli oggetti Ceph (ad esempio, "CephCluster") e i ruoli RBAC e le policy di sicurezza dei pod (consultare la pagina all'indirizzo https://kubernetes.io/docs/concepts/policy/pod-security-policy/) necessarie per consentire a Rook di gestire le risorse specifiche del cluster.
hostNetwork
e hostPorts
È obbligatorio consentire l'utilizzo di hostNetwork
se si utilizza hostNetwork: true
nella Cluster Resource Definition. È obbligatorio consentire anche l'utilizzo di hostPorts
in PodSecurityPolicy
.
Verificare l'installazione eseguendo kubectl get pods -n rook-ceph
sul nodo master di SUSE CaaS Platform, ad esempio:
root #
kubectl get pods -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-agent-57c9j 1/1 Running 0 22h
rook-ceph-agent-b9j4x 1/1 Running 0 22h
rook-ceph-operator-cf6fb96-lhbj7 1/1 Running 0 22h
rook-discover-mb8gv 1/1 Running 0 22h
rook-discover-tztz4 1/1 Running 0 22h
Dopo aver modificato cluster.yaml
in base alle esigenze, è possibile creare il cluster Ceph. Eseguire il comando seguente sul nodo master di SUSE CaaS Platform:
root #
kubectl apply -f cluster.yaml
Esaminare lo spazio dei nodi "rook-ceph" per osservare la creazione del cluster Ceph. Verranno visualizzati tanti Ceph Monitor quanti ne sono stati configurati nel manifesto cluster.yaml
(il valore di default è 3), un Ceph Manager e tanti Ceph OSD quanti sono i dischi liberi.
Durante il bootstrap del cluster Ceph, alcuni pod denominati rook-ceph-osd-prepare-NODE-NAME
saranno in esecuzione per alcuni istanti per poi terminare con lo stato "Completed". Come indicato dal nome, tali pod effettuano il provisioning dei Ceph OSD. Poiché non vengono eliminati, sarà possibile esaminarne i log in seguito all'interruzione. Ad esempio:
root #
kubectl get pods --namespace rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-agent-57c9j 1/1 Running 0 22h
rook-ceph-agent-b9j4x 1/1 Running 0 22h
rook-ceph-mgr-a-6d48564b84-k7dft 1/1 Running 0 22h
rook-ceph-mon-a-cc44b479-5qvdb 1/1 Running 0 22h
rook-ceph-mon-b-6c6565ff48-gm9wz 1/1 Running 0 22h
rook-ceph-operator-cf6fb96-lhbj7 1/1 Running 0 22h
rook-ceph-osd-0-57bf997cbd-4wspg 1/1 Running 0 22h
rook-ceph-osd-1-54cf468bf8-z8jhp 1/1 Running 0 22h
rook-ceph-osd-prepare-caasp4-worker-0-f2tmw 0/2 Completed 0 9m35s
rook-ceph-osd-prepare-caasp4-worker-1-qsfhz 0/2 Completed 0 9m33s
rook-ceph-tools-76c7d559b6-64rkw 1/1 Running 0 22h
rook-discover-mb8gv 1/1 Running 0 22h
rook-discover-tztz4 1/1 Running 0 22h
Rook consente di utilizzare tre tipi diversi di storage:
Lo storage oggetto espone un'API S3 sul cluster di memorizzazione per consentire alle applicazioni di inserire e ottenere dati. Per la descrizione dettagliata, consultare la pagina all'indirizzo https://rook.io/docs/rook/v1.0/ceph-object.html.
Un file system condiviso può essere montato con l'autorizzazione di lettura/scrittura da più pod. È utile per le applicazioni gestite in cluster tramite un file system condiviso. Per la descrizione dettagliata, consultare la pagina all'indirizzo https://rook.io/docs/rook/v1.0/ceph-filesystem.html.
Lo storage di blocco consente di montare lo storage su un singolo pod. Per la descrizione dettagliata, consultare la pagina all'indirizzo https://rook.io/docs/rook/v1.0/ceph-block.html.
Per disinstallare Rook, seguire la procedura indicata di seguito:
Eliminare le applicazioni Kubernetes che utilizzano lo storage di Rook.
Eliminare tutti gli elementi di oggetto, file e/o storage di blocco creati seguendo Sezione 13.5, «Utilizzo di Rook come storage per i workload di Kubernetes».
Eliminare il cluster, l'operatore e le risorse correlate a Ceph:
root #
kubectl delete -f cluster.yamlroot #
kubectl delete -f operator.yamlroot #
kubectl delete -f common.yaml
Eliminare i dati sugli host:
root #
rm -rf /var/lib/rook
Se necessario, cancellare i dischi utilizzati da Rook. Per ulteriori dettagli, consultare la pagina all'indirizzo https://rook.io/docs/rook/v1.3/ceph-teardown.html.