実稼働の実践: GlusterFS を使用して Kubernetes ストレージ ボリューム クラスターを構築する

実稼働の実践: GlusterFS を使用して Kubernetes ストレージ ボリューム クラスターを構築する

GlusterFS を使用して Kubernetes クラスター用の信頼性の高いストレージ ソリューションを構築する方法に焦点を当てます。

1. サーバーリスト:

  • 172.18.1.52
  • 172.18.1.53
  • 172.18.1.54

2. yumソースをインストールする

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-9.repo

3. glusterfsサーバーをインストールする

3つのノードで実行

yum -y install centos-release-gluster5.noarch yum -y install glusterfs-server

起動を設定して開始する

3つのノードで実行

systemctl start glusterd systemctl status glusterd systemctl enable glusterd

ノードファイアウォールを無効にする

3つのノードで実行

systemctl stop firewalld

クラスターの構築

172.18.1.52サーバーで次のコマンドを実行します。

 #IP地址为其他集群节点的IP,多个ip执行多次gluster peer probe 172.18.1.53 gluster peer probe 172.18.1.54

クラスターのステータスを確認する

gluster peer status

4. ヘケティのインストール

Heketi は、GlusterFS 分散ファイルシステムを管理および構成するためのオープンソース プロジェクトです。 Heketi の主な目標は、GlusterFS の管理と構成を簡素化することです。ユーザーが GlusterFS ボリュームを簡単に作成、サイズ変更、削除できるようにする RESTful API を提供します。

glusterfsノードへのパスワードなしのログインを設定する

ssh-keygen -t rsa ssh-copy-id -p 22 [email protected] ssh-copy-id -p 22 [email protected] ssh-copy-id -p 22 [email protected]

heketiをインストールする

172.18.1.52で実行

yum install -y heketi heketi-client

heketi設定ファイルを変更する

/etc/heketi/heketi.jsonにアクセスして変更する

起動ファイル /usr/lib/systemd/system/heketi.service を変更します。そうしないと、起動時にエラーが報告されます。

次のコマンドを実行します

systemctl daemon-reload systemctl enable heketi systemctl start heketi

起動が成功したことを確認する

成功した場合はHeketiからHelloを返します

curl -s 127.0.0.1:8080/hello | awk '{print $0}'

heketi を使用して glusterfs クラスターを作成する

マウント可能なディスクを表示するには、 fdisk -l を実行します/dev/vdbがマウントされていないことがわかります。

/etc/heketi/heketi-topology.json を作成し、以下を設定します。

 # 通过topology.json文件定义组建GlusterFS集群; # topology指定了层级关系:clusters-->nodes-->node/devices-->hostnames/zone; # node/hostnames字段的manage填写主机ip,指管理通道,在heketi服务器不能通过hostname访问GlusterFS节点时不能填写hostname; # node/hostnames字段的storage填写主机ip,指存储数据通道,与manage可以不一样; # node/zone字段指定了node所处的故障域,heketi通过跨故障域创建副本,提高数据高可用性质,如可以通过rack的不同区分zone值,创建跨机架的故障域; # devices字段指定GlusterFS各节点的盘符(可以是多块盘),必须是未创建文件系统的裸设备{ "clusters": [ { "nodes": [ { "node": { "hostnames": { "manage": [ "172.18.1.52" ], "storage": [ "172.18.1.52" ] }, "zone": 1 }, "devices": [ "/dev/vdb" ] }, { "node": { "hostnames": { "manage": [ "172.18.1.53" ], "storage": [ "172.18.1.53" ] }, "zone": 2 }, "devices": [ "/dev/vdb" ] }, { "node": { "hostnames": { "manage": [ "172.18.1.54" ], "storage": [ "172.18.1.54" ] }, "zone": 3 }, "devices": [ "/dev/vdb" ] } ] } ] }

クラスターを作成するには、次のコマンドを実行します。

 heketi-cli --user=admin --secret=12123 --server http://127.0.0.1:8080 topology load --json=/etc/heketi/heketi-topology.json

5. k8s StorageClassを作成する

k8s の StorageClass は、永続ボリュームのリソース オブジェクトを定義および構成するために使用されます。 StorageClass は、管理者がさまざまな種類のストレージとアクセス モードを定義し、それらをアプリケーション開発者が利用できるようにするための抽象化レイヤーを提供します。

gfs-secret.yaml を作成する

echo -n "mypassword" を実行します |上記で設定した管理者パスワードをbase64で暗号化し、キー値を変更します。

 apiVersion: v1 kind: Secret metadata: name: heketi-secret namespace: default data: # base64 encoded password. Eg: echo -n "mypassword" | base64 key: c2dqcHJvZDIwMjMxcWF6 type: kubernetes.io/glusterfs

gfs-StorageClass.yaml を作成する

gfs-StorageClass.yamlを作成するには、事前に次の2つのパラメータを用意する必要があります。

  • resturl値はビルド後のheketiインターフェースアドレスです。http://172.18.1.52:8080
  • clusterid値は次のように取得できます。
 heketi-cli --user=admin --secret=1212 --server http://127.0.0.1:8080 cluster list

最後に、設定ファイルは次のようになります。

 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: gfs-storage provisioner: kubernetes.io/glusterfs parameters: # resturl 是第二步搭建好之后的heketi 接口地址resturl: "http://172.18.1.52:8080" # Clusterid 必填clusterid: "caf83363937a99eccfd1e1c03112fd2d" restuser: "admin" secretNamespace: "default" secretName: "heketi-secret" gidMin: "40000" gidMax: "50000" # volumetype: "none" volumenameprefix: "gfs"

次のコマンドを実行してk8sクラスターにデプロイします。

次のコマンドを実行します

kubectl apply -f gfs-secret.yaml kubectl apply -f gfs-StorageClass.yaml

クエリ作成結果

kubectl get secret kubectl get sc

上記の結果は、作成が成功したことを示しています

6. テスト

次に、Spring Bootプロジェクトをデプロイし、ログファイルをgfsにマウントします。

backend-log-pvc.yaml を作成する

kind: PersistentVolumeClaim apiVersion: v1 metadata: name: backend-log-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: gfs-storage

backend-dp.yaml を作成する

apiVersion: apps/v1 kind: Deployment metadata: name: backend spec: selector: matchLabels: app: backend replicas: 1 template: metadata: labels: app: backend version: latest spec: containers: - name: backend image: "dweizhao/backend:latest" imagePullPolicy: Always resources: limits: cpu: 1000m memory: 1G requests: cpu: 1m memory: 200M volumeMounts: - mountPath: /data/web_log/java/backend name: web-log volumes: - name: web-log persistentVolumeClaim: claimName: backend-log-pvc

展開する

kubectl apply -f backend-log-pvc.yaml kubectl apply -f backend-dp.yaml

デプロイメントが完了したら、pv とシステム ログをチェックしてマウントが成功したことを確認します。

マウントが成功したことを確認する

ファイル サーバーにログインし、df -h を実行して、次のようにマウント ログ ファイルを表示します。

マウント名を認識できないため、対象ファイルが見つかりません。したがって、mount.sh (補助コマンド セクション) スクリプトを実行して、fs ボリュームを/data/web_log/ディレクトリにマウントし、 namespace+pvcName という名前を付けます。スクリプトを実行した後、 /data/web_log/default_backend-log-pvcディレクトリに移動し、以下に示すようにマウント ログを表示します。

7. 補助コマンド

マウント

heketi ノードで次のコマンドを実行して、fs ボリュームを /data/web_log/ ディレクトリにマウントします。クエリ用のログ スクリプトをいくつか次に示します。

 #/bin/sh VolumeList=$(heketi-cli --user=admin --secret=1212 --server http://127.0.0.1:8080 volume list | awk -F ':' '{print $NF}') for Volume in ${VolumeList[@]}; do MountDir=$(echo $Volume | awk -F '_' '{for(i=2;i<NF;i++) printf("%s_",$i);printf("\n") }' | sed 's/.$//g') # 检查文件夹是否存在if [ ! -d "/data/web_log/$MountDir" ]; then mkdir -p "/data/web_log/$MountDir" echo "create dir /data/web_log/$MountDir" mount -t glusterfs "127.0.0.1:$Volume" "/data/web_log/$MountDir" else echo "Already dir /data/web_log/$MountDir" fi done

ディスクデータを初期化する

pvremove /dev/vdb --force --force


<<:  サービスメッシュと OpenTelemetry の連携を探る: 分散トレース

>>:  Spring Cloud Function の SpEL インジェクション脆弱性 (CVE-2022-22963) の分析

推薦する

Baidu ウェブマスター プラットフォームの苦情ガイドにより苦情処理の効率が向上

8月6日、百度ウェブマスタープラットフォームの公式Weiboアカウントは声明を投稿した。「百度ウェブ...

IaaS 環境における SaaS (Security as a Service) モデルの分析

1 クラウドコンピューティングIaaSの開発IaaS はインフラストラクチャ レベルのクラウド コン...

エッジコンピューティングはエンタープライズビジネスに適していますか?

ほとんどの新しい IT 技術開発と同様に、「エッジ コンピューティング」は革命ではありません。むしろ...

毎日のトピック: 2012 年の共同購入データが発表され、売上は増加、ウェブサイト数は減少

2012年のグループ購入データ公開Tuan800が発表した最新データによると、2012年の総取引額は...

フレンドリーリンクの構築に関する誤解を取り除き、ウェブサイトを活性化しましょう

みなさんこんにちは。私は西安 Yijie Smart Home のウェブマスター、Dancer です...

オンラインプロモーションの8つのヒントで、あなたのプロモーションの方向性が定まらなくなります

序文: オンラインプロモーションに携わる者として、私たちは皆、オンラインプロモーションに関して独自の...

cmivps: 香港サーバー、無制限のトラフィック、超高構成、複数の IPv4、月額 169 ドルから、CN2+PCCW 回線

cmivps は香港データセンターに独立したサーバーを追加しました。これらの香港サーバーは、2*e5...

Parallels Desktop 15 for Mac が macOS 10.15 Catalina をサポートするようになりました

サンフランシスコ、2020 年 10 月 23 日 /PRNewswire/ -- クロスプラットフ...

ユビキタスIM NetEase Cloudはモバイルソーシャル時代の強固な基盤を築くことに尽力しています

モバイル ソーシャル ネットワーキングの動向は穏やかに見えますが、実際には暗流が存在します。多くの業...

hostmybytes-$7/1g メモリ/500 ハードディスク/3T トラフィック/フェニックス/ケベック

hostmybytes、設立年は分かりませんでしたが、ドメイン名は2007年に登録され、現在は2名で...

#ニュース# Linode が CPU を一日中独占できる新しいスタンドアロン CPU VPS を追加

4 時間前、Linode は最新ニュース「Linode 専用 CPU インスタンス」を正式にリリース...

ウェブサイトの「新生」は細部の最適化にもっと注意を払うべきである

SEO を行うウェブマスターは、毎日古いウェブサイトのランキングを最適化する必要がありますが、新しい...

ウェブサイト構築の 6 つのステップ: 新しいウェブサイトの重量を改善するのは夢ではありません (パート 1)

Baiduの検査期間の到来に伴い、ますます多くの新規ウェブサイトがウェブサイト構築の谷に向かっていま...

ステーションを診断するにはどうすればいいですか?

ウェブサイトの診断については、長い間議論されてきたトピックです。しかし、一部のウェブマスターは、ウェ...