Chef を Ruby コード内で利用する

こんにちは。@jedipunkz です。 require ‘chef’ して Ruby コードの中で chef を利用したいと思って色々調べていた のですが、そもそもリファレンスが無くサンプルコードもごくわずかしかネット上に見 つけられない状態でした。結局ソースコードを読んで理解していく世界なわけですが、 サンプルコードが幾つかあると他の人に役立つかなぁと思い、ブログに載せていこうか なぁと。 まず Chef サーバへアクセスするためには下記の情報が必要です。 ユーザ名 ユーザ用のクライアント鍵 Chef サーバの URL これらは Chef::Config で記していきます。 では早速サンプルコードです。まずは data bags 内データの一覧を取得するコードで す。data bags 内のデータを全で取得し配列で表示します。 #!/usr/bin/env ruby require 'rubygems' require 'chef/rest' require 'chef/search/query' Chef::Config[:node_name]='user01' Chef::Config[:client_key]='/home/user01/user01.pem' Chef::Config[:chef_server_url]="https://10.200.9.22" Chef::DataBag::list.each do |bag_name, url| Chef::DataBag::load(bag_name).each do |item_name, url| item = Chef::DataBagItem.load(bag_name, item_name).to_hash puts item end end 次は data bags にデータを入力するコードです。json_data という JSON 形式のデー タを test_data という data bag に放り込んでいます。 #!/usr/bin/env ruby require 'rubygems' require 'chef/rest' require 'chef/search/query' Chef::Config[:node_name]='user01' Chef::Config[:client_key]='/home/user01/user01.pem' Chef::Config[:chef_server_url]="https://10.0.0.10" json_data = { "id" => "test", "command" => "echo test" } databag_item = Chef::DataBagItem.new databag_item.data_bag('test_data') databag_item.raw_data = proc_nginx databag_item.save 次は nodes 一覧の取得です。 ...

Ceph クラスターネットワーク構成

こんにちは。@jedipunkz です。 Ceph を運用する上で考慮しなければいけないのがトラフィックの負荷です。特に OSD 同士のレプリケーション・ハートビートには相当トラフィックの負荷が掛かることが想 像出来ます。 このため MDS, MON の通信に影響を与えないよう、OSD レプリケーション・ハートビー トのためのネットワークを別に設けるのがベストプラクティスな構成の様です。このネッ トワークのことをクラスターネットワークと Ceph 的に言うそうです。 こんな接続になります。 +------+ |Client| +------+ | +-------+-------+-------+-------+------ public network | | | | | +-----+ +-----+ +-----+ +-----+ +-----+ | MON | | MDS | | OSD | | OSD | | OSD | +-----+ +-----+ +-----+ +-----+ +-----+ | | | ----------------+-------+-------+------ cluster network 上図の様に MON, MDS は public ネットワークを介し OSD のレプリケーション・ハー トビートのみ cluster ネットワークを介します。Client と MDS との通信に影響を与 えない構成になります。 ...

OpenStack + Ceph 連携

こんにちは。最近 OpenStack の導入に向けて保守性や可用性について調査している @jedipunkz です。 OpenStack は MySQL のダンプや OS イメージ・スナップショットのバックアップをとっ ておけばコントローラの復旧も出来ますし、Grizzly 版の Quantum では冗長や分散が 取れるので障害時に耐えられます。また Quantum の復旧は手動もで可能です。最後の 悩みだった Cinder の接続先ストレージですが、OpenStack のスタンスとしては高価な ストレージの機能を使ってバックアップ取るか、Ceph, SheepDog のようなオープンソー スを使うか、でした。で、今回は Ceph を OpenStack に連携させようと思いました。 この作業により Cinder の接続先ストレージが Ceph になるのと Glance の OS イメー ジ・スナップショットの保管先が Ceph になります。 下記の参考資料が完成度高く、ほぼ内容はそのままです。若干付け足していますが。 参考資料 http://ceph.com/docs/master/rbd/rbd-openstack/ 前提の構成 +-------------+-------------+--------------------------------------------- Public/API Network | | | +-----------+ +-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | | | | |vm|vm|.. | | | | | | | | controller| | network | +-----------+ | ceph01 | | ceph01 | | ceph01 | | | | | | compute | | | | | | | | | | | | | | | | | | | +-----------+ +-----------+ +-----------+ +-----------+ +-----------+ +-----------+ | | | | | | | | +-------------+-----)-------+-----)-------+-------------+-------------+-- Management/API Network | | +-------------+-----------------------------------+-- Data Network Ceph は OpenStack の Management Network 上に配置 Ceph は3台構成 (何台でも可) OpenStack も3台構成 (何台でも可) 連携処理するのは controller, compute ノード では早速手順ですが、OpenStack と Ceph の構築手順は割愛します。私の他の記事を参 考にしていただければと思います。 ...

Chef Cookbook でユーザ・グループ追加

こんにちは。@jedipunkz です。 今回は Opscode Chef でユーザ・グループを作成する方法をまとめます。 ‘users’ Cookbook を使います。 % cd ${YOUR_CHEF_REPO} % ${EDITOR} Berksfile cookbook 'users' % berks install --path ./cookbooks data_bag を使ってユーザ・グループの管理をしたいので管理ディレクトリを作成しま す。 % mkdir -p data_bags/users data_bags/users/jedipunkz.json ファイルを作成します。必要に応じて内容を書き換えてください。 { "id": "jedipunkz", "ssh_keys": "ssh-rsa AAAABx92tstses jedipunkz@somewhere", "groups": [ "sysadmin", "sudo" ], "uid": 2001, "shell": "\/usr\/bin\/zsh", "comment": "jedipunkz sysadmin", "password": "$1$s%H8BMHlB$7s3h30y9IB1SklftZXYhvssJ" } json ファイルの説明です。 id : ユーザ名 ssh_keys : SSH 公開鍵 groups : 所属させるグループ uid : unix id sheell : ログインシェル comment : コメント passwd : ハッシュ化したパスワード 特にハッシュ化したパスワードは下記のコマンドで生成出来ます。 ...

Ceph-Deploy で Ceph 分散ストレージ構築

今回は ceph-deploy というツールを使って Ceph ストレージを簡単に構築することが 出来るので紹介します。Ceph は分散ストレージでオブジェクトストレージとしてもブ ロックストレージとしても動作します。今回の構築ではブロックストレージとしてのみ の動作です。 Ceph が公開しているのが ceph-deploy なわけですが、マニュアル操作に代わる構築方 法として公開しているようです。その他にも Chef Cookbook も公開されているようで す。 それでは早速。 今回の構成 +--------+ +--------+ +--------+ | ceph01 | | ceph02 | | ceph03 | | osd | | osd | | osd | | mon | | mon | | mon | | mds | | mds | | mds | +--------+ +--------+ +--------+ | 10.0.0.1 | 10.0.0.2 | 10.0.0.3 | | | +----------+----------+ | | 10.0.0.10 +-------------+ | workstation | +-------------+ 特徴は ...

Quantum Network ノードの分散・冗長

こんにちは。Grizzly がリリースされてから暫く経ちました。今回は Folsom リリース まであった Quantum ノードのボトルネックと単一障害点を解決する新しい機能につい て評価した結果をお伝えします。 Folsom までは Quantum L3-agent が落ちると、その OpenStack 一式の上にある仮想マシン全ての通 信が途絶える Quantum L3-agent に仮想マシンの全てのトラフィックが集まりボトルネックとなる。 という問題がありました。Folsom リリース時代にもし僕が職場で OpenStack を導入す るのであればこれらを理由に nova-network を選択していたかもしれません。 nova-network は compute ノードが落ちればその上の仮想マシンも同時に落ちるが、他 の compute ノード上の仮想マシンの通信には影響を与えないからです。もちろん仮想 ルータ・仮想ネットワークの生成等を API でユーザに提供したいなどの要望があれば Quantum を選択するしかありませんが。これに対して Grizzly リリースの Quantum は 改善に向けて大きな機能を提供してくれています。L3-agent, DHCP-agent の分散・冗 長機能です。 下記の構成が想定出来ます。ここでは Network ノードを2台用意しました。それ以上の 台数に増やすことも出来ます。 +-------------+-------------+-------------------------- Public/API Network | | | +-----------+ +-----------+ +-----------+ +-----------+ | | | | | | |vm|vm|.. | | controller| | network | | network | +-----------+ | | | | | | | compute | +-----------+ +-----------+ +-----------+ +-----------+ | | | | | | | +-------------+-----)-------+-----)-------+-----)------ Management/API Network | | | +-------------+-------------+------ Data Network L3-agent の分散は仮想ルータ単位で行います。それに対し DHCP-agent は仮想 ネットワーク単位で行います。 ...

Chef for OpenStack

以前にも話題にしたことがある Chef For OpenStack ですが今週新しい情報が入って来 ました。#ChefConf 2013 というイベントがあったのですがここで Opscode の Matt Ray さんらが集まり OpenStack を Chef で構築する ‘Chef for OpenStack’ について 語られた模様です。その時の資料が SlideShare に上がっていたので見てみました。 Chef for OpenStack: Grizzly Roadmap from Matt Ray 気にあった点を幾つか挙げていきます。 https://github.com/osops で管理される 各コンポーネントの cookbook の名前には ‘-cookbook’ を最後に付ける quantum, cinder, ceilometer, heat 等、比較的新しいコンポーネントも加わる gerrit でコードレビューされ CI も提供される Chef11 が用いられる Ruby 1.9.x に対応した chef-client が用いられる Foodcritic で可能な限りテストされる chef-solo はサポートされない 5月に ‘2013.1.0’ がリリースされる (openstack 2013.1 対応と思われる) chef-repo の形で提供される Ubuntu 12.04 が前提 HyperVisor は KVM, LXC がサポートされる 以上です。恐らく chef-repo で提供されるということは spiceweasel を使った構成構 築が出来るような形になるでしょう。楽しみです。またコントリビュートする方法も掲 載されているので興味が有る方は協力してみるのも楽しいかもしれません。 ...

OpenStack Grizzy で非 Virtio OS 稼働

こんにちは jedipunkz です。 Virtio に対応していない OS を OpenStack で稼働させることが今まで出来なかったの ですが Grizzly から非 Virtio な OS イメージが扱えるようになった。今まで NetBSD やら古い FreeBSD やら virtio ドライバを OS イメージに入れることに苦労していたの だけど、これで問題無くなった。 最初、この機能のこと調べるのに「どうせ libvirt が生成する xml を書き換えるのだ から nova 周りの設定なんだろうー」と思っていたら全く方法が見つからず…。結局 OS イメージを格納している Glance の設定にありました。 ここでは FreeBSD7.4 Release を例に挙げて説明していきます。 前提とする環境 OpenStack Grizzly が稼働していること ホスト OS に Ubuntu 12.04.2 LTS が稼働していること ゲスト OS に FreeBSD 7.4 Release を用いる とします。OS のバージョンはホスト・ゲスト共に、上記以外でも構いません。Grizzly さえ動いていれば OK です。 OS イメージ作成 KVM で OS イメージを作成します。もちろん virtio なインターフェースは指定せず ...