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

推薦する

3月第2週の国内ドメイン名解決プロバイダートップ10:HiChina DNSPodのシェアが減少

IDC Review Network (idcps.com) は 3 月 21 日に次のように報告し...

パートタイムの仕事を始める前に SEO を学ぶのにどれくらい時間がかかりますか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますパートタイ...

機密情報プラットフォームがモバイルインターネットとどのようにつながるか

モバイルインターネットのトレンドの中で、多くのインターネット製品がそのペースに追いつくのは困難になっ...

杭州警察、恐喝容疑で悪質な悪質レビュー投稿者7人を逮捕

北京ニュース(劉霞記者)昨日午前、淘宝網と杭州市公安局は共同で記者会見を開き、国内初の「悪質な悪質レ...

工業情報化部の幹部らが華雲データグループを視察

2019年3月27日、工業情報化部弁務局長の傅静波氏、情報ソフトウェア部副部長の董大建氏は江蘇省工業...

オンライン口コミマーケティングの価値と必要条件についての簡単な議論

文字通り言えば、オンライン口コミマーケティングとは、インターネットを通じて口コミで広まるマーケティン...

SEOはSEMと切り離せない

はじめに: SEM は検索エンジン マーケティングであり、SEO は検索エンジン最適化です。前者では...

Baidu 百科事典によるウェブサイト パスの最適化に関する簡単な説明

みなさんこんにちは。私は湖南省出身のキネスです。今日お話しするトピックは、ウェブサイトのパスを最適化...

母子向け電子商取引会社Redbabyが2000万ドルの資金調達、蘇寧による買収の噂を否定

昨日、売却の噂に巻き込まれた母子向け電子商取引会社レッドベイビーが今日沈黙を破り、自らメディアとコミ...

キーワード選択戦略:人気のキーワードと人気のないキーワードと専門的なキーワードの関係

重要なヒント: ウェブサイトに適したキーワードを選択することは、検索エンジンからサイトが得るトラフィ...

Google PageRank (PR) の数字の意味の詳細な説明

Google PageRank は、Google が Web ページを評価するために使用するスコアリ...

小規模ウェブサイトの最適化に関する簡単な説明

前書き: このウェブサイトの最適化は友人のために行われたのですが、彼にはお金がありません、笑。しかし...

出典を遡って百度体験が伝説的な高品質の外部リンクであるかどうかを分析する

百度百科事典は、百度が2010年に立ち上げた新しいプラットフォームで、主に生活、仕事、勉強で遭遇した...

テンセントクラウドは、開発者がワンストップ開発を実現できるよう支援するクラウド開発ツール「Cloud Studio」をリリースした。

クラウドコンピューティングのさらなる発展により、「クラウド開発」は新たなパラダイムへと進化しています...

電子商取引のトラフィックは少ない:来年はブランドB2Cの再編の年になる

【はじめに】垂直電子商取引は100メートル短距離走というよりマラソンのようなもので、規模を追求するゲ...