Ceph(Octopus)の構築(設定編 ブートストラップ)

##__はじめに__
この記事では、タイトルのとおり現時点(2021.01)で最新である__ceph(octopus)__の構築を目的としています。
また、自分で構築した手順の備忘録を兼ねているので、細かいところで間違いなどあるかもしれません。

基本的には公式のDOCUMENTATIONが必要なことを全て網羅しているので一読しておくことをお勧めします。
Linuxの知識もある程度必要になるので他サイトや書籍などで事前に基本は押さえておくとよいでしょう。

##__関連記事__
[Ceph(Octopus)の構築(準備編 ハードウェア)](https://qiita.com/iriya_v00v/items/651eff2955d5ad7eadf6)
[Ceph(Octopus)の構築(準備編 ソフトウェア)](https://qiita.com/iriya_v00v/items/e3268fe75423ba0304b3)
[Ceph(Octopus)の構築(設定編 共通)](https://qiita.com/iriya_v00v/items/d7d9e439cf4159acae2c)
Ceph(Octopus)の構築(設定編 ブートストラップ)　この記事
[Ceph(Octopus)の構築(設定編 mon/mgr/osd)](https://qiita.com/iriya_v00v/items/75eefdefb7ec61d24812)
[Ceph(Octopus)の構築(設定編 cephFS/mds)](https://qiita.com/iriya_v00v/items/931838d6d56e568bd6d8)
[Ceph(Octopus)の構築(設定編 Crush Map)](https://qiita.com/iriya_v00v/items/2a263a7817434e8b91ed)

##__SSH__
monノードから各ノードを設定するため、sshキーを生成しておきます。

```
ssh-keygen -t rsa
```

shellscriptを使って各作業を自動化したいのでsshpassも入れておきます。

```
yum -y install epel-release
yum -y install sshpass
```

※　epel-releaseはceph-commonのインストールにも必要

##__ceph__
#####cephリポジトリの確認(ceph-mon01のみ)
[リポジトリ](https://download.ceph.com/)
今回はOSがCentos7でハードウェアはx86_64なので
https://download.ceph.com/rpm-octopus/el7/x86_64/ceph-15.2.7-0.el7.x86_64.rpm
を選びました。
よくわからない場合はよく調べるか、とりあえずnoarchを選べば何とかなるかもしれません。

#####リポジトリの登録(ceph-mon01のみ)
URLを間違えないように気を付けましょう。ファイルを新規に作成します。

```
vi /etc/yum.repos.d/ceph.repo
```

>[ceph-noarch]
>name=Ceph noarch packages
>baseurl=https://download.ceph.com/rpm-octopus/el7/x86_64
>enabled=1
>gpgcheck=1
>type=rpm-md
>gpgkey=https://download.ceph.com/keys/release.asc

#####cephadm(ceph-mon01のみ)

```
yum -y install cephadm
```

#####cephディレクトリ作成(ceph-mon01のみ)

```
mkdir -p /etc/ceph
```

#####ブートストラップ(ceph-mon01のみ)
ブートストラップを実行するとcephクラスタを開始するために必要な、以下1～5の設定がまとめて行われます。
　1．cephクラスタ用キーの作成
　2．docker imageのpull
　3．実行ノードにmon/mgrのdaemonを作成
　4．cephの構成ファイルの作成
　5．dashboardの開始

docker imageを自動的にpullしてくるため、一番最初はインターネットに繋がっている必要があります。
ただ、事前に必要なdocker imageを格納できる場合はその必要はないかもしれません。私はやり方が分からなかったので、おとなしくインターネットに繋ぎました。ノードをmon兼mgrとして動かす場合と、mdsもしくはosdとして動かす場合ではpullしてくるdocker imageが異なるようです。

mon兼mgrとしてノードを設定したときのdocker image
![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033108/d29f58bb-3ad5-5c9c-5692-dd772e590bf4.png)
mdsもしくはosdとしてノードを設定したときのdocker image
![02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033108/261d3f97-7345-58a1-5441-2cd2bd2c13f8.png)
また、今回は閉域環境でcephクラスタを動かしたかったので以下のような回りくどい方法をとりました。もっとスマートにやる方法があるような気がしますが・・・。
　1.　ブートストラップでインターネットからdocker imageをpullしてくる
　2.　作成されたクラスタをdocker imageだけ残して削除
　3.　閉域のIPアドレスに変更し、再度ブートストラップを実行する(--skip-pull)

```:イメージをpullする場合
cephadm bootstrap --mon-ip 192.168.1.101
```
ブートストラップを実行すると、最後にdashboardのURLと初期パスワードが表示されるので、動作チェックも兼ねて一度アクセスしておきましょう。

```:イメージをpullしない場合
cephadm bootstrap --mon-ip 192.168.1.101 --skip-pull
```

#####mon及びmgrの自動展開を無効にする(ceph-mon01のみ)
この後、作成されたクラスタに各ノードを追加していくのですが自動展開を無効にしておかないとノードに意図した役割を持たせることができません。(勝手にmonが展開されます。)
自動でやってくれるのはありがたいのですが、今回はノード毎に役割を決めているので無効化しておきます。

```
cephadm shell
　　ceph orch apply mon --unmanaged
　　ceph orch apply mgr --unmanaged
```

##__samba__
cephFSをファイルサーバのように使うためには以下段階を踏む必要があります。閉域環境へ持っていってからではできないのでこのタイミングでパッケージの追加をしておきます。

　1．cephFSをマウントする
　2．マウントしたcephFSを共有する

cephFSをマウントするために必要になるパッケージです。
epel-releaseを入れてないと依存関係のエラーでうまく入りませんでした。
上記sshpassのところで入れてない場合はここで入れる必要があります。

```
yum -y install ceph-common
```

マウントしたcephFSを共有フォルダとして公開するためのパッケージです。

```
yum -y install samba
```



##__おわりに__
monノードに必要な作業は以上です。ブートストラップを実行する最初の1台のみの作業の方が多いですね。
2台目以降のmonノードはブートストラップではなく、ceph orchコマンドで追加していくことになります。
cephFSマウントの方法やsambaの設定は別の記事に投稿します。