|
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 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