Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Utilisation d’un pilote Ceph externe

Ces instructions concernent l’utilisation du pilote Ceph externe dans un cluster RKE2. Si vous utilisez RKE, des étapes supplémentaires sont nécessaires. Pour plus de détails, reportez-vous à cette section.

Configuration requise

Assurez-vous que les paquets ceph-common et xfsprogs sont installés sur les nœuds de travail SLE.

Utilisation du pilote Ceph avec RKE

Les ressources ci-dessous sont entièrement compatibles avec les clusters basés sur RKE, mais il est nécessaire de faire une configuration kubelet supplémentaire pour RKE.

Sur les clusters RKE, le composant kubelet s’exécute dans un conteneur Docker et n’a pas accès aux modules de kernel de l’hôte, tels que rbd et libceph, par défaut.

Pour résoudre cette limitation, vous pouvez soit exécuter modprobe rbd sur les nœuds de travail, soit configurer les conteneurs kubelet pour monter automatiquement le répertoire /lib/modules de l’hôte dans le conteneur.

Pour la configuration kubelet, mettez les lignes suivantes dans le fichier cluster.yml avant le provisionnement du cluster RKE. Vous pouvez également modifier le cluster.yml plus tard dans l’interface utilisateur de Rancher en cliquant sur Modifier le cluster  Modifier en YAML et en redémarrant les nœuds de travail.

services:
  kubelet:
    extra_binds:
      - '/lib/modules:/lib/modules:ro'

Pour plus d’informations sur la directive extra_binds, reportez-vous à cette section.

Installation du pilote ceph-csi sur un cluster SUSE® Rancher Prime: RKE2

Ces étapes sont nécessaires uniquement pour le provisionnement dynamique RBD.

Pour plus d’informations sur le chart ceph-csi-rbd, reportez-vous à cette page.

Pour obtenir des détails sur votre cluster SES, exécutez :

ceph mon dump

Lisez sa sortie :

dumped monmap epoch 3
epoch 3
fsid 79179d9d-98d8-4976-ab2e-58635caa7235
last_changed 2021-02-11T10:56:42.110184+0000
created 2021-02-11T10:56:22.913321+0000
min_mon_release 15 (octopus)
0: [v2:10.85.8.118:3300/0,v1:10.85.8.118:6789/0] mon.a
1: [v2:10.85.8.123:3300/0,v1:10.85.8.123:6789/0] mon.b
2: [v2:10.85.8.124:3300/0,v1:10.85.8.124:6789/0] mon.c

Plus tard, vous aurez besoin des valeurs fsid et des adresses mon.

Installer le pilote ceph-csi à l’aide de Helm

Exécutez ces commandes :

helm repo add ceph-csi https://ceph.github.io/csi-charts
helm repo update
helm search repo ceph-csi -l
helm inspect values ceph-csi/ceph-csi-rbd > ceph-csi-rbd-values.yaml

Modifiez le fichier ceph-csi-rbd-values.yaml et conservez uniquement les modifications requises :

# ceph-csi-rbd-values.yaml
csiConfig:
  - clusterID: "79179d9d-98d8-4976-ab2e-58635caa7235"
    monitors:
      - "10.85.8.118:6789"
      - "10.85.8.123:6789"
      - "10.85.8.124:6789"
provisioner:
  name: provisioner
  replicaCount: 2

Assurez-vous que les moniteurs ceph sont accessibles depuis le cluster RKE2, par exemple, en utilisant ping.

kubectl create namespace ceph-csi-rbd
helm install --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml
kubectl rollout status deployment ceph-csi-rbd-provisioner -n ceph-csi-rbd
helm status ceph-csi-rbd -n ceph-csi-rbd

Si vous souhaitez modifier la configuration directement via Helm, vous pouvez adapter le fichier ceph-csi-rbd-values.yaml et appeler :

helm upgrade \
  --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml

Création de ressources RBD Ceph

# Créez un pool ceph :
ceph osd pool create myPool 64 64

# Créez un pool de périphériques de bloc :
rbd pool init myPool

# Créez une image de périphérique de bloc :
rbd create -s 2G myPool/image

# Créez un utilisateur de périphérique de bloc et enregistrez la clé :
ceph auth get-or-create-key client.myPoolUser mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=myPool" | tr -d '\n' | base64
QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ==

# Encodez l'utilisateur ceph myPoolUser en un hachage base64 :
echo "myPoolUser" | tr -d '\n' | base64
bXlQb29sVXNlcg==

# Créez un utilisateur administrateur de périphérique de bloc et enregistrez la clé :
ceph auth get-or-create-key client.myPoolAdmin mds 'allow *' mgr 'allow *' mon 'allow *' osd 'allow * pool=myPool' | tr -d '\n' | base64
QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ==

# Encodez l'utilisateur ceph myPoolAdmin en un hachage base64 :
echo "myPoolAdmin" | tr -d '\n' | base64
bXlQb29sQWRtaW4=

Configurez les secrets d’accès RBD Ceph

Compte utilisateur

Pour le provisionnement statique RBD (l’image dans le pool ceph doit exister), exécutez ces commandes :

cat > ceph-user-secret.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
  name: ceph-user
  namespace: default
type: kubernetes.io/rbd
data:
  userID: bXlQb29sVXNlcg==
  userKey: QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ==
EOF

kubectl apply -f ceph-user-secret.yaml

Compte administrateur

Pour le provisionnement dynamique de RBD (utilisé pour la création automatique d’images dans un pool ceph donné), exécutez ces commandes :

cat > ceph-admin-secret.yaml << EOF
apiVersion: v1
kind: Secret
metadata:
  name: ceph-admin
  namespace: default
type: kubernetes.io/rbd
data:
  userID: bXlQb29sQWRtaW4=
  userKey: QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ==
EOF

kubectl apply -f ceph-admin-secret.yaml

Créez des ressources de test RBD

Utiliser RBD dans des Pods

# pod
cat > ceph-rbd-pod-inline.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-pod-inline
spec:
  containers:
  - name: ceph-rbd-pod-inline
    image: busybox
    command: ["sleep", "infinity"]
    volumeMounts:
    - mountPath: /mnt/ceph_rbd
      name: volume
  volumes:
  - name: volume
    rbd:
      monitors:
      - 10.85.8.118:6789
      - 10.85.8.123:6789
      - 10.85.8.124:6789
      pool: myPool
      image: image
      user: myPoolUser
      secretRef:
        name: ceph-user
      fsType: ext4
      readOnly: false
EOF

kubectl apply -f ceph-rbd-pod-inline.yaml
kubectl get pod
kubectl exec pod/ceph-rbd-pod-inline -- df -k | grep rbd

Utiliser RBD dans des volumes persistants

# pod-pvc-pv
cat > ceph-rbd-pod-pvc-pv-allinone.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: ceph-rbd-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  rbd:
    monitors:
    - 10.85.8.118:6789
    - 10.85.8.123:6789
    - 10.85.8.124:6789
    pool: myPool
    image: image
    user: myPoolUser
    secretRef:
      name: ceph-user
    fsType: ext4
    readOnly: false
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-rbd-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-pod-pvc-pv
spec:
  containers:
  - name: ceph-rbd-pod-pvc-pv
    image: busybox
    command: ["sleep", "infinity"]
    volumeMounts:
    - mountPath: /mnt/ceph_rbd
      name: volume
  volumes:
  - name: volume
    persistentVolumeClaim:
      claimName: ceph-rbd-pvc
EOF

kubectl apply -f ceph-rbd-pod-pvc-pv-allinone.yaml
kubectl get pv,pvc,pod
kubectl exec pod/ceph-rbd-pod-pvc-pv -- df -k | grep rbd

Utiliser RBD dans des classes de stockage

Cet exemple est pour le provisionnement dynamique. Le pilote ceph-csi est nécessaire.

# pod-pvc-sc
cat > ceph-rbd-pod-pvc-sc-allinone.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd-sc
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: 79179d9d-98d8-4976-ab2e-58635caa7235
   pool: myPool
   imageFeatures: layering
   csi.storage.k8s.io/provisioner-secret-name: ceph-admin
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/controller-expand-secret-name: ceph-admin
   csi.storage.k8s.io/controller-expand-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: ceph-admin
   csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-rbd-sc-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: ceph-rbd-sc
---
apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-pod-pvc-sc
spec:
  containers:
  - name:  ceph-rbd-pod-pvc-sc
    image: busybox
    command: ["sleep", "infinity"]
    volumeMounts:
    - mountPath: /mnt/ceph_rbd
      name: volume
  volumes:
  - name: volume
    persistentVolumeClaim:
      claimName: ceph-rbd-sc-pvc
EOF

kubectl apply -f ceph-rbd-pod-pvc-sc-allinone.yaml
kubectl get pv,pvc,sc,pod
kubectl exec pod/ceph-rbd-pod-pvc-sc -- df -k | grep rbd

SUSE® Rancher Prime: RKE2 Provisionnement du serveur/maître

sudo su
curl -sfL https://get.rke2.io | sh -
systemctl enable --now rke2-server

cat > /root/.bashrc << EOF
export PATH=$PATH:/var/lib/rancher/rke2/bin/
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
EOF

cat /var/lib/rancher/rke2/server/node-token
token : K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED

SUSE® Rancher Prime: RKE2 Provisionnement de l’agent/travailleur

mkdir -p /etc/rancher/rke2/

cat > /etc/rancher/rke2/config.yaml << EOF
server : https://10.100.103.23:9345
token : K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED
EOF

curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
systemctl enable --now rke2-agent.service

Pour importer le cluster dans Rancher, cliquez sur ☰ > Gestion des clusters. Ensuite, sur la page Clusters, cliquez sur Importer un cluster existant. Ensuite, exécutez la commande kubectl fournie sur le serveur/nœud maître.

Versions testées

Système d’exploitation pour exécuter les nœuds RKE2 : JeOS SLE15-SP2 avec le noyau installé kernel-default-5.3.18-24.49

kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4", GitCommit:"c96aede7b5205121079932896c4ad89bb93260af", GitTreeState:"clean", BuildDate:"2020-06-22T12:00:00Z", GoVersion:"go1.13.11", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7+rke2r1", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-20T01:50:52Z", GoVersion:"go1.15.5b5", Compiler:"gc", Platform:"linux/amd64"}

helm version
version.BuildInfo{Version:"3.4.1", GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", GitTreeState:"clean", GoVersion:"go1.14.12"}

Version de Kubernetes sur le cluster RKE2 : v1.19.7+rke2r1

Dépannage

Si vous utilisez le ceph-rook de SUSE basé sur SES7, il peut être utile d’exposer les moniteurs sur hostNetwork en modifiant rook-1.4.5/ceph/cluster.yaml et en définissant spec.network.hostNetwork=true.

De plus, pour faire fonctionner le cluster ceph-rook, il est utile de déployer une boîte à outils sur le cluster Kubernetes où ceph-rook est provisionné par kubectl apply -f rook-1.4.5/ceph/toolbox.yaml. Ensuite, toutes les commandes liées à ceph peuvent être exécutées dans le pod de la boîte à outils, par exemple, en exécutant kubectl exec -it -n rook-ceph rook-ceph-tools-686d8b8bfb-2nvqp — bash.

Fonctionnement avec ceph - commandes de base :

ceph osd pool stats
ceph osd pool delete myPool myPool --yes-i-really-really-mean-it
rbd list -p myPool
> csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38
> image

Supprimer l’image : rbd rm csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 -p myPool

Commandes CephFS dans la boîte à outils rook :

ceph -s
ceph fs ls
ceph fs fail cephfs
ceph fs rm cephfs --yes-i-really-mean-it
ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it

Pour préparer un système de fichiers cephfs, vous pouvez exécuter cette commande sur un cluster rook :

kubectl apply -f rook-1.4.5/ceph/filesystem.yaml