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

推薦する

edgenat: 韓国SK回線直結VPS(ネイティブIP)、月額35元(70%オフ)、香港CN2\US AS4837もイベントに参加

edgenat は、韓国の SK 回線を介して韓国の VPS に直接接続する機能を追加しました。この...

クラウドネイティブ時代のゲートウェイとリバースプロキシ

[[375497]]導入ゲートウェイは主にマイクロサービス/API を提供し、R&D 担当...

IoTデバイスがエッジコンピューティングの利用を促進

アジア太平洋地域では、エッジ コンピューティングが急速に進化し、企業のイノベーションと競争上の差別化...

ノキアは新製品を発売します。頑丈で耐久性のある道を進むことができるでしょうか?

メディアの報道によると、ノキアは、ノキアの最も高価な携帯電話として知られる1シリーズのフラッグシップ...

Webmaster.com からの毎日のレポート: ダブル 11 ショッピング フェスティバルが終了、115 のクラウド ストレージがアプリ ストアから削除

1. 電子商取引「ダブルイレブン」戦争が終結し、ネットユーザーのオンラインショッピングカーニバルデー...

Alibaba CloudのFei-Fei Li氏:オールインクラウド時代において、クラウドネイティブデータベースには明らかな利点がある

5月8日、DTCC 2019(第10回中国データベース技術会議)で、アリババクラウドのインテリジェン...

クラウド コンピューティングのコストを管理するための 6 つのヒント

現在、多くの企業のクラウド コンピューティング費用は予算を超えているため、クラウド コンピューティン...

李佳琦に勝てる者は誰か?

みなさんおはようございます。編集者です。お金に非常に困っているが、それでも数十億ドル規模のプロジェク...

ショックホスティングはどうですか?シアトルデータVPSの簡単なレビュー

shockhosting は 2000 年から運営されており、実際には数年の経験を持つアメリカの企業...

「The Voice of China」におけるインターネット マーケティング

私は「The Voice of China」が放送開始以来ずっとフォローしています。この番組はこれま...

地元の中古品情報ネットワークを半年運営した経験を共有

近年、競争が少なく、運営コストが低く、視聴者が幅広い(都市には少なくとも数十万人が住んでいる)などの...

urpadの紹介

urpad は FTNhosting () のブランドであり、2008 年に設立され、同社のチームは...

ウェブサイト上でユーザーに「追いつく」3段階の習慣テストは、ユーザーの考えを理解するのに役立ちます

Nir Eyal (TechCrunch) 著過去 25 年間の真に優れた消費者向けテクノロジー企業...

今日のSEOのやり方について簡単に説明します

かつてはよく知っていた「SEO」という言葉を再び口にすると、今でもとても親しみやすく親しみやすいと感...