GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでのVagrantとVirtualboxによる自動化されたAnsibleラボのセットアップ

Ansible は、オーケストレーション、構成管理、展開、プロビジョニングなどの分野で使用される自動化プラットフォームです。ansibleを学びたい初心者、またはansible認定の取得を計画している人の場合は、ansibleを実践するためのホームラボのセットアップが必要です。 。ホームラボを手動で設定するのは時間のかかる作業です。 Dockerのような自動化されたソリューションがいくつかあります 、 Vagrant 、ansibleラボの構築に使用できるクラウドソリューション。このガイドでは、LinuxでVagrantとVirtualBoxを使用してAnsibleラボをセットアップする自動化された方法を学習します。

Vagrantは、開発環境をすばやくセットアップするための優れたツールです。 Vagrantを初めて使用する場合は、Vagrantガイドの概要をご覧になることをお勧めします。

  • Vagrantチュートリアル-LinuxでVagrantを使い始める

このガイドでは、VagrantとVirtualBoxをプロバイダーとして使用して、Ansibleラボを構築します。 VirtualBoxの代わりにKVMを使用することもできます。 KVMをプロバイダーとして使用する場合は、KVMでvagrantを使用する方法について以下の記事を参照してください。

  • LibvirtKVMプロバイダーでVagrantを使用する方法

Ansibleラボのセットアップ

前提条件として、LinuxマシンにVagrantとVirtualboxがインストールされている必要があります。 Vagrantをまだインストールしていない場合は、次のガイドを参照して、さまざまなLinuxディストリビューションにVagrantをインストールしてください。

  • LinuxにVagrantをインストールする方法

3ノードのansibleラボセットアップを構築します。 1つのノードがマスター/コントローラーノードとして機能し、2つのノードが管理対象ノードとして機能します。デモンストレーションの目的で、私は ubuntu / focus64を使用しています 放浪者ボックス。

これが私のAnsibleラボのセットアップの詳細です。

ノードタイプ ノード名 IPアドレス OSフレーバー
コントロールノード controller.anslab.com 192.168.10.3 ubuntu / focus64
管理対象ノード managed1.anslab.com 192.168.10.4 ubuntu / focus64
管理対象ノード managed2.anslab.com 192.168.10.5 ubuntu / focus64

ここでは、ラボ用に3つのノードのみを設定していますが、独自のラボを設定するときに、必要な数の管理対象ノードを追加できます。

クローンプロジェクトリポジトリ

GitHubリポジトリでAnsibleラボをセットアップするために必要なすべてのファイルをホストしました。次のコマンドを実行して、リポジトリをローカルに複製します。

$ git clone --recursive https://github.com/KarthickSudhakar/Ansible_lab_vagrant_virtualbox.git

プロジェクトディレクトリ内を移動して、どのファイルが存在するかを確認しましょう。

各ファイルの概要を簡単に説明します。

1。 Vagrantfile

VMに関連するすべての構成がこのファイルに保存されます。このファイルの内容は次のとおりです。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  
  config.vm.provider "virtualbox" do |rs|
    rs.memory = 2048
    rs.cpus = 2
  end

  # Will not check for box updates during every startup.
  config.vm.box_check_update = false


  # Master node where ansible will be installed
  config.vm.define "controller" do |controller|
    controller.vm.box = "ubuntu/focal64"
    controller.vm.hostname = "controller.anslab.com"
    controller.vm.network "private_network", ip: "192.168.10.3"
    controller.vm.provision "shell", path: "bootstrap.sh"
    controller.vm.provision "file", source: "key_gen.sh", destination: "/home/vagrant/"
  end

  # Managed node 1.
  config.vm.define "m1" do |m1|
    m1.vm.box = "ubuntu/focal64"
    m1.vm.hostname = "managed1.anslab.com"
    m1.vm.network "private_network", ip: "192.168.10.4"
    m1.vm.provision "shell", path: "bootstrap.sh"
  end

  # Managed node 2.
  config.vm.define "m2" do |m2|
    m2.vm.box = "ubuntu/focal64"
    m2.vm.hostname = "managed2.anslab.com"
    m2.vm.network "private_network", ip: "192.168.10.5"
    m2.vm.provision "shell", path: "bootstrap.sh"
  end

end

2。 bootstrap.sh

これは、コントローラーノードでのansibleのセットアップ、パッケージのインストール、システム構成の変更を担当するシェルスクリプトです。

このファイルの内容を以下に示します:

#!/usr/bin/env bash

# vagrant by default creates its own keypair for all the machines. Password based authentication will be disabled by default and enabling it so password based auth can be done.

sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd

# Supressing the banner message everytime you connect to the vagrant box.

touch /home/vagrant/.hushlogin

# Updating the hosts file for all the 3 nodes with the IP given in vagrantfile

# 192.168.10.3 controller.ansible.com controller
# 192.168.10.4 managed1.ansible.com managed1
# 192.168.10.5 managed2.ansible.com managed2

echo -e "192.168.10.3 controller.anslab.com controller\n192.168.10.4 managed1.anslab.com managed1\n192.168.10.5 managed2.anslab.com managed2" >> /etc/hosts

# Installing necessary packages 

sudo apt update && sudo apt -y install curl wget net-tools iputils-ping python3-pip sshpass

# Install ansible using pip only in controller node

if [[ $(hostname) = "controller" ]]; then
  sudo pip3 install ansible
fi

3。 key_gen.sh

3つのVMビルドがすべて完了したら、このスクリプトを手動でトリガーする必要があります。このスクリプトは、sshキーペアの生成を処理し、3つのノードすべてに分散します。また、検証のためにサンプルのansibleアドホックコマンドを実行します。

このファイルの内容は次のとおりです。

#!/usr/bin/env bash

# THIS SCRIPT WILL CREATE SSH KEYPAIR AND DISTRIBUTE ACROSS ALL NODES

ssh-keygen -b 2048 -t rsa -f /home/vagrant/.ssh/id_rsa -q -N ""

# LOOPING THROUGH AND DISTRIBUTING THE KEY

for val in controller managed1 managed2; do 
	echo "-------------------- COPYING KEY TO ${val^^} NODE ------------------------------"
	sshpass -p 'vagrant' ssh-copy-id -o "StrictHostKeyChecking=no" [email protected]$val 
done

# CREATE THE INVENTORY FILE

PROJECT_DIRECTORY="/home/vagrant/ansible_project/"

mkdir -p $PROJECT_DIRECTORY
cd $PROJECT_DIRECTORY

# Creating the inventory file for all 3 nodes to run some adhoc command.

echo -e "controller\n\n[ubuntu1]\nmanaged1\n\n[ubuntu2]\nmanaged2" > inventory
echo -e "[defaults]\ninventory = inventory" > ansible.cfg
echo -e "-------------------- RUNNING ANSBILE ADHOC COMMAND - UPTIME ------------------------------"
echo

# running adhoc command to see if everything is fine

ansible all -i inventory -m "shell" -a "uptime"
echo

これら3つのファイルはすべて、私のGitHubリポジトリでホストされています。気軽に貢献して改善してください。

Vagrantfile構成について

Ansibleラボを構築する前に、Vagrantfileとシェルスクリプト内の構成を理解する必要があります。

1。メモリとVcoreの割り当て

3つのvagrantボックスすべてについて、メモリとCPUの値を設定する必要があります。ここでは、メモリは 2GBに設定されています CPUは2に設定されています 。制限を増減したい場合は、Vagrantfileで強調表示されているパラメータを調整するだけです。

2。 OSフレーバー

3つのノード(コントローラーと管理対象)はすべて、Ubuntu20.04LTSイメージを使用します。したがって、「vagrant up」を実行すると "コマンドvagrantは次のパラメータを探し、ローカルで利用できない場合はイメージをプルしようとします。

3。ネットワーク設定

デフォルトでは、vagrantは最初のインターフェース(adapter1)でNATを使用します。 Vagrantは、NATを介したポート転送を使用して仮想マシンに接続します。ここでは、プライベートネットワーク上の3つのVMすべてのホスト名と静的IPアドレスを設定しています。

別のインターフェース(Adapter2)が作成され、静的IPアドレスが割り当てられます。プライベートネットワークの一部であるVMは相互に通信できます。

マルチVM環境では、vagrantはポートの衝突を自動的に修正します。

==> m2: Fixed port collision for 22 => 2222. Now on port 2201.
==> m2: Clearing any previously set network interfaces...
==> m2: Preparing network interfaces based on configuration...
    m2: Adapter 1: nat
    m2: Adapter 2: hostonly
==> m2: Forwarding ports...
    m2: 22 (guest) => 2201 (host) (adapter 1)
==> m2: Running 'pre-boot' VM customizations...
==> m2: Booting VM...
==> m2: Waiting for machine to boot. This may take a few minutes...
    m2: SSH address: 127.0.0.1:2201

4。ユーザー名とSSH通信

パスワード「vagrant」を持つ「vagrant」というデフォルトのユーザーがいます。 Vagrantユーザーには、デフォルトでvmにパスワードなしのsudo権限が設定されています。

デフォルトでは、パスワードベースの認証はVMに対して無効になっています。 「vagrant ssh」を実行すると、Vagrantはsshキーのペアを作成し、秘密キーを使用してvmに接続します。 "コマンド。

$ vagrant ssh controller
$ vagrant ssh m1
$ vagrant ssh m2

パスワードベースの認証は、bootstrap.shを介して有効になります ファイルを使用して、キーベースの認証の代わりにIPアドレスとパスワードベースの認証を使用してノードに接続できるようにします。

5。ブートストラップスクリプト

スクリプトbootstrap.shが責任を負います

  • パスワードベースの認証を有効にします。
  • .huhloginを作成します デフォルトのバナーメッセージを抑制するファイル。
  • /etc/hostsにホストエントリを追加します 3つのノードすべてのファイル。
  • 必要なパッケージをインストールします。
  • pythonパッケージマネージャー(pip)を介してansibleをコントローラーノードにのみインストールします。

bootstrap.shが/tmp/にコピーされるシェルプロビジョナーを使用しています 3つのVMすべての場所とスクリプトはroot権限で実行されます。

ヘッズアップ: RHELベースのラボを構築している場合は、bootstrap.shからパッケージインストールコマンドを編集する必要があります。 dnfに従ったファイル またはrpm 。残りはすべて、すべてのディストリビューションで同様になります。

6。キーペアを生成する

AnsibleはSSHキーペアを使用して、管理対象ノードと通信し、タスクを実行します。新しいキーはコントローラーノードから生成され、すべての管理対象ノードと共有される必要があります。これにより、ansibleは毎回パスワードを要求せずに管理対象ノードと通信できます。

スクリプトkey_gen.sh sshキーの作成と、すべてのノードへのキーの配布を処理します。スクリプトは、ansible.cfgを使用してプロジェクトディレクトリも作成します ファイルとインベントリファイル。 アドホック コマンドは、接続を検証するためのスクリプトの一部としてトリガーされます。

ヘッズアップ: このスクリプトは、3つのVMがすべてプロビジョニングされたら、コントローラーノードから手動でトリガーする必要があります。

AnsibleLabセットアップの構築

プロジェクトディレクトリに移動して「vagrantup」コマンドを実行すると、残りはvagrantとブートストラップスクリプトによって処理されます。

$ cd Ansible_lab_vagrant_virtualbox
$ vagrant up

出力例:

Bringing machine 'controller' up with 'virtualbox' provider…
Bringing machine 'm1' up with 'virtualbox' provider…
Bringing machine 'm2' up with 'virtualbox' provider…
………

インストール後のスクリプト

3つのVMがすべてプロビジョニングされたら、コントローラーノードにログインして/home/vagrant/key_gen.shを実行します。 sshキーのペアを作成し、ansibleアドホックコマンドを実行して検証します。

$ vagrant ssh controller
$ cd /home/vagrant/
$ bash key_gen.sh

VMを管理するためのVagrantコマンド

次のコマンドは、放浪者のマシンのライフサイクルを維持するのに役立ちます。

仮想マシンの構築を開始するには、vagrantfileが配置されているディレクトリから次のコマンドを実行します。

$ vagrant up

1つのノードのみを起動する場合は、ホスト名を「vagrant up」に追加できます。 "コマンド。

$ vagrant up controller

マシンの状態を確認するには、次のコマンドを実行します。

$ vagrant status
Current machine states:

controller running (virtualbox)
m1 running (virtualbox)
m2 running (virtualbox)

次のコマンドを使用して、VMに関する詳細情報を取得することもできます。

$ vagrant global-status --prune

name       provider   state    directory                                                                    
---------------------------------------------------------------------------------------------------------------------
6095cc7  controller virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 
cf2e302  m1         virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 
af10f7d  m2         virtualbox running  /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 

仮想マシンに接続するには、「vagrant ssh」を実行できます "コマンド。vm名を渡す必要があります。渡さないと、次のエラーがスローされます。

$ vagrant ssh
This command requires a specific VM name to target in a multi-VM environment.

m1 VMにSSHで接続するには、コマンドは次のようになります。

$ vagrant ssh m1

または、

$ vagrant ssh cf2e302

パスワードベースの認証が有効になっている場合は、ユーザー名とパスワードを使用して接続することもできます。

$ ssh [email protected]
[email protected]'s password:
[email protected]:~$

特定の仮想マシンを停止するには、vm名を指定してhaltコマンドを実行します。

$ vagrant halt controller

すべての仮想マシンを停止するには、次のコマンドを実行します。

$ vagrant halt
==> m2: Attempting graceful shutdown of VM…
==> m1: Attempting graceful shutdown of VM…
==> controller: Attempting graceful shutdown of VM…

ディスクを含むすべてのVMを破棄するには、次のコマンドを実行します。

$ vagrant destroy -f
==> m2: Destroying VM and associated drives…
==> m1: Destroying VM and associated drives…
==> controller: Destroying VM and associated drives…

結論

この記事では、VagrantとVirtualBoxを使用してansibleラボをセットアップする自動化された方法を示しました。ラボはUbuntu20.04LTSスタックで作成されています。

Ansible認定を取得することを計画していて、ラボで練習したい場合は、ボックス名をRHELフレーバーにポイントするvagrantfileを編集し、aptを置き換えることをお勧めします。 適切なdnfへのコマンド / yum bootstrap.shのコマンド ファイル。

次を読む:

  • Ansibleインベントリおよび構成ファイル

Linux
  1. libvirtでVagrantを使用する方法

  2. LinuxにAnsibleをインストールしてテストする方法

  3. Red Hat Enterprise Linuxを登録し、Ansibleにサブスクリプションを添付します

  1. KWriteとKateを使用してLinuxでテキストを編集する

  2. VirtualBoxを搭載したオペレーティングシステムでLinuxをお試しください

  3. Linux での Vagrant Up のエラー

  1. LinuxターミナルをtmuxとGitでカスタマイズする

  2. killとkillallを使用したLinuxでのプロセスの管理

  3. VagrantをインストールしてUbuntu20.04のVirtualBoxで使用する方法