Analyse approfondie native du cloud du déploiement de Ceph et des tests fonctionnels dans K8S

Introduction

2. Introduction à Ceph Rook

  • Rook est un outil d'orchestration de stockage cloud natif open source qui fournit une plate-forme, un cadre et un support pour diverses solutions de stockage pour une intégration native avec des environnements cloud natifs. Rook transforme le logiciel de stockage en un service de stockage auto-géré, auto-évolutif et auto-réparateur en automatisant le déploiement, le démarrage, la configuration, le provisionnement, la mise à l'échelle, les mises à niveau, les migrations, la reprise après sinistre, la surveillance et la gestion des ressources. La couche sous-jacente de Rook utilise les fonctionnalités fournies par les plates-formes de gestion, de planification et d'orchestration de conteneurs natives du cloud pour fournir ces fonctionnalités.
  • Rook utilise des fonctions étendues pour l'intégrer profondément dans l'environnement cloud natif et offre une expérience transparente pour la planification, la gestion du cycle de vie, la gestion des ressources, la sécurité, la surveillance, etc. Rook prend actuellement en charge Ceph, NFS, Minio Object Store et CockroachDB .

insérez la description de l'image ici

3. Déployez Ceph en k8 via Rook

① Téléchargez le package de déploiement

  • La commande est la suivante :
git clone --single-branch --branch v1.10.8 https://github.com/rook/rook.git
  • Les images utilisées pour le déploiement sont les suivantes :

insérez la description de l'image ici

  • Étant donné que la source de l'image est à l'étranger, elle ne peut pas être téléchargée en Chine. Ici, vous devez modifier certaines images ou télécharger des balises à l'avance. L'opération est la suivante :
cd rook/deploy/examples/

#(registry.aliyuncs.com/google_containers/<image>:<tag>),后四个镜像我FQ下
docker pull registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.5.1

docker tag registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.5.1 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.5.1

docker pull registry.aliyuncs.com/google_containers/csi-snapshotter:v6.1.0
docker tag registry.aliyuncs.com/google_containers/csi-snapshotter:v6.1.0 registry.k8s.io/sig-storage/csi-snapshotter:v6.1.0

docker pull registry.aliyuncs.com/google_containers/csi-attacher:v4.0.0
docker tag registry.aliyuncs.com/google_containers/csi-attacher:v4.0.0 registry.k8s.io/sig-storage/csi-attacher:v4.0.0

docker pull registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0
docker tag registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0 registry.k8s.io/sig-storage/csi-resizer:v1.6.0

docker pull registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0
docker tag registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0 registry.k8s.io/sig-storage/csi-resizer:v1.6.0

docker pull registry.aliyuncs.com/google_containers/csi-provisioner:v3.3.0
docker tag registry.aliyuncs.com/google_containers/csi-provisioner:v3.3.0 registry.k8s.io/sig-storage/csi-provisioner:v3.3.0

② Déployer l'opérateur Rook

cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# 检查
kubectl -n rook-ceph get pod
  • Il peut également être déployé via la barre :
helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f values.yaml

③ Créer un cluster Rook Ceph

  • Maintenant que l'opérateur Rook est en cours d'exécution, vous pouvez ensuite créer un cluster Ceph. Afin de ne pas affecter le cluster après le redémarrage, assurez-vous que la valeur de l'attribut set dataDirHostPath est un chemin d'hôte valide :
cd rook/deploy/examples
kubectl apply -f cluster.yaml

④ Déployer l'outil Rook Ceph

cd rook/deploy/examples
kubectl create -f toolbox.yaml

⑤ Déployer le tableau de bord Ceph

cd rook/deploy/examples
kubectl apply -f dashboard-external-https.yaml

# 获取 dashboard admin密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 -d
  • Afficher l'état du cluster Ceph via Ceph Dashboard :
# 查看对外端口
kubectl get svc -n rook-ceph

insérez la description de l'image ici

⑥ vérifier

kubectl get pods,svc -n rook-ceph

insérez la description de l'image ici

⑦ Afficher l'état du cluster ceph via le module d'outils ceph-tool

kubectl exec -it `kubectl get pods -n rook-ceph|grep rook-ceph-tools|awk '{
    
    print $1}'` -n rook-ceph -- bash

ceph -s

insérez la description de l'image ici

4. Vérification des tests

① Test de stockage de blocs (RBD)

  • Créez une classe de stockage :
cd rook/deploy/examples
# 创建一个名为replicapool的rbd pool
kubectl apply -f csi/rbd/storageclass.yaml

insérez la description de l'image ici

  • Déployez WordPress :
kubectl apply -f mysql.yaml
kubectl apply -f wordpress.yaml

② Test du système de fichiers (CephFS)

  • Créez une classe de stockage :
kubectl apply -f csi/cephfs/storageclass.yaml
  • Déployez l'application :
kubectl apply -f filesystem.yaml

③ Test de stockage d'objets (RGW)

  • Créez un magasin d'objets :
kubectl create -f object.yaml

# 验证rgw pod正常运行
kubectl -n rook-ceph get pod -l app=rook-ceph-rgw
  • Créez un utilisateur de stockage d'objets :
kubectl create -f object-user.yaml
  • Obtenir la clé secrète accesskey :
# 获取AccessKey
kubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep AccessKey | awk '{
    
    print $2}' | base64 --decode

# 获取 SecretKey
kubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep SecretKey | awk '{
    
    print $2}' | base64 --decode
  • Déployez le port de nœud rgw :
kubectl apply -f rgw-external.yaml

kubectl -n rook-ceph get service rook-ceph-rgw-my-store rook-ceph-rgw-my-store-external
  • Utilisez le stockage d'objets Ceph via l'interface API :
#首先,需要安装 python-boto 包,用于测试连接 S3
yum install python-boto -y

# 然后,编写 python 测试脚本
# cat s3.py
#!/usr/bin/python

import boto
import boto.s3.connection
access_key = 'C7492VVSL8O11NZBK3GT'
secret_key = 'lo8IIwMfmow4fjkSOMbjebmgjzTRBQSO7w83SvBd'
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = '192.168.182.110', port=30369,
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
)

Je suppose que tu aimes

Origine blog.csdn.net/Forever_wj/article/details/131739994
conseillé
Classement