|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Uso de un controlador Ceph externo
Estas instrucciones son sobre el uso del controlador Ceph externo en un clúster RKE2. Si utiliza RKE, se requieren pasos adicionales. Para más detalles, consulte esta sección.
Requisitos
Asegúrese de que los paquetes ceph-common y xfsprogs estén instalados en los nodos trabajadores de SLE.
Uso del controlador Ceph con RKE
Los recursos a continuación son totalmente compatibles con clústeres basados en RKE, pero es necesario realizar una configuración adicional del kubelet para RKE.
En los clústeres RKE, el componente kubelet se ejecuta en un contenedor Docker y no tiene acceso a los módulos del kernel del host como rbd y libceph por defecto.
Para solucionar esta limitación, puede ejecutar modprobe rbd en los nodos trabajadores, o configurar los contenedores kubelet para montar automáticamente el directorio /lib/modules del host en el contenedor.
Para la configuración del kubelet, coloque las siguientes líneas en el archivo cluster.yml antes de la provisión del clúster RKE. También puede modificar el cluster.yml más tarde en la interfaz de usuario de Rancher haciendo clic en y reiniciando los nodos trabajadores.
services:
kubelet:
extra_binds:
- '/lib/modules:/lib/modules:ro'
Para más información sobre la directiva extra_binds, consulte esta sección.
Instalación del controlador ceph-csi en un clúster SUSE® Rancher Prime: RKE2
|
Estos pasos son necesarios solo para la provisión dinámica de RBD. |
Para más información sobre el gráfico ceph-csi-rbd, consulte esta página.
Para obtener detalles sobre su clúster SES, ejecute:
ceph mon dump
Lea su salida:
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
Más tarde necesitará los valores de fsid y direcciones mon.
Instalar el controlador ceph-csi usando Helm
Ejecute estos comandos:
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
Modifique el archivo ceph-csi-rbd-values.yaml y mantenga allí únicamente los cambios requeridos:
# 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
Asegúrate de que los monitores de ceph sean accesibles desde el clúster RKE2, por ejemplo, mediante 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
En caso de que desee modificar la configuración directamente a través de Helm, puede adaptar el archivo ceph-csi-rbd-values.yaml y llamar a:
helm upgrade \ --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml
Creando recursos RBD Ceph
# Cree un pool de ceph: ceph osd pool create myPool 64 64 # Cree un pool de dispositivos de bloques: rbd pool init myPool # Cree una imagen de dispositivo de bloques: rbd create -s 2G myPool/image # Cree un usuario de dispositivo de bloques y registre la clave: 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== # Codifique el usuario ceph myPoolUser en un hash base64: echo "myPoolUser" | tr -d '\n' | base64 bXlQb29sVXNlcg== # Cree un usuario administrador de dispositivo de bloques y registre la clave: ceph auth get-or-create-key client.myPoolAdmin mds 'allow *' mgr 'allow *' mon 'allow *' osd 'allow * pool=myPool' | tr -d '\n' | base64 QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ== # Codifique el usuario ceph myPoolAdmin en un hash base64: echo "myPoolAdmin" | tr -d '\n' | base64 bXlQb29sQWRtaW4=
Configura los secretos de acceso RBD Ceph
Cuenta de Usuario
Para la provisión estática de RBD (la imagen dentro del pool ceph debe existir), ejecuta estos comandos:
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
Cuenta de Administrador
Para la provisión dinámica de RBD (utilizada para la creación automática de imágenes dentro de un pool ceph dado), ejecuta estos comandos:
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
Crear Recursos de Prueba de RBD
Usando RBD en 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
Usando RBD en Volúmenes Persistentes
# 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
Usando RBD en Clases de Almacenamiento
Este ejemplo es para la provisión dinámica. Se necesita el controlador ceph-csi.
# 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 Provisión de Servidor/Maestro
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: K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTADO::server:ec0308000b8a6b595da000efREDACTADO
SUSE® Rancher Prime: RKE2 Provisión de Agente/Trabajador
mkdir -p /etc/rancher/rke2/ cat > /etc/rancher/rke2/config.yaml << EOF server: https://10.100.103.23:9345 token: K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTADO::server:ec0308000b8a6b595da000efREDACTADO EOF curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh - systemctl enable -- now rke2-agent.service
Para importar el clúster en Rancher, haga clic en ☰ > Gestión de Clústeres. Luego, en la página de Clústeres, haga clic en Importar Existente. A continuación, ejecute el comando kubectl proporcionado en el servidor/nodo maestro.
Versiones probadas
Sistema Operativo para ejecutar nodos RKE2: JeOS SLE15-SP2 con el kernel-default-5.3.18-24.49 instalado
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"}
Versión de Kubernetes en el clúster RKE2: v1.19.7+rke2r1
Solución de problemas
En caso de que utilice ceph-rook de SUSE basado en SES7, puede ser útil exponer los monitores en hostNetwork editando rook-1.4.5/ceph/cluster.yaml y configurando spec.network.hostNetwork=true.
También, para operar el clúster ceph-rook, es útil desplegar una caja de herramientas en el clúster de Kubernetes donde se provisiona ceph-rook mediante kubectl apply -f rook-1.4.5/ceph/toolbox.yaml. Luego, todos los comandos relacionados con ceph se pueden ejecutar en el pod de la caja de herramientas, por ejemplo, ejecutando kubectl exec -it -n rook-ceph rook-ceph-tools-686d8b8bfb-2nvqp — bash.
Operando con ceph - comandos básicos:
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
Elimine la imagen: rbd rm csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 -p myPool.
Comandos de CephFS en la caja de herramientas de 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
Para preparar un sistema de archivos cephfs, ejecute este comando en un clúster rook:
kubectl apply -f rook-1.4.5/ceph/filesystem.yaml