(ceph) rbd mapで missing required protocol features

rbd mapで

 feature set mismatch, my 106b84a842a42 < server's 40106b84a842a42, missing 400000000000000
 missing required protocol features

となったら

ceph osd crush tunables hammer

結果の確認は

ceph osd crush show-tunables 

{
    "choose_local_tries": 0,
    "choose_local_fallback_tries": 0,
    "choose_total_tries": 50,
    "chooseleaf_descend_once": 1,
    "chooseleaf_vary_r": 1,
    "chooseleaf_stable": 0,
    "straw_calc_version": 1,
    "allowed_bucket_algs": 54,
    "profile": "hammer",   ⇦ ここがjewelからhammerに変わってる
    "optimal_tunables": 0,
    "legacy_tunables": 0,
    "minimum_required_version": "hammer",
    "require_feature_tunables": 1,
    "require_feature_tunables2": 1,
    "has_v2_rules": 0,
    "require_feature_tunables3": 1,
    "has_v3_rules": 0,
    "has_v4_buckets": 1,
    "require_feature_tunables5": 0,
    "has_v5_rules": 0
}

kubeadm initで"systemd" is different from docker cgroup driver: "cgroupfs".

kubeadm init で

"systemd" is different from docker cgroup driver: "cgroupfs".

が表示された際の対応メモ

kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
apiServer:
  certSANs:
  - "kubernetes-api.local"
controlPlaneEndpoint: "kubernetes-api.local:443"
# for flannel
networking:
  podSubnet: "10.244.0.0/16"
---
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
cgroupDriver: cgroupfs  ⇦これを追記

PackstackでOpenStack Pikeお試し

概要

自宅サーバクリーンインストールするついでにopenstackの再セットアップを実施したので、作業メモ。 2017年8月30日リリースされたOpenStack Pikeをインストールする。

各プロジェクトを個別インストールするのは面倒なので、packstackを使用してサクッと一括インストール。

構成

openstackの外部ネットワークと自宅のLAN(192.168.11.0)が同じサブネットとなるように設定する。

ip-address OS メモリ
192.168.11.100 CentOS Linux release 7.4.1708 (Core) 32G

手順

基本的には他の方々が説明してくれている通り。

Packstack — RDO に記載してある手順にそって作業すればだいたい問題ない。

必要なものをインストールしたあとpackstackでopenstackをインストール。

事前インストール

とりあえず、最新化。

$ yum update -y 

言語設定をen_US.utf-8に変更する。これやらないとうまくインストールできないらしい。

$ LANG=en_US.utf-8
$ LC_ALL=en_US.utf-8

既存のfirewall、NetworkManagerを停止し、古いnetworkを使用する。

$ systemctl disable firewalld
$ systemctl stop firewalld
$ systemctl disable NetworkManager
$ systemctl stop NetworkManager
$ systemctl enable network
$ systemctl start network

openstack-pikeのリポジトリをインストール。

$ yum install -y centos-release-openstack-pike  
$ yum update -y

pack-stackをインストール。

$ yum install -y openstack-packstack

answerファイルの編集

インストール用のanswerファイル(設定ファイル)を作成し、自分用にカスタマイズする。

今回の修正箇所はネットワークをホストネットワークに接続する箇所。

まずはanswerファイルの作成。

$ packstack --gen-answer-file=answers.cfg

修正箇所は以下の通り、今回はDEMOプロジェクトの作成も無しにしたけど、どっちでも良い。

$ diff answers.cfg.bk answers.cfg
892c892
< CONFIG_NEUTRON_OVS_BRIDGE_IFACES=
---
> CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:enp0s25
1158c1158
< CONFIG_PROVISION_DEMO=y
---
> CONFIG_PROVISION_DEMO=n

packstackを実行

編集したanswerファイルを使用してpackstackの実行。

$ packstack --answer-file=./answers.cfg 

ひたすら待って

Installation completed successfully

が出てきたら完了。

確認

dashboradにアクセスできることを確認。

http://192.168.11.100/dashboard

idはadminでパスワードは/root/keystonerc_adminに記載されているOS_PASSWORDを参照する。

インストールできていることを確認したら、一旦リブート

$ reboot now

ネットワークの作成

Neutron with existing external network — RDO

にも記載されているが、以下のようにし、LANと接続する外部ネットワークを作成する。

neutron net-create external_network --provider:network_type flat --provider:physical_network extnet  --router:external

horizonで実施するのであれば、プロバイダーネットワーク種別をフラットにし、物理ネットワークにextnetを指定する。

あとは外部ネットワークにチェックを入れてネットワーク作成。

データ永続化でどハマりした。

概要

前回までで作成したrancherクラスタでサービス展開することを考えると「やっぱり、データ永続化したいよなぁ。」となった。 試してみたがうまくいかない!!!SELinuxがわからない。勉強不足で超えられなかった。。。

経緯

クラスタ構成でデータの永続化のは色々な技術があるらしい、 - gluster fs - rancher-nfs - longhorn - etc…. ここは、rancherで組んだクラスタなんだからrancher-nfsしかないだろ!!! (本当はlonghornというのを使ってみたかったが、まだ実験段階とのことなので、また今度試すとして)

ということで、rancher-nfsを選択。

構成

今回の想定している構成は以下

ip export
192.168.1.8 nfs /mnt/nfs

設定

インストール

カタログからrancher-nfsを選択して簡単にインストール。

設定する値は

項目 設定値
ip 192.168.1.8
mount /mnt/nfs

データボリュームの作成

インフラ>ストレージ >

作成ボタンをポチッと

使い方

以下のようなdocker-compose.ymlを用意

スタック> ユーザー> 作成!!

確認

ストレージの画面からattachされていることを確認。

シェルを起動してファイルを配置

nfsサーバからも配置されていることを確認。

そして泥沼へ…

gitlabのスタックを作成しようとしたけど、permissionエラーとなってしまい作成できない。

解決策(逃げ)

coreosのSELinuxの設定わからない・・・

OS替えてSELinuxをOFFにしちゃえ!(悲しくなる、勉強しよ)

選択したOSは centos atomic host

SELinuxの解除は簡単。 /etc/selinux/config のSELINUX=enforcing をSELINUX=disabled へ変更してreboot

$ getenforce
Disabled

よし。

確認

rancherからコンテナを起動し、正常に起動されれば問題なし

openstack上のrancherでサービスを提供してみる。

概要

前回作成した、rancherクラスタは内部のネットワークに各インスタンスを配置しているため、外部へサービスの提供ができていない。

今回は新規にfloating IPを割り当てたアクセス用のホストを新規に追加し、外部からアクセスができるような構成を作成する。

目標

wordpress(なんでも良かった)を内部のhostに作成し、外部からアクセスできるようにする。

構成

今回の予定している構成は以下のとおり。

host名 private -ip Floating IP
rancher-server 192.168.1.9 192.168.11.110
rancher-node1 192.168.1.12
rancher-node2 192.168.1.5
rancher-proxy 192.168.1.8 192.168.11.130 今回新規に追加

rancher-proxy ノードの作成

proxyインスタンスの作成

openstackでcoreosインスタンスを作成し,キーペア、セキュリティグループ、を設定する。 作成が完了したらfloating ip を割り振っておく。

rancherへhostの追加。

rancher-nodeと同様にhostの追加を実施する。 この時 インフラストラクチャ > ホストの追加 > 3.ラベルの追加 で、わかりやすい名前と値をつけておく。

今回は

  • キー:external
  • 値:true

とした。

あとは、rancher-proxyノードでdocker run コマンドを実行。

rancherのホスト画面に追加されれば完了。

サービスの作成

rancher-proxyノードが作成できたらカタログからwordpressを選択し追加する。

wordpressがスタックに追加され、稼働するのを待つ。

稼働が完了したあと、どのホストで動いているのかを確認する。(今回はrancher-node01 で動いていた。) rancher-node01で稼働していても、外部からのアクセスができないため、ロードバランサーを追加する。

スタック > wordpress > ロードバランサーを追加 より

名前 wp-lb (適当)

ポートルール

外部に公開するポートを指定し(今回は80)、対象をwordpress、 ポート 80 へ設定。

スケジューリングタブで、先ほど設定したスケジューリングのラベルを指定する。

  • キー:external
  • 値:true

稼働確認

スタック > wordpress にwp-lb が追加され、rancher-proxyで稼働していることを確認する。

http://192.168.11.130/ へアクセスし、wordpressのtop画面が開くことを確認できた。

あとは元からあるwordpress-lbを削除してしまえばきれいになる。※最初からこっちのスケジューリング変えるだけでも良かった。

openstack上に一からrancherクラスタを構築してみる。

概要

openstack環境を構築し、その上にrancherクラスタを作成した。

openstackのインストール手順は別途記録するとして、今回はrancherクラスタを作成するまでの手順を忘れないようにメモ。

目標

今回はrancher-serverとrancher-agent(2台)の併せて3台の構成。osはcoreosを使用。 構成とIPアドレスは以下のとおり。rancherサーバにはfloating ip を割り振る。

host名 private -ip Floating IP
rancher-server 192.168.1.9 192.168.11.110
rancher-node1 192.168.1.12
rancher-node2 192.168.1.5

準備

coreosのイメージ作成

coreosのopenstack用imageを取得。

$ wget https://stable.release.core-os.net/amd64-usr/current/coreos_production_openstack_image.img.bz2
$ bunzip2 coreos_production_openstack_image.img.bz2  

取得したimageをopenstackのglanceへ追加しておく。

キーペアの作成

キーペアを作成する、作成したキーペア名は home-network-key にした。 作成したキーペアはダウンロード後配置しておく。今回は~/.ssh/pemfile以下に配置した。

セキュリティグループの作成

rancher用のセキュリティグループを作成する。

  • TCP:8080 (ダッシュボード用)
  • TCP:3306
  • UDP:500
  • UDP:4500

を追加。

rancher-serverの作成

rancher-server用インスタンスの作成

準備で作成したキーペア・セキュリティグループを指定。 coreosのimageからインスタンスを作成する。

この時に 設定 > コンフィグドライブ のチェックをつける。

これをやらないとsshのキーペアが読み込まれないらしい。

rancher-server立ち上げ

ログインユーザはcoreos

$ ssh -i ~/.ssh/pemfile/home-network-key.pem core@192.168.11.110

dockerのバージョンを確認しておく。

$ docker --version
Docker version 1.12.6, build a82d35e

rancher-server の起動

$ docker run -d --restart=always -p 8080:8080 rancher/server

数分したらプロセスが起動しているはず。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
ebbadd860326        rancher/server      "/usr/bin/entry /usr/"   16 minutes ago      Up 16 minutes       3306/tcp, 0.0.0.0:8080->8080/tcp   loving_bhaskara

これでrancher-serverのインストールが完了。

http://192.168.11.110:8080/

へアクセスすればdashboardが開く。

dashboardは右下のプルダウンから日本語に変更できるので、英語ができない私は変更しておく。

rancher-agentの作成

インスタンスを作成しておく。

インスタンスを2つ作成。openstackだと本当に簡単

イメージはcoreosを使用。キーペア、セキュリティグループは別で作っても良かったが、今回はそのままrancher-serverと同じものを使用。

rancher の設定

rancher-serverのdashboardを開き インフラストラクチャ > ホスト > ホストの追加 と進む。

ホスト登録URLがhttp://192.168.11.110:8080になっているが、今回agentからはプライベートIPでアクセスするためhttp://192.168.1.9:8080へ変更する。

再度ホストの追加を選択し、⑤のコマンドをagent-nodeの各インスタンスで実行する。

あとは待っていればdashboardにノードが追加される。

最後に

openstackとcoreosを使用すると、とても簡単にrancherのクラスタを構築できた。

もっと良いやり方や、変えたほうが良い箇所があれば、ぜひ教えてください。