Chefは、インフラストラクチャをコードとして定義するために使用されるRubyベースの構成管理ツールです。これにより、ユーザーは多くのノードの管理を自動化し、それらのノード間の一貫性を維持できます。レシピは、管理対象ノードの望ましい状態を宣言し、ChefWorkstationパッケージを使用してユーザーのワークステーションで作成されます。レシピは、Chefサーバーを介してノード間で配布されます。各ノードにインストールされているChefクライアントは、対応するノードへのレシピの適用を担当します。このガイドでは、ChefServerとChefWorkstationをインストールおよび構成する方法について説明します。また、Chefで管理するノードをブートストラップします。
このチュートリアルでは、次のことを学びます。
- Chefサーバーのインストールと構成
- Chefユーザーと組織を作成する
- Chefワークステーションのインストールと構成
- ナイフの構成とクライアントノードのブートストラップ
<中央>
シェフの建築。
使用されるソフトウェア要件と規則
カテゴリ | 使用する要件、規則、またはソフトウェアバージョン |
---|---|
Ubuntu Linux 18.04 | |
Chefサーバーコア、Chefワークステーション、Chefクライアント、Chef開発キット | |
rootまたはsudo を介したLinuxシステムへの特権アクセス コマンド。 | |
# –指定されたLinuxコマンドは、rootユーザーとして直接、またはsudo を使用して、root権限で実行する必要があります。 コマンド$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります |
Chefサーバーのインストールと構成
Chefサーバーは、Chefの管理下にあるすべてのワークステーションとノード間の相互作用のハブです。ワークステーションで構成コードに加えられた変更はChefサーバーにプッシュされ、ノードのchef-clientによってプルされて構成が適用されます。
以下のコマンドを実行して、最新のChefサーバーをダウンロードします。
# wget https://packages.chef.io/files/stable/chef-server/12.18.14/ubuntu/18.04/chef-server-core_12.18.14-1_amd64.deb
次に、次のコマンドでサーバーパッケージをインストールします。
# dpkg -i chef-server-core_*.deb
Chefサーバーには、chef-server-ctlというコマンドラインユーティリティが含まれています。 chef-server-ctlを実行して、Chefサーバーサービスを開始します。
# chef-server-ctl reconfigure
chefサーバーが正常に構成されると、以下のメッセージが表示され、chefサーバーの実行ステータスも確認されます。
Chef Client finished, 493/1100 resources updated in 12 minutes 02 seconds Chef Server Reconfigured!
root@ubuntubox1:~# chef-server-ctl status run: bookshelf: (pid 1435) 6644s; run: log: (pid 1440) 6644s run: nginx: (pid 1235) 6653s; run: log: (pid 1744) 6631s run: oc_bifrost: (pid 1196) 6657s; run: log: (pid 1203) 6657s run: oc_id: (pid 1220) 6655s; run: log: (pid 1227) 6655s run: opscode-erchef: (pid 4376) 6432s; run: log: (pid 1508) 6644s run: opscode-expander: (pid 1335) 6648s; run: log: (pid 1431) 6646s run: opscode-solr4: (pid 1244) 6650s; run: log: (pid 1285) 6649s run: postgresql: (pid 1176) 6659s; run: log: (pid 1180) 6659s run: rabbitmq: (pid 4188) 6443s; run: log: (pid 1748) 6631s run: redis_lb: (pid 27397) 6931s; run: log: (pid 1735) 6632s root@ubuntubox1:~#
Chefユーザーと組織を作成する
ワークステーションとノードをChefサーバーにリンクするには、RSA秘密鍵が関連付けられた管理者と組織を作成します。
ホームディレクトリから、鍵を格納する.chefディレクトリを作成します。
# mkdir .chef
chef-server-ctlを使用してユーザーを作成します。この例では、必要に応じて、USER_NAME、FIRST_NAME、LAST_NAME、EMAIL、およびPASSWORDを変更します。 USER_NAME.pemを調整し、.pem拡張子を残します。
chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pem
root@ubuntubox1:~# chef-server-ctl user-create chefadmin Chef Administrator chefadmin@@ubuntubox1.com '*******' --filename ~/.chef/chefadmin.pem
Chefサーバー上のすべてのユーザーのリストを表示するには、次のコマンドを発行します。
root@ubuntubox1:~# chef-server-ctl user-list chefadmin pivotal
組織を作成し、前の手順で作成したユーザーを追加します。 ORG_NAMEを組織の短い識別子に、ORG_FULL_NAMEを組織の完全な名前に、USER_NAMEを上記の手順で作成したユーザー名に、ORG_NAME.pemを組織の短い識別子の後に.pemに置き換えます。
chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pem
root@ubuntubox1:~# chef-server-ctl org-create chef-on-ubuntu "Chef Infrastructure on Ubuntu 18.04" --association_user chefadmin --filename ~/.chef/chef-on-ubuntu.pem
Chefサーバー上のすべての組織のリストを表示するには、次のコマンドを使用します。
root@ubuntubox1:~# chef-server-ctl org-list chef-on-ubuntu
Chefサーバーがインストールされ、RSAキーが生成されたら、Chefワークステーションの構成を開始します。ワークステーションは、ノードのすべての主要な構成が作成される場所です。
Chefワークステーションのインストールと構成
Chefワークステーションは、ノードの管理に必要なレシピ、クックブック、属性、およびその他の変更を作成および構成する場所です。これは任意のOSを実行するローカルマシンにすることができますが、リモートサーバーをワークステーションとして保持し、どこからでもアクセスできるようにすることにはいくつかの利点があります。
このセクションでは、Chefワークステーションパッケージをダウンロードしてインストールします。このパッケージには、Chefの開発キットであるChefDKに含まれているすべてのツールが含まれています。
最新のChefワークステーションをダウンロードする:
root@ubuntubox2:~# wget https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb --2019-06-03 13:35:51-- https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb Resolving packages.chef.io (packages.chef.io)... 151.101.142.110 Connecting to packages.chef.io (packages.chef.io)|151.101.142.110|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 129713682 (124M) [application/x-debian-package] Saving to: ‘chef-workstation_0.2.43-1_amd64.deb’ chef-workstation_0.2.43-1_amd64.deb 100%[=====================================================================================>] 123.70M 1.51MB/s in 80s 2019-06-03 13:37:17 (1.55 MB/s) - ‘chef-workstation_0.2.43-1_amd64.deb’ saved [129713682/129713682]
Chefワークステーションのインストール:
root@ubuntubox2:~# dpkg -i chef-workstation_*.deb Selecting previously unselected package chef-workstation. (Reading database ... 117468 files and directories currently installed.) Preparing to unpack chef-workstation_0.2.43-1_amd64.deb ... Unpacking chef-workstation (0.2.43-1) ... Setting up chef-workstation (0.2.43-1) ... To run the experimental Chef Workstation App, use your platform's package manager to install these dependencies: libgconf-2.so.4 => not found You can then launch the App by running 'chef-workstation-app'. The App will then be available in the system tray. Thank you for installing Chef Workstation! You can find some tips on getting started at https://chef.sh/
次に、Chefリポジトリを作成する必要があります。 chef-repoディレクトリには、Chefクックブックやその他の関連ファイルが保存されます。
# chef generate repo chef-repo
.chefサブディレクトリを作成します。 .chefサブディレクトリには、ChefサーバーとのRSAキーペア認証に使用されるKnife構成ファイルと.pemファイルが格納されます。 chef-repoディレクトリに移動します:
root@ubuntubox2:~# mkdir ~/chef-repo/.chef root@ubuntubox2:~# cd chef-repo root@ubuntubox2:~/chef-repo#
Chefサーバーとワークステーションおよび/またはノード間の認証は、公開鍵暗号化を使用して完了します。これにより、Chefサーバーは信頼できるマシンとのみ通信するようになります。このセクションでは、Chefサーバーのセットアップ時に生成されたRSA秘密鍵をワークステーションにコピーして、Chefサーバーとワークステーション間の通信を可能にします。
ワークステーションサーバーでRSAキーペアを生成します。このキーペアは、Chefサーバーにアクセスし、.pemファイルを転送するために使用されます。
root@ubuntubox2:~# ssh-keygen -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:sR+Nloq6vsc7rX4ZmMInP3SKdk4fYEJH1iLoKNm1YMg [email protected] The key's randomart image is: +---[RSA 4096]----+ |.. . o. | |.E+ oo. . | | * o.o... | |+ o... o + | |. .. ooS = . | | +o=oo+ . | | Oo+oo. | | ooO.+. | | o=B=*. | +----[SHA256]-----+ root@ubuntubox2:~#
ワークステーションノードの公開鍵をChefサーバーノードにアップロードします。
root@ubuntubox2:~# ssh-copy-id [email protected] /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added. root@ubuntubox2:~#
scpコマンドを使用して、.pemファイルをChefサーバーからワークステーションにコピーします。
root@ubuntubox2:~# scp [email protected]:~/.chef/*.pem ~/chef-repo/.chef/ chefadmin.pem 100% 1674 27.9KB/s 00:00 chef-on-ubuntu.pem 100% 1674 496.8KB/s 00:00
.chefディレクトリの内容を一覧表示して、ファイルが正常にコピーされたことを確認します。 .pemファイルがリストされている必要があります。
root@ubuntubox2:~# ls ~/chef-repo/.chef chefadmin.pem chef-on-ubuntu.pem
新しいChefクックブックを生成します:
root@ubuntubox2:~# chef generate cookbook chef-first-cookbook Hyphens are discouraged in cookbook names as they may cause problems with custom resources. See https://docs.chef.io/ctl_chef.html#chef-generate-cookbook for more information. Generating cookbook chef-first-cookbook - Ensuring correct cookbook file content - Ensuring delivery configuration - Ensuring correct delivery build cookbook content Your cookbook is ready. Type `cd chef-first-cookbook` to enter it. There are several commands you can run to get started locally developing and testing your cookbook. Type `delivery local --help` to see a full list. Why not start by writing a test? Tests for the default recipe are stored at: test/integration/default/default_test.rb If you'd prefer to dive right in, the default recipe can be found at: recipes/default.rb
chef-repoを生成し、新しく作成されたディレクトリに移動します:
# chef generate app chef-repo # cd chef-repo
ナイフの構成とクライアントノードのブートストラップ
〜/ chef-repo / .chefディレクトリに移動し、好みのテキストエディタを使用してconfig.rbという名前のファイルを作成して、knife構成ファイルを作成します。
次の構成をconfig.rbファイルにコピーします。
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name 'node_name'
client_key "USER.pem"
validation_client_name 'ORG_NAME-validator'
validation_key "ORGANIZATION-validator.pem"
chef_server_url 'https://ubuntubox1.com/organizations/ORG_NAME'
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
node_nameの値は、Chefサーバーで作成されたユーザー名である必要があります。
client_keyの下のUSER.pemを変更して、chefユーザーの.pemファイルを反映します。
validation_client_nameは、組織のORG_NAMEの後に-が続く必要があります。 validator。
valid_keyパスのORGANIZATION-validator.pemは、ORG_NAMEの後に-validator.pemを設定する必要があります。
最後に、chef_server_urlは、/ Organizations/ORG_NAMEが追加されたChefサーバーのドメインである必要があります。必ずORG_NAMEを組織の名前に置き換えてください。
chef-repoディレクトリに移動し、必要なSSL証明書をサーバーからコピーします。
root@ubuntubox2:~/chef-repo/.chef# cd .. root@ubuntubox2:~/chef-repo# knife ssl fetch WARNING: Certificates from ubuntubox1.com will be fetched and placed in your trusted_cert directory (/root/chef-repo/.chef/trusted_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading. Adding certificate for ubuntubox1_com in /root/chef-repo/.chef/trusted_certs/ubuntubox1_com.crt
クライアントリストを実行して、config.rbが正しく設定されていることを確認します。このコマンドはバリデーター名を出力する必要があります。
root@ubuntubox2:~/chef-repo# knife client list chef-on-ubuntu-validator
ノードをブートストラップすると、Chefクライアントがノードにインストールされ、ノードが検証されます。これにより、ノードはChefサーバーから読み取り、chef-clientによって検出された必要な構成更新をプルダウンして適用できます。
ワークステーションから、〜/ chef-repo/.chefディレクトリに移動します。
# cd ~/chef-repo/.chef
クライアントノードのrootユーザー、または昇格された権限を持つユーザーのいずれかを使用して、クライアントノードをブートストラップします。
root@ubuntubox2:~/chef-repo/.chef# knife bootstrap ubuntubox3.com -x root -P ******* --node-name chef-client-node Creating new client for chef-client-node Creating new node for chef-client-node Connecting to ubuntubox3.com ubuntubox3.com -----> Installing Chef Omnibus (-v 14) ubuntubox3.com downloading https://omnitruck-direct.chef.io/chef/install.sh ubuntubox3.com to file /tmp/install.sh.2019/install.sh ubuntubox3.com trying wget... ubuntubox3.com ubuntu 18.04 x86_64 ubuntubox3.com Getting information for chef stable 14 for ubuntu... ubuntubox3.com downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=14&p=ubuntu&pv=18.04&m=x86_64 ubuntubox3.com to file /tmp/install.sh.2023/metadata.txt ubuntubox3.com trying wget... ubuntubox3.com sha1 ed9b1fcdaf947d9a3d60e6d196308183a082bcff ubuntubox3.com sha256 9ddcd5ceef19c95ecc1f34bef080c23d9cb42ae8ebc69fd41dcf1c768a6a708f ubuntubox3.com url https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb ubuntubox3.com version 14.13.11 ubuntubox3.com downloaded metadata file looks valid... ubuntubox3.com downloading https://packages.chef.io/files/stable/chef/14.13.11/ubuntu/18.04/chef_14.13.11-1_amd64.deb ubuntubox3.com to file /tmp/install.sh.2023/chef_14.13.11-1_amd64.deb ubuntubox3.com trying wget... ubuntubox3.com Comparing checksum with sha256sum... ubuntubox3.com Installing chef 14 ubuntubox3.com installing with dpkg... ubuntubox3.com Selecting previously unselected package chef. (Reading database ... 117468 files and directories currently installed.) ubuntubox3.com Preparing to unpack .../chef_14.13.11-1_amd64.deb ... ubuntubox3.com Unpacking chef (14.13.11-1) ... ubuntubox3.com Setting up chef (14.13.11-1) ... ubuntubox3.com Thank you for installing Chef Infra Client! For help getting started visit https://learn.chef.io ubuntubox3.com Starting the first Chef Client run... ubuntubox3.com Starting Chef Client, version 14.13.11 ubuntubox3.com resolving cookbooks for run list: [] ubuntubox3.com Synchronizing Cookbooks: ubuntubox3.com Installing Cookbook Gems: ubuntubox3.com Compiling Cookbooks... ubuntubox3.com [2019-06-03T14:01:44+04:00] WARN: Node chef-client-node has an empty run list. ubuntubox3.com Converging 0 resources ubuntubox3.com ubuntubox3.com Running handlers: ubuntubox3.com Running handlers complete ubuntubox3.com Chef Client finished, 0/0 resources updated in 05 seconds Confirm that the node has been bootstrapped by listing the client nodes: root@ubuntubox2:~/chef-repo/.chef#
ノードを一覧表示して、ノードが正常にブートストラップされたことを確認します。
root@ubuntubox2:~/chef-repo/.chef# knife node list chef-client-node root@ubuntubox2:~/chef-repo/.chef# knife node show chef-client-node Node Name: chef-client-node Environment: _default FQDN: ubuntubox3.com IP: 192.168.1.107 Run List: Roles: Recipes: Platform: ubuntu 18.04 Tags:
結論
この詳細な記事では、Chef構成管理ツールについて、その基本的な理解と、インストールおよび構成設定を含むコンポーネントの概要について学習しました。 Chefの詳細については、ChefのWebサイト(https://www.chef.io/
)にアクセスしてください。