- 公開日:2016年01月23日
- 最終更新日:2016年01月26日
記事概要
ずっと放置していたchefの移行作業の詳細記事です。
動画で実際の動きも確認できます。
環境
- ruby
- rbenv
- mysql
- vagrant centos6.5
はじめに
chef-soloが非推奨になってから1年くらい経過しました。
rubyを最新のバージョンにするついでにchefの調査をしたところ、そろそろ仕様的にも落ち着いてきているようなのでchef-clientのLocal modeに移行することにしました。
chef-soloはあくまでchefを利用するとっかかりにすぎないと言われています(その割に思い出すのも嫌になるくらい苦戦しましたけど)。 今回移行するWEBアプリの環境は小中規模。なので、chefのLocal modeで動作させるよう修正することにしました。
chef Local modeについて
あたかもChef server上で動いているかのように、ローカルマシン上のchef-repoに対してchef-clientを動かす方法です。
Local modeは、chef-zeroに依存します。chef-zeroは、Chef serverのとても軽量なインスタンスとして動きます。
つまり、ローカルのNodeを管理するだけならLocal modeで十分といえると思います。
移行の手順
しばらくchefの操作から離れていたので、以下のようにステップを踏んでいきます。
- 新しい開発環境を用意してchefをinstall
- 新しい開発環境で既存のBerkshelfを利用してサーバーを構築
- 更新、削除、追加の動作を確認
- 既存chef-soloをLocal modeに変更
- 既存環境のchefを、最新のchefに入れかえる
- 本番に適用
結構手間はかかりますが、仕方ないですね。技術的負債をこれ以上ためるわけにはいきません。
なおこの記事は、chef-soloを多少なりとも利用したことがある前提となっています。
では、はじめていきましょう。
chefのインストール
vagrantでcentos65を起動します。
初期状態のcentos65を利用して学習していきます。
vagrant up // wget導入 sudo yum install wget
chefをinstallします
// chefdk rpmを取得 wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.10.0-1.el6.x86_64.rpm // chefdk rpm install sudo rpm -Uvh chefdk-0.10.0-1.el6.x86_64.rpm // install確認 chef -v Chef Development Kit Version: 0.10.0 chef-client version: 12.5.1 berks version: 4.0.1 kitchen version: 1.4.2
レポジトリを作成します
cd {project_folder} // レポジトリの作成 chef generate repo chef-repo
準備は完了です、次にBerksfileを利用してミドルウェアを導入していきます。
Berksfileの導入
まずはBerksfileから動作を確認します。既存のBerksfileをchef-repo配下に配置します。
cd {project_folder}/chef-repo // create Berksfile touch Berksfile source "https://api.berkshelf.com" cookbook 'yum' cookbook 'ruby_build' cookbook 'ruby_rbenv' cookbook 'mysql', '~> 5.6.1' // 実行 berks vendor cookbooks /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/httpclient-2.6.0.1/lib/httpclient/webagent-cookie.rb:458: warning: already initialized constant HTTPClient::CookieManager /opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/httpclient-2.6.0.1/lib/httpclient/cookie.rb:8: warning: previous definition of CookieManager was here Resolving cookbook dependencies... Fetching 'ruby_rbenv' from git://github.com/fnichol/chef-rbenv.git (at master) Fetching cookbook index from https://api.berkshelf.com... Installing apt (2.9.2) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Installing java (1.39.0) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Installing mysql (5.6.3) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Installing ruby_build (0.8.0) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Using ruby_rbenv (1.0.1) from git://github.com/fnichol/chef-rbenv.git (at master) Installing yum (3.9.0) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Installing yum-mysql-community (0.1.21) from https://api.berkshelf.com ([opscode] https://supermarket.chef.io:443/api/v1) Vendoring apt (2.9.2) to cookbooks/apt Vendoring java (1.39.0) to cookbooks/java Vendoring mysql (5.6.3) to cookbooks/mysql Vendoring ruby_build (0.8.0) to cookbooks/ruby_build Vendoring ruby_rbenv (1.0.1) to cookbooks/ruby_rbenv Vendoring yum (3.9.0) to cookbooks/yum Vendoring yum-mysql-community (0.1.21) to cookbooks/yum-mysql-community
cookbooksフォルダが作成され、フォルダ内に各種レシピがインストールされています。
cd {project_folder}/chef-repo/cookbooks ls -l total 20 drwxrwxr-x 6 vagrant vagrant 4096 Jan 20 07:20 mysql drwxrwxr-x 7 vagrant vagrant 4096 Jan 20 07:20 ruby_build drwxrwxr-x 8 vagrant vagrant 4096 Jan 20 07:20 ruby_rbenv drwxrwxr-x 8 vagrant vagrant 4096 Jan 20 07:20 yum drwxrwxr-x 5 vagrant vagrant 4096 Jan 20 07:20 yum-mysql-community
roles/***.jsonを作成します。
cd {project_folder}/chef-repo/roles // webアプリの構成を設定するjson touch web.json { "name":"web", "chef_type": "role", "json_class":"Chef::Role", "description":"web server role", "run_list": [ "recipe[yum]", "recipe[ruby_build]", "recipe[ruby_rbenv::system_install]", "recipe[mysql::server]" ], "default_attributes": { "ruby_build": { "upgrade": "sync" }, "mysql": { "version":"5.6", "port":"3306", "server_root_password":"mysql56", "remove_anonymous_users":false, "remove_test_database":false } } }
nodes/xxx.xxx.xxx.xxx.jsonを作成します。
cd {project_folder}/chef-repo/nodes touch 192.168.33.10.json { "run_list": [ "role[web]" ], "automatic": { "ipaddress": "192.168.33.10" } }
以上で準備完了です。
chefをLocal modeで実行
以下のコマンドを実行します。当然、実行はrootで行います。
// rootになる su - cd {project_folder}/chef-repo // Local modeで実行 chef-client -z -j nodes/192.168.33.23.json
上記を実行すると、正常に処理が終了するはずです。
試しにmysqlのバージョンを確認してみましょう。
mysql --version mysql Ver 14.14 Distrib 5.6.28, for Linux (x86_64) using EditLine wrapper
正常にmysqlがinstallされています。
まとめ
Berksfileを使った実行の場合、ほとんどchef-soloとやり方が変わりませんでした。
ただし、cookbookのrbenvが大きく変わっていて苦戦したので、次回はrbenvのcookbookについて理解したことをまとめたいと思います。
以上
動画
How to use chef Tutorial 1
参考サイト
0 件のコメント:
コメントを投稿