Chef 10 ServerからChef 11 Serverへのデータ移行 (knife-backup) #opschef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Chef 10 ServerからChef 11 Serverへのデータ移行 (knife-backup)
Chef 11 ServerはChef 10 Serverから内部構造が大幅に変更されており(The Making of Erchef, the Chef 11 Server)、パフォーマンスの大幅な向上がうたわれています。その一方で、多様な変更により(What’s New in Chef 11)、簡単に移行ができません。にも関わらず、移行手順が整備されていないように思えます。
本稿では、knife-backup (github: knife-backup) を用いた移行手順である HowTo Migrate to Chef 11 を実際に行ってみます。
なお、この他には Knife Hacks を用いた移行手順もあるようです。
前提条件
本稿で移行手順を行うコンピュータ群は以下の通りです。すべて Ubuntu 12.04 LTS です。
なお、Chef 10 Server のコンピュータをそのままChef 11 Serverにアップグレードするのではなく、まったく別のコンピュータに新しくChef 11 Serverをインストールしたほうが安全です。
- 192.168.122.40 (chef10.example.jp, Chef 10 Server, 移行元)
- 192.168.122.50 (chef11.example.jp, Chef 11 Server, 移行先)
- 192.168.122.60 (workstation.example.jp, ワークステーション)
- 192.168.122.70 (node.example.jp, ノード)
knife-backupのインストール
ワークステーションにknife-backupをインストールします。
これにより、knifeにサブコマンドbackupが追加されます。
ubuntu@workstation:~$ sudo /opt/chef/embedded/bin/gem install knife-backup --no-rdoc --no-ri Fetching: knife-backup-0.0.4.gem (100%) Successfully installed knife-backup-0.0.4 1 gem installed ubuntu@workstation:~$
ubuntu@workstation:~$ knife : Available subcommands: (for details, knife SUB-COMMAND --help) ** BACKUP COMMANDS ** knife backup restore [-D DIR] knife backup export [-D DIR] : ubuntu@workstation:~$
データのバックアップ
knife backup exportでChef 10 Serverからワークステーションへデータの取得を行います。取得されるデータは以下の通りです。
cookbookはヴァージョンごとに取得され、他のデータはJSON形式で取得されます。
- client
- node
- role
- environment
- data bag
- cookbook
ubuntu@workstation:~/chef-repo$ knife backup export Backing up clients Backing up clients ubuntu Backing up clients ws-mig : Backing up nodes Backing up nodes ubuntu Backing up nodes workstation : Backing up roles Backing up roles nova-scheduler Backing up roles nova-vncproxy : Backing up data bags Backing up data bag cl-reverse-proxy item access Backing up data bag cl-reverse-proxy item backend : Backing up environments Backing up environments cloudstack-40 Backing up environments cloudstack-30 : Backing up cookboks Backing up coookbook apache2 Downloading apache2 cookbook version 1.2.0 Downloading resources Downloading providers Downloading recipes Downloading definitions Downloading libraries Downloading attributes Downloading files Downloading templates Downloading root_files Cookbook downloaded to .chef/chef_server_backup/cookbooks/apache2-1.2.0 : ubuntu@workstation:~/chef-repo$
ubuntu@workstation:~/chef-repo$ ls -l .chef/chef_server_backup/ 合計 24 drwxrwxr-x 2 ubuntu ubuntu 4096 4月 8 17:38 clients drwxrwxr-x 54 ubuntu ubuntu 4096 4月 8 17:39 cookbooks drwxrwxr-x 5 ubuntu ubuntu 4096 4月 8 17:39 data_bags drwxrwxr-x 2 ubuntu ubuntu 4096 4月 8 17:39 environments drwxrwxr-x 2 ubuntu ubuntu 4096 4月 8 17:38 nodes drwxrwxr-x 2 ubuntu ubuntu 4096 4月 8 17:39 roles ubuntu@workstation:~/chef-repo$
Chef 11 Serverの準備
Chef 11 Serverをインストールします。
ubuntu@chef11:~$ sudo dpkg -i chef-server_11.0.6-1.ubuntu.12.04_amd64.deb [sudo] password for ubuntu: 以前に未選択のパッケージ chef-server を選択しています。 (データベースを読み込んでいます ... 現在 99856 個のファイルとディレクトリがインストールされています。) (chef-server_11.0.6-1.ubuntu.12.04_amd64.deb から) chef-server を展開しています... chef-server (11.0.6-1.ubuntu.12.04) を設定しています ... Thank you for installing Chef Server! The next step in the install process is to run: sudo chef-server-ctl reconfigure ubuntu@chef11:~$
ubuntu@chef11:~$ sudo chef-server-ctl reconfigure : Chef Client finished, 268 resources updated chef-server Reconfigured! ubuntu@chef11:~$
ubuntu@chef11:~$ sudo chef-server-ctl test : Finished in 41.3 seconds 70 examples, 0 failures ubuntu@chef11:~$
移行用クライアントの作成
データ移行用のクライアントをワークステーションで作成します。
この際、バックアップしたクライアントと名前がかぶらないように注意してください。
ここでは migrator11 というクライアントを作成します。
以前のpemファイルは利用できなくなっているので、改めて取得しておきます。
また、後々Chef 10 Serverに接続する用があるので、chef-repoディレクトリをコピーしておきます。
ubuntu@workstation:~$ cp -a chef-repo chef-repo10 ubuntu@workstation:~$ ubuntu@workstation:~/chef-repo$ mv .chef/knife.rb .chef/knife.rb.orig ubuntu@workstation:~/chef-repo$ mv .chef/validation.pem .chef/validation.pem.orig ubuntu@workstation:~/chef-repo$ mv .chef/webui.pem .chef/webui.pem.orig ubuntu@workstation:~/chef-repo$ ubuntu@workstation:~/chef-repo$ scp ubuntu@192.168.122.50:/etc/chef-server/chef-*pem .chef/ ubuntu@192.168.122.50's password: chef-validator.pem 100% 1675 1.6KB/s 00:00 chef-webui.pem 100% 1679 1.6KB/s 00:00 ubuntu@workstation:~/chef-repo$ ubuntu@workstation:~/chef-repo$ knife configure -i WARNING: No knife configuration file found Where should I put the config file? [/home/ubuntu/chef-repo/.chef/knife.rb] Please enter the chef server URL: [http://workstation.example.jp:4000]
https://192.168.122.50
Please enter a clientname for the new client: [ubuntu]
migrator11
Please enter the existing admin clientname: [chef-webui] Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem]
/home/ubuntu/chef-repo/.chef/chef-webui.pem
Please enter the validation clientname: [chef-validator] Please enter the location of the validation key: [/etc/chef/validation.pem]
/home/ubuntu/chef-repo/.chef/chef-validator.pem
Please enter the path to a chef repository (or leave blank): Creating initial API user... Created client[migrator11] Configuration file written to /home/ubuntu/chef-repo/.chef/knife.rb ubuntu@workstation:~/chef-repo$ ubuntu@workstation:~/chef-repo$ knife client list chef-validator chef-webui migrator11 ubuntu@workstation:~/chef-repo$
データのリストア
knife backup restoreでワークステーションからChef 11 Serverへデータの投入を行います。
ubuntu@workstation:~/chef-repo$ knife backup restore WARNING: This will overwrite existing data! Do you want to restore backup, possibly overwriting exisitng data? (Y/N) y === Restoring clients === WARNING: client[chef-webui] already exists; skipping WARNING: client[chef-validator] already exists; skipping === Restoring nodes === Restoring nodes from .chef/chef_server_backup/nodes/db-m.example.jp.json Restoring nodes from .chef/chef_server_backup/nodes/db-s.example.jp.json : === Restoring roles === Restoring roles from .chef/chef_server_backup/roles/mysql-master.json Restoring roles from .chef/chef_server_backup/roles/glance-api.json : === Restoring data bags === Restoring data_bag[cl-reverse-proxy] Restoring data_bag_item[cl-reverse-proxy::access] Restoring data_bag_item[cl-reverse-proxy::backend] : === Restoring environments === Restoring environments from .chef/chef_server_backup/environments/cloudstack-30.json Restoring environments from .chef/chef_server_backup/environments/cloudstack-22.json : === Restoring cookbooks === Restoring cookbook ["build-essential"] Uploading build-essential [1.1.2] Uploaded 1 cookbook. : : : Restoring cookbook ["ohai"] Uploading ohai [1.1.2] Uploaded 1 cookbook. ubuntu@workstation:~/chef-repo$
Chef 11 Serverでインデックスの再構築を行います。
ubuntu@chef11:~$ sudo chef-server-ctl reindex Removing all index entries and reindexing everything... ubuntu@chef11:~$
ノードの設定
Chef 10 ServerではAPI エンドポイントが4000/tcpのHTTP通信によって提供されていましたが、Chef 11 Serverでは443/tcpのHTTPS通信になっています。そのため、chef-clientを用いている各ノードの/etc/chef/client.rbのchef_server_urlを変更する必要があります。
ubuntu@node:~$ grep chef_server_url /etc/chef/client.rb chef_server_url "http://192.168.122.40:4000" ubuntu@node:~$
が、手動で行うのは大変なため、一例として、この行だけを書き換えるCookbookを適用する方法を取ります。
まず、migrate-chef-clientを取得し、default[ 'migrate_chef_client' ][ 'server_url' ] をChef 11 Serverを参照するように書き換えてからChef 10 Serverにアップロードします。
ubuntu@workstation:~/chef-repo10$ cp -a migrate-chef-client/attributes/default.rb migrate-chef-client/attributes/default.rb.orig ubuntu@workstation:~/chef-repo10$ vi migrate-chef-client/attributes/default.rb ubuntu@workstation:~/chef-repo10$ diff -u migrate-chef-client/attributes/default.rb.orig migrate-chef-client/attributes/default.rb --- migrate-chef-client/attributes/default.rb.orig 2013-04-09 15:54:20.850810332 +0900 +++ migrate-chef-client/attributes/default.rb 2013-04-09 16:09:41.914811896 +0900 @@ -13,7 +13,7 @@ default[ 'migrate_chef_client' ][ 'conf_dir' ] = '/etc/chef' end -default[ 'migrate_chef_client' ][ 'server_url' ] = 'https://localhost' +default[ 'migrate_chef_client' ][ 'server_url' ] = 'https://192.168.122.50' # # [EOF] ubuntu@workstation:~/chef-repo10$ ubuntu@workstation:~/chef-repo10$ knife cookbook upload migrate-chef-client Uploading migrate-chef-client [0.1.0] ubuntu@workstation:~/chef-repo10$
次に、Chef 10 Serverにてノードのrun_listにmigrate-chef-client Recipeを追加します。
ubuntu@workstation:~/chef-repo10$ knife node run_list add node.example.jp 'recipe[migrate-chef-client]' run_list: recipe[apache2] recipe[migrate-chef-client] ubuntu@workstation:~/chef-repo10$
これでノードにてchef-clientを実行すると、/etc/chef/client.rbが書き換えられ、参照先がChef 10 ServerからChef 11 Serverに変更されます。
ubuntu@node:~$ grep chef_server_url /etc/chef/client.rb chef_server_url "https://192.168.122.50" ubuntu@node:~$
Chef 11 Server側にはmigrate-chef-client Cookbookは存在していませんが、Chef 11 Server側のノードのrun_listにもmigrate-chef-client Recipeが存在していないため、特に問題は発生しないはずです。
なお、この方法はあくまでも一例です。各運用に沿った手法を採用してください。
以上でChef 10 ServerからChef 11 Serverへのデータ移行は完了です。