最近私の中で色んな意味でホットなGlusterFSを大好きなDockerコンテナに導入してみました。
環境
OS | CentOS7.2 |
---|---|
Kernel | 3.10.0 |
Docker | 1.8.2 |
Container | CentOS7.2 |
GlusterFS | 3.7.8 |
前提
- ホストOSはminimal install
- yum update済み
- SELINUX停止済み
- Dockerは導入済み
- 作業はrootで行う
導入
- Dockerコンテナを特権モードで起動する
[root@hostos ~]# docker run --privileged -it --name=gfs docker.io/centos
- 必要なパッケージを導入する
[root@container /]# yum install -y glusterfs-server.x86_64
- コンテナから抜けてイメージ化を行う
[root@hostos ~]# docker commit gfs centos7/gfs
- 作成したイメージから特権モードでコンテナを起動する
[root@hostos ~]# docker run --privileged -itd --name=gfs01 centos7/gfs /sbin/init
[root@hostos ~]# docker run --privileged -itd --name=gfs02 centos7/gfs /sbin/init
- GlusterFSサービスを起動する
[root@container01 /]# systemctl start glusterd
[root@container02 /]# systemctl start glusterd
- GlusterFSの領域を作成する
[root@container01 /]# mkdir -r /gfs01/01
[root@container02 /]# mkdir -r /gfs02/02
- GlusterFSのコンテナ同士でPeerを貼る
[root@container01 /]# gluster peer probe [gfs02 IPADDR]
- GlusterFSのストレージを作成する
glusterの後の「volume」は「vol」と省略も可能
[root@container01 /]# gluster volume create [VOLUME NAME] replica 2 [gfs01 IPADDR]:/gfs01/01 [gfs02 IPADDR]:/gfs02/02
[root@container01 /]# gluster volume start [VOLUME NAME]
- ホストOSからGlusterFSをマウントする
ここではgfs01のIPアドレスを指定しているがgfs02のIPアドレスでもマウント可能
glusterfsタイプでマウントするには「glusterfs-fuse」パッケージが必要
[root@hostos ~]# yum install -y glusterfs-fuse
[root@hostos ~]# mount -t glusterfs [gfs01 IPADDR]:/[VOLUME NAME] [MOUNT POINT]
DockerコンテナのGlusterFSを外部からマウントしたい時
方法1:ブリッジネットワークで外に出す
- Pipeworkなんかを使ってコンテナにブリッジ接続のvethを追加
Pipeworkまたはnsenterの設定を行いブリッジ接続でコンテナを外部公開することでGlusterFSの外部マウントが可能になります。
Pipework/nsenterの設定方法についてはこの記事の本質ではないので割愛いたします。
(後日別記事としてあげるかもしれません。)
方法2:必要なポートをExposeする
Dockerコンテナの起動時に必要なポートをExposeすることによって外部からGlusterFSストレージに対してアクセス出来るようにします。GlusterFSのバージョンによって必要なポートが変更されておりますのでご注意ください。
- Peerで利用されるポート
- 1017 - 10xx
- GlusterFS Deamonポート
- 24007
- マネジメントポート
- 24008
- GlusterFSのブリックが利用するポート
- 24009 -
- GlusterFS NFSサービスを利用する場合
- 38465 -
- GlusterFSのブリックが利用するポート
- 49152 -
Peerで利用する1017-ポートは解放しなくてOK
GlusterFS Version3.4未満ではブリックごとに24009から連番で割り当てられる
GlusterFS Version3.4以上ではブリックごとに49152から連番で割り当てられる
参考URL(外部サイト):http://www.gluster.org/community/documentation/index.php/Basic_Gluster_Troubleshooting
Dockerコンテナ In GlusterFSで出来ないこと
コンテナに直接Lunをマウント出来ない
現状コンテナにLunをマウントすることが権限的に出来ないのでホストOSにマウントして、コンテナに-vオプションでマウントという方法しか無い。
マウントレイヤが一層増えるのでもちろん性能は下がる。これはDockerの仕様の問題なので解決するのには先が長そう・・(システム領域を触ることになるのでセキュリティ的に大丈夫かとかがあるはず)
性能はそんなによろしくない
直接Lunマウントなんかが出来ないものだから素で使うより性能はよろしくはない。
ただHWリソースの制限ができるので最適化できれば利用価値はあるかも。しれない。
Stripeモードが不安定な場合がある
ホストに直接GlusterFSを導入してガリガリ使ったことがないからなんとも言えないがStripeで組んだ時にマウント先の中身が見えなくなることがあった(書き込みは出来る)。
これはGlusterFSのポートとも関係がありそう。基本的には双方向通信が出来ないとGlusterFSは利用出来ないです。