fbpx

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へのデータ移行は完了です。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA