K8S での Ceph 導入と機能テストのクラウドネイティブの詳細な分析

I.はじめに

2. Ceph Rook の概要

  • Rook は、クラウド ネイティブ環境とのネイティブ統合のためのプラットフォーム、フレームワーク、およびさまざまなストレージ ソリューションのサポートを提供する、オープン ソースのクラウド ネイティブ ストレージ オーケストレーション ツールです。Rook は、展開、起動、構成、プロビジョニング、スケーリング、アップグレード、移行、災害復旧、監視、およびリソース管理を自動化することにより、ストレージ ソフトウェアを自己管理、自己スケーリング、および自己修復するストレージ サービスに変えます。Rook の基礎となるレイヤーは、クラウドネイティブのコンテナ管理、スケジューリング、およびオーケストレーション プラットフォームによって提供される機能を使用して、これらの機能を提供します。
  • Rook は拡張機能を使用してクラウドネイティブ環境に深く統合し、スケジューリング、ライフサイクル管理、リソース管理、セキュリティ、監視などのシームレスなエクスペリエンスを提供します。Rook は現在、Ceph、NFS、Minio Object Store、CockroachDB をサポートしています。

ここに画像の説明を挿入

3. Rook を介して k8s に Ceph をデプロイする

①展開パッケージをダウンロードする

  • コマンドは次のとおりです。
git clone --single-branch --branch v1.10.8 https://github.com/rook/rook.git
  • デプロイメントに使用するイメージは次のとおりです。

ここに画像の説明を挿入

  • 画像のソースが海外にあるため、中国ではダウンロードできません。ここで、事前にいくつかの画像を修正するか、タグをダウンロードする必要があります。操作は次のとおりです。
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

②ルークオペレーターを配備する

cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# 检查
kubectl -n rook-ceph get pod
  • Helm を通じてデプロイすることもできます。
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

③ Rook Ceph クラスタを作成する

  • Rook Operator が実行状態になったので、次に Ceph クラスターを作成できます。再起動後にクラスターが影響を受けないようにするには、設定された dataDirHostPath 属性値が有効なホスト パスであることを確認してください。
cd rook/deploy/examples
kubectl apply -f cluster.yaml

④ Rook Ceph ツールをデプロイする

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

⑤ 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
  • Ceph ダッシュボードから Ceph クラスターのステータスを表示します。
# 查看对外端口
kubectl get svc -n rook-ceph

ここに画像の説明を挿入

⑥チェック

kubectl get pods,svc -n rook-ceph

ここに画像の説明を挿入

⑦ ceph-tool ツールポッドを介して ceph クラスターのステータスを表示する

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

ceph -s

ここに画像の説明を挿入

4. テスト検証

①ブロックストレージ(RBD)テスト

  • ストレージクラスを作成します。
cd rook/deploy/examples
# 创建一个名为replicapool的rbd pool
kubectl apply -f csi/rbd/storageclass.yaml

ここに画像の説明を挿入

  • WordPress をデプロイします。
kubectl apply -f mysql.yaml
kubectl apply -f wordpress.yaml

② ファイルシステム(CephFS)テスト

  • ストレージクラスを作成します。
kubectl apply -f csi/cephfs/storageclass.yaml
  • アプリケーションをデプロイします。
kubectl apply -f filesystem.yaml

③オブジェクトストレージ(RGW)テスト

  • オブジェクト ストアを作成します。
kubectl create -f object.yaml

# 验证rgw pod正常运行
kubectl -n rook-ceph get pod -l app=rook-ceph-rgw
  • オブジェクト ストレージ ユーザーを作成します。
kubectl create -f object-user.yaml
  • アクセスキーの秘密キーを取得します。
# 获取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
  • rgw ノードポートをデプロイします。
kubectl apply -f rgw-external.yaml

kubectl -n rook-ceph get service rook-ceph-rgw-my-store rook-ceph-rgw-my-store-external
  • API インターフェースを通じて Ceph オブジェクト ストレージを使用します。
#首先,需要安装 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,
)

おすすめ

転載: blog.csdn.net/Forever_wj/article/details/131739994