k8s クラスタの各 Node マシンに GlusterFSサーバのコンテナを一つだけ起動して、簡単な分散ファイルシステムを構築します。各 Node へのコンテナ設置のためには DaemonSet が利用できそうですが、ここでは RancherOS の rancher.services
を利用します。
1台構成
後に rancher.services
で起動することを想定して、Debian stretch のイメージでコンテナ内に GlusterFS を設定してみます。GlusterFS は fuse を利用するため適切な権限を付与します。
自動起動の設定削除および確認をしたい場合
brick を一つだけ作成して、brick をもとに volume を作成
ホスト側のディレクトリをマウントしておくとデータを永続化できます。gluster volume create
ではディレクトリの内容が削除されません。
ホスト外からマウントするためには更に --net=host
を付与します。-h mygluster
は付与しません。コンテナのホスト名はホストと同じになります。
RancherOS の場合
rancher.services
の設定は以下のようにできます。
Dockerfile
entrypoint.bash
build.bash
動作検証
Pod からの利用設定
直接 mount する方法もありますが、以下では Persistent Volume として設定しています。
複数台構成
手動で設定を把握
複数台構成を把握する目的で、以下のようにコンテナを三つ同じ docker ネットワーク内に起動してみます。実際には別々のサーバで一つのコンテナを --net=host
を付与して起動します。
例えば mygluster1 から mygluster2 と mygluster3 を追加する場合
mygluster1 と mygluster2 および mygluster3 は同じ扱いで主従関係はありません。以下のコマンドはいずれのホストで実行しても動作します。
実行例
ボリュームのタイプ
冗長性なし
すべて同じデータを保持
同じデータを二つのサーバで保持
新規にサーバを追加した場合のオペレーション例
- Managing GlusterFS Volumes
- Gluster Command Line Interface
- Managing Trusted Storage Pools (TSP)
- Managing Directory Quota
mygluster1 と mygluster2 で volume create して start
mygluster3 と mygluster4 を pool に追加
RancherOS の場合の簡単な設定例
簡単のため便宜的な master とその他で設定を分けてみます。SERVER_NAMES
等の環境変数を変更すると docker コンテナ自体が再作成されますが、brick ディレクトリ内のデータは削除されずに引き継がれます。
便宜的な master
rancher.services
の設定は以下のようにできます。
Dockerfile
entrypoint-master.bash
replica 2
としているため、SERVER_NAMES
で指定した先頭から二つずつが組になります。以下の例では myhostname-master myhostname1
が組です。SERVER_NAMES: myhostname-master myhostname1 myhostname2 myhostname3
とした場合は更に myhostname2 myhostname3
が組になります。
the order in which bricks are specified has a great effect on data protection.
https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/#creating-distributed-replicated-volumes
build.bash
その他のホスト
Dockerfile
entrypoint.bash
build.bash
IO の状態を確認
マウントしているクライアント
各 brick における読み出し、書き込み、ファイルオープン回数の調査
各 brick のプロファイリング
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- Rancher で構築した kubernetes クラスタのアップグレード手順RancherOS 等、docker が使える何らかの OS で Rancher によって構築した kubernetes クラスタのアップグレードを行うためには、以下のようにします。 v2.1.5 の Rancher で構築した k8s クラスタに存在する脆弱性 CVE-2019-11253 への対応がなされた [v2.3.2](https://github.com
- Docker CLI チートシートDocker に関するコマンド逆引き集です。公式ページの「Reference documentation」情報をもとにしています。 Docker 用語について コンテナ 後述のイメージという型をもとに作られる実体です。例えるならば、オブジェクト指向プログラミングにおけるクラスが Docker イメージで、インスタンスが Docker コンテナです。ある
- 複数の物理ホストの Debian9 上に Kubernetes (k8s) クラスタを Rancher で立ち上げるDocker オーケストレーションツールの一つに Kubernetes (k8s) があります。k8s 実行環境の構築方法は複数ありますが、ここでは AWS や GCP 等のクラウドサービスを利用せず、Debian9 がインストールされた複数台の物理マシンがネットワーク内に存在する状況を考えます。これら複数の Debian9 上に k8s クラスタを立ち上げるためには [Ranche
- Dockerfile ベストプラクティス (仮)Dockerfile を書く際に気になるポイント集です。「Best practices for writing Dockerfiles」および「Dockerfile Reference」をもとにしています。 Dockerfil
- RancherOS による Kubernetes クラスタの構築Kubernetes クラスタを RancherOS で構築する場合の設定例を記載します。 インストール ISO ファイルをダウンロードして起動すると ros コマンドが利用できるコンソールに入ります。インストール可能なバージョン一覧はコンソール上で以下のコマンドによって確認できます。 sud