ChefサーバーワークステーションをUbuntu18.04にインストールします

[ Chef](http://www.chef.io/)は、「インフラストラクチャモデルをコード形式に変換できる」自動化プラットフォームであり、ユーザーは複数のサーバー(または複数のノード)間でリソースを管理および展開できます。 。 Chef自動化プラットフォームでは、ユーザーが「クックブック」を作成およびダウンロードすることもできます(「クックブック」は「クッキングマニュアル」クックブックに保存されます)

それらの中で)、「レシピ」の役割は、これらのノードのコンテンツと戦略を自動化することです。

Chefは、Chefサーバー、構成する1つ以上のワークステーションサーバー、および各ノードにインストールされたChefクライアントによって管理される多くのノードで構成されます。

![]( /img/3d355bede2e20fe10663ae8172cc8cf5/erkng4g95r.png)シェフのアーキテクチャ図

このガイドでは、Chefサーバー、Linode(VPSサービスプロバイダー)ホスト上の仮想ワークステーションを作成および構成する方法、およびブートノードを介してChefクライアントを実行する方法を紹介します。

このガイドは、root以外のユーザーを対象としています。昇格する必要のあるコマンドにプレフィックス sudoを追加できます。 sudoコマンドに慣れていない場合は、[ユーザーとグループ](https://www.linode.com/docs/tools-reference/linux-users-and-groups/#understanding-sudo)ガイドを確認してください。

前提条件##

Chefサーバーをホストするために使用され、4GBのRAMを必要とし、Ubuntu18.04オペレーティングシステムを実行するホスト

ワークステーションとノードホストをそれぞれホストするために使用される、それぞれがUbuntu18.04オペレーティングシステムを実行する小さなコンテンツを持つ2つのLinodeホスト

[Linode入門](https://www.linode.com/docs/getting-started/)と[サーバーを保護する方法](https://www.linode.com/docs/security/securing-your-server/)の2つの記事の紹介に従って、各Linodeホストを構成してください。

各Linodeホストは、有効なFQDN(完全修飾ドメイン名)で構成する必要があります

すべてのホストのソフトウェアが最新であることを確認してください。

sudo apt update && sudo apt upgrade

シェフサーバー##

Chefサーバーは、すべてのChefワークステーションとChefノード間の対話センターです。ワークステーションで行われた構成変更をChefサーバーにアップロードしてから、ChefクライアントからChefサーバーにアクセスし、構成変更を各ノードに同期させることができます。

Chefサーバーをインストールする###

[最新のChefサービスコアインストールパッケージ](https://downloads.chef.io/chef-server/#ubuntu)をダウンロードします。

wget https://packages.chef.io/files/current/chef-server/12.17.54+20180531095715/ubuntu/18.04/chef-server-core_12.17.54+20180531095715-1_amd64.deb

Chefサービスをインストールします。

sudo dpkg -i chef-server-core_*.deb

ダウンロードしたファイルを削除します。

rm chef-server-core_*.deb

Chefサーバーには、 chef-server-ctlという名前のコマンドラインユーティリティが含まれています。 chef-server-ctlを実行して、Chefサーバーサービスを開始します。

sudo chef-server-ctl reconfigure

Chefユーザーとユーザーグループを作成する###

多数のワークステーションとサイトをシェフサーバーにリンクするには、管理者とユーザーグループを作成し、RSA秘密鍵を使用して2つを関連付ける必要があります。

/ homeディレクトリの下に、秘密鍵を保存するための .chefディレクトリを作成します。

mkdir .chef

chef-server-ctlコマンドを実行してユーザーを作成します。この例では、コマンド内の次のキーワードにいくつかの調整を加える必要があります: USER_NAME FIRST_NAMELAST_NAME EMAIL、および PASSWORDUSER_NAME.pemを調整するときは、USERNAMEを変更するだけでよく、そのサフィックス名 .pemを保持する必要があります。

sudo chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD'--filename ~/.chef/USER_NAME.pem

次に、ユーザーグループを作成し、前の手順で作成した管理者ユーザーをセキュリティユーザーグループにバインドします。 ORG_NAMEをユーザーグループの短い識別子に変更し、 ORG_FULL_NAMEをユーザーグループのフルネームに変更し、 USER_NAMEを前の手順で作成したユーザーのユーザー名に変更し、最後に ORG_NAME.pemを変更します。 ORG_NAMEGはユーザーグループの短い識別子に変更され、そのサフィックス名 .pemは保持されます。

sudo chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME"--association_user USER_NAME --filename ~/.chef/ORG_NAME.pem

Chefサーバーがインストールされ、RSAキーが生成されたら、各ワークステーションの構成を開始できます。これにより、Chefノードのすべての主要なタスクが実行されます。

シェフワークステーション##

Chefワークステーションでは、「クックブック」、「クッキングマニュアル」、属性、およびその他の変更を作成および構成できます。これらはすべてワークステーションで有効です。ローカルホストは任意のオペレーティングシステムを実行できますが、リモートサーバーをワークステーションホストとして使用する利点は、どこからでもアクセスできるため明らかです。

ワークステーションをセットアップする###

[ 最新のシェフ開発キット(シェフ開発キット)をダウンロード](https://downloads.chef.io/chef-dk/ubuntu/):

wget https://packages.chef.io/files/stable/chefdk/3.1.0/ubuntu/18.04/chefdk_3.1.0-1_amd64.deb

ChefDK(Chef Development Kitの略)をインストールします。

sudo dpkg -i chefdk_*.deb

インストールされたファイルを削除します。

rm chefdk_*.deb

chef-repoを生成し、新しく作成されたディレクトリに移動します。

chef generate app chef-repo 
cd chef-repo

.chefディレクトリを作成して knife.rb( "cookbook"構成ファイル)、 ORGANIZATION-validator.pem、および USER.pemファイルを保存します。

mkdir .chef

RSA秘密鍵を追加します###

Chefサーバーをセットアップするときは、生成されたRSA秘密鍵をワークステーションに配置する必要があります。この背後にある特定のプロセスは、linodeホストにログインするときにSSHキー認証を使用するかどうかによって異なります。

キー認証を使用するログイン方法がない場合は、Chefサーバーから直接ファイルをコピーしてください。次のコマンドでは、ユーザーをChefサーバーのユーザー名に変更し、IPをChefサーバーのIPまたはChefサーバーのURLアドレスに変更する必要があります。

scp [email protected]:~/.chef/*.pem ~/chef-repo/.chef/

RSAキーペア認証ログイン方式を使用する場合は、ローカル端末から scpコマンドを使用して、拡張子が .pemのファイルをサーバーからワークステーションにコピーする必要があります。 userを対応するユーザー名に変更し、次のコマンドの 192.0.2.0203.0.113.0をそれぞれ実際のChefサーバーIPとサイトサーバーIPに変更します。

scp -3 [email protected]:~/.chef/*.pem [email protected]:~/chef-repo/.chef/

lsを使用して .chefディレクトリ内のファイルの内容を一覧表示し、ファイルが正常にコピーされたことを確認します。

ls ~/chef-repo/.chef

これにより、ディレクトリ内の拡張子が .pemのすべてのファイルが表示されます。

バージョンコントロールを追加する###

Chefワークステーションは通常、「cookbook」「cookbook」およびその他の構成ファイルを作成および編集するために使用され、ワークステーションでの何らかの形式のバージョン制御は非常に便利です。 ChefDKは、ワークステーションにGitコンポーネントをインストールし、Chefリポジトリリポジトリを作成するときにGitリポジトリを初期化します。その前に、GITでユーザー名と電子メールアドレスをグローバルに構成し、上記の手順で生成された新しいファイルを追加して送信する必要があります。

gitのユーザー名とメールアドレスをグローバルに設定します。実際の状況に応じて、次の値を変更してください。

git config --global user.name yourname 
git config --global user.email [email protected]

.chefディレクトリを .gitignoreファイルに追加します。

echo ".chef">.gitignore

既存のすべてのファイルを追加して送信します。

git add . 
git commit -m "initial commit"

作業ディレクトリがクリーンであることを確認してください。

git status

次のように出力されます。

On branch master 
nothing to commit, working directory clean

knife.rb(「cookbook」構成ファイル)を生成します###

〜/ chef-repo / .chefフォルダーに移動し、テキストエディターを使用して knife.rb構成ファイルを作成します。

次のコードをknife.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://example.com/organizations/ORG_NAME'
cache_type               'BasicFile'cache_options(:path =>"#{ENV['HOME']}/.chef/checksums")
cookbook_path            ["#{current_dir}/../cookbooks"]

以下の対応する値を変更してください

node_nameをシェフサーバーで作成したユーザー名に変更します。

client_keyに対応する USER.pemを、シェフサーバー上のユーザーが作成した USER.pemに変更して、マッピング関係を確立します。

validation_client_nameに対応する ORG_NAME-validatorORG_NAMEに変更し、 -validatorでスプライシングします

validation_keyに対応する ORGANIZATION-validator.pemORG_NAMEスプライシング-validator.pemに変更します

最後に、 chef_server_urlを独自のサーバーの完全修飾ドメイン名に変更し、最後にユーザーグループの短い識別子 ORGを追加します

chef-repoディレクトリに入り、必要なSSL証明書ファイルをサーバーからディレクトリにコピーします

cd .. 
knife ssl fetch

これらのSSL証明書は、Chefサーバーのインストール時に自動的に生成されます。明らかに、このタイプの証明書は自己署名されています。これは、サードパーティの署名証明書機関(CA)サービスを使用する必要がないことも意味します。ワークステーションがSSL証明書を取得して検証できるように、Chefサーバーのホスト名とFQDNは同じである必要があります。 Chefサーバーのホスト名とFQDNは、それぞれ hostname hostname-fを実行することで確認できます。 SSL証明書の再生成の詳細については、[Chef Documentation](https://docs.chef.io/server_security.html#regenerate-certificates)を参照してください。

クライアントでコマンド knife.rbを実行して、クライアントが正しく構成されていることを確認してください。

knife client list

このコマンドは、バリデーター名を出力する必要があります。

サーバーとワークステーションを構成した後、ノードを起動できます。

ブートノード##

クライアントノードの起動プロセス中に、Chefクライアントが自動的にインストールされ、ノードの有効性が検証されます。起動プロセス中に、ノードはChefサーバーから関連情報を読み取ることができます。将来的には、chefクライアントは必要に応じて関連する構成情報を変更することもできます。

ワークステーションから 〜/ chef-repo / .chefディレクトリにインポートします。

cd ~/chef-repo/.chef

クライアントノードのrootユーザーまたは昇格された特権を持つユーザーを使用して、クライアントノードをガイドします。

ノードルート権限を持つユーザーとして、必要に応じてルートパスワードとクライアントノードノード名の名前を変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。

knife bootstrap 192.0.2.0-x root -P password --node-name nodename

sudo権限を持つユーザーとして、必要に応じてユーザー名ユーザー名、ユーザーパスワードパスワード、クライアントノードノード名の名前を変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。

knife bootstrap 192.0.2.0-x username -P password --sudo --node-name nodename

キーペア認証権限を持つユーザーとして、必要に応じてホストユーザー名usernameとクライアントノード名nodenameを変更してください。クライアントノードのデフォルトのホスト名を使用する場合は、クライアントノード名を変更するオプションを省略できます。

knife bootstrap 192.0.2.0--ssh-user username --sudo --identity-file ~/.ssh/id_rsa.pub --node-name hostname

クライアントノードを一覧表示して、ノードがすべて起動されていることを確認します。

knife client list

リストには、最新のクライアントがすべて含まれている必要があります。

クックブックのダウンロード(「クッキングマニュアル」)(オプション)##

Chefサービスを使用する場合は、Chefクライアントをノードで定期的に実行し、すべての構成変更をChef中央サーバーにプッシュする必要があります。セキュリティ上の理由から、ノードの起動時にノードクライアントがChefサーバーにアップロードした検証ファイル validation.pemも削除する必要があります。これらの手順は手動で実行できますが、「レシピ」として設定した後の方が簡単で効率的です。

コンテンツのこの部分はオプションです。ワークステーションに「レシピ」をダウンロードする方法と、サーバーにプッシュする方法についてのみ説明します。コンテンツのこの部分には、拡張可能でテスト可能な基本的な「レシピ」フレームワークの両方が含まれます。

ワークステーションから 〜/ chef-repo / .chefディレクトリに入力*します。

cd ~/chef-repo/.chef

クックブックとその依存関係をダウンロードします。

knife cookbook site install cron-delvalidate

default.rbファイルを開いて、デフォルトのクックブック「レシピ」を確認します。

#
# Cookbook Name:: cron-delvalidate
# Recipe:: Chef-Client Cron & Delete Validation.pem
#
#

cron "clientrun"do
 minute '0'
 hour '*/1'
 command "/usr/bin/chef-client"
 action :create
end

file "/etc/chef/validation.pem"do
 action :delete
end

cron "clientrun" doはタイミング操作を定義します。これは、毎時( * / 1は毎日午前1時ではなく毎時を意味します)を意味し、chef-client(/ usr / bin / chef-client)コマンドを使用して、アクションに対応する作成識別子を使用して新しいスケジュール済みジョブを作成します。

`" 「/etc/chef/validation.pem」ファイルは「validation.pem」ファイルによって呼び出されます。条件が満たされると、対応する操作「deletecommand」が実行されてファイルが削除されます。

Rubyでは、これらは2つの非常に基本的な操作です。Chefの「調理マニュアル」クックブックを作成するときに、最も基本的なコード構造の例が提供されます。これらのサンプルコードは、必要に応じて編集および拡張できます。

ノードの実行リストにレシピを追加し、 nodenameをノードの名前に置き換えます。

knife node run_list add nodename 'recipecron-delvalidate::default'

レシピクックブックをChefサーバーにプッシュします。

knife cookbook upload cron-delvalidate

このコマンドは、クックブックを更新するときにも使用されます。

セルフチェック(サーバーのクックブックを自動的にプルする)クライアントノードに切り替えて、最初の chef-clientコマンドを実行します。

chef-client

このコマンドをroot以外のユーザーとして実行する場合は、コマンドの前に sudoを追加してください。

リスト内のレシピクックブックが実行されると、ノードは対応するプログラムをサーバーからプルして実行します。この場合、この種のレシピには通常、 cron-delvalidateタイミングジョブが含まれています。このようにして、サーバーからプルされたレシピが完全に生成されることが保証され、Chefサイトとノードが変更された構成をChefサーバーにプッシュでき、情報がノードリストに同期され、各ノードとワークステーションが1時間ごとに自動的にプルします。クックブック「クッキングマニュアル」を独自のノードに。この自動化された手順により、将来ノードに接続するときにクライアントの操作を手動で変更する必要がなくなります。

Recommended Posts

ChefサーバーワークステーションをUbuntu18.04にインストールします
Ubuntu Server14.04にOpenSSL1.0.2をインストールします
Ubuntu Server12.4.0にOracle11gR2をインストールします
UbuntuサーバーにGnomeとVNCをインストールする
Ubuntu14.04にBaculaServerをインストールする方法
Ubuntu16.04サーバーにZabbixをインストールする方法
ubuntu18にvscodeをインストールします
UbuntuにRedisをインストールする
ubuntu20にR4をインストールします
Ubuntu18.04にnvtopをインストールします
Ubuntu18.04にpostgresql-10をインストールします
Ubuntuにdockerをインストールする
ubuntu18.04にDockerをインストールします
Ubuntu16にnodejs10をインストールします
Ubuntu14.04にmysqlをインストールします
UbuntuにDjangoをインストールします
Ubuntu16.04にPytorch + CUDAをインストールします
Ubuntu14.04にPython3をインストールします
Ubuntu18にrJavaをインストールします
UbuntuにJDK10 +をインストールする
Ubuntu16.04にPython3をインストールします
Ubuntu16.04.2にKDEをインストールします
ubuntuインストールnginxサーバー
Ubuntu18にDockerをインストールする
UbuntuにPython3.7をインストールする
Ubuntuにflashplayerをインストールする
Ubuntu18.04にSquidプロキシサーバーをインストールする方法
Dockerプラクティス(1):Ubuntu16.04にDockerをインストールします
仮想マシンにubuntuをインストールします
Ubuntu16.04にQQロボットをインストールします
Ubuntu 18.04LTSにPython3.7をインストールします
UbuntuにAndroidStudioをインストールする
ubuntuサーバーでtomcatを構成する
ubuntuにスクレイプフレームワークをインストールする
MysqlをUbuntuにオフラインでインストールする
UbuntuにOracleJava8をインストールする
Ubuntu16.04にOdoo11スタックをインストールします
Ubuntu16にGoロケールをインストールします
Ubuntu16.04に一般的なソフトウェアをインストールする
centosサーバーにvirtualboxをインストールする
ポータブルでないQQをubuntuにインストールする
オフラインでUbuntu18.04にDockerをインストールする
CentOS7にNginxサーバーをインストールします
UbuntuサーバーにMono本番環境をインストールして構成します
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
ubuntuでNginx-RTMPライブサーバーを構築する
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにTendau12ドライバーをインストールします
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
UbuntuにMySQLをインストールして構成する
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
ubuntuにbotan2暗号化ライブラリをインストールします