実稼働の実践: 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) の分析

推薦する

Alibaba Cloud International Station(全製品)、実名購入不要、CDN設定チュートリアル付き

ウェブサイトのトラフィックが一定値に達すると、ウェブサイトのアクセスが混雑することになります。このと...

2019年下半期の産業インターネットの8大トレンド!

「ビジネス」という言葉は、産業用インターネットでは異なる意味を持つようです。説明しなくても、人々が自...

暁蘇:ウェブサイトのオリジナルアクセスログの浅いところから深いところまでの分析について語る

最近、筆者はSEOを始めたばかり、またはSEOに1~2年従事している50人以上のSEO担当者を対象に...

50kvm -199元/C3データセンターVPS/30IP/512Mメモリ/15gハードディスク/500gトラフィック

私は長い間、Diaojiの50KVMに注目していませんでした。現在、特別価格のクラスターVPSが販売...

eurobyte™: 14.9 元/月、ロシア VPS、無制限トラフィック、512M メモリ/1 コア/15g NVMe

以前ウェブマスターが紹介したeurobyte™は、2010年から運営しているロシアの会社です。ロシア...

SEO最適化におけるユーザーエクスペリエンスの簡単な分析

SEO は、収益性を達成するためにトラフィックと人気を高めるために Web サイトを最適化します。誰...

デジタル音楽は無料ランチに別れを告げる:B2BモデルがB2Cに変化

朱雲楊暁音編集者注/最近、Douban FMは有料版(FM Pro)をリリースしました。ユーザーは月...

保険業界における Kafka の応用事例

[51CTO.com クイック翻訳] Apache Kafka の登場により、多くの企業がデータを再...

助けを求めずに外部リンクを投稿することで、歴史の舞台から去りたくありませんか?

最近、GoogleやBaiduなどの検索エンジンは、さまざまな外部リンクの不正行為を取り締まるために...

パブリッククラウドからソフトウェア定義データセンターまで、マイクロソフトがハイブリッドクラウド攻勢を開始

ソフトウェア定義データセンターの分野では、VMware は近年最大のソフトウェア サプライヤーとなっ...

企業はどうすれば「クラウドトラップ」を回避できるでしょうか?

今日、クラウド コンピューティング テクノロジーは、柔軟性や収益を損なうことなく、企業が拡大する顧客...

重要インフラ保護条例が発布され、360は国家分散型セキュリティ頭脳の構築を求めた。

デジタル発展が継続的に深まるにつれ、国家のサイバー空間の安全を維持し、経済社会の発展を確保する上で、...

9s9s: CN2 GIAネットワーク、米国ネイティブIP、Netflix/Hulu/HBOを視聴可能、年間210元から、有料評価データ

中国商人の死海インターネット(9s9s)は、運営開始から1年になる新ブランドです。主な業務は米国ロサ...

「百度は来週、第2のKサイトを開設する」という噂にどう対処するか

先ほど、上級ウェブマスターグループの全員が「来週、百度ウェブ検索に何か新しいものがある」と言っている...