Ansible は無料の構成管理ツールであり、UnixライクなシステムやMicrosoftWindowsシステムの構成の管理をサポートしています。 Ansible SSHまたはPowerShellを介してノードを管理し、ノードにPythonをインストールします。
Ansible SSHを使用して数百のノードでソフトウェアの構成、管理、および展開を実行するのに役立ちます。操作全体を1つのコマンド ansible
で実行できます。 。ただし、場合によっては、展開のために複数のコマンドを実行する必要があります。
このガイドは、Ansibleを CentOS 7にインストールするのに役立ちます / Ubuntu 18.04 / Ubuntu 16.04 / Debian 9 。
アーキテクチャ
puppet、chef、CFEngineなどの他の構成管理ツールを使用する場合、サーバーソフトウェアは1台のマシンにインストールされ、クライアントマシンはエージェントを介して管理されます。 Ansibleでは、ノードはSSHを介してマシン(Ansibleサーバー)を制御することで管理されるため、ノードマシンでエージェントが実行されることはありません。
AnsibleはSSHを介してモジュールをノードにデプロイし、これらのモジュールはノードに一時的に保存され、JSONプロトコルを介してAnsibleサーバーと通信します。モジュールは、Python、Perl、 Rubyで記述されたスクリプトに他なりません。 、bashなど。
システム要件
制御機
Ansibleは、Python 2.6または2.7がインストールされている任意のマシンで実行できます(Windowsはコントロールマシンではサポートされていません)。
Red Hat、Debian、CentOS、OS X、すべてのBSDをサポートします。
クライアントノード
クライアントマシンには、少なくともPython 2(バージョン2.6以降)またはPython 3(バージョン3.5以降)が必要です
リモートノードでSELinuxを有効にしている場合は、libselinux-python
をインストールする必要があります Ansibleでコピー/ファイル/テンプレート関連の関数を使用する前にノードでパッケージ化する
環境
ホスト名 | IPアドレス | OS | 目的 |
---|---|---|---|
server.itzgeek.local | 192.168.1.10 | CentOS 7 / Ubuntu 18.04 / Debian 9 | 制御機 |
node1.itzgeek.local | 192.168.1.20 | CentOS 7 | 管理対象ノード1 |
node2.itzgeek.local | 192.168.1.30 | Ubuntu 18.04 | 管理対象ノード2 |
AnsibleをCentOS7/ RHEL 7 / Ubuntu 18.04 / 16.04&Debian9にインストール
制御機のセットアップ
Ansibleをインストールするには、 CentOS 7 /RHEL7でEPELリポジトリを有効にする必要があります。 。
### CentOS 7 ### yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ### RHEL 7 ### subscription-manager repos --enable rhel-7-server-ansible-2.6-rpms ### Ubuntu 18.04 / Ubuntu 16.04 ### sudo apt-get update sudo apt-get install software-properties-common sudo apt-add-repository ppa:ansible/ansible sudo apt-get update ### Debian 9 ### sudo apt-get install dirmngr sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list sudo apt-get update
Ansibleをインストールします。
### CentOS 7 / RHEL 7 & Fedora 28 ### yum install -y ansible ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get install -y ansible
Ansibleをインストールしたら、以下のコマンドを実行してAnsibleのバージョンを確認します。
ansible --version
出力:
ansible 2.6.3 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
管理対象ノードのセットアップ
クライアントマシンには、少なくともPython 2(バージョン2.6以降)またはPython 3(バージョン3.5以降)が必要です。
### CentOS 7 / RHEL 7 & Fedora ### yum install -y python ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get install -y python
SELinux(CentOS / RHEL / Fedora)
管理対象ノードでSELinuxを有効にしている場合は、Ansibleでコピー/ファイル/テンプレート関連の機能を使用する前に、以下のパッケージをノードにインストールする必要があります。
yum install -y libselinux-python
SSH認証
前述のように、Ansibleはリモート通信にネイティブOpenSSHを使用します。 Ansibleはパスワードなしの両方をサポートしています およびパスワード 管理対象ノードでコマンドを実行するための認証。
SSHキー認証(パスワードなし認証)
ssh認証に関しては、デフォルトでは、sshキー(パスワードなしの認証)を使用してリモートマシンで認証します。
読む : CentOS 7 /RHEL7でSSHパスワードレスログインを設定する方法
上記のリンクはCentOS用ですが、その手順はUbuntu/Debianでも機能します。パスワードなしの通信を設定したら、それを確認します。
ssh [email protected] ssh [email protected]
これで、パスワードなしでリモートマシンにログインできるようになります。
パスワード認証は、オプション --ask-pass
を指定することにより、必要に応じて使用することもできます。 。このオプションにはsshpassが必要です 制御機に。
### CentOS 7 / RHEL 7 & Fedora ### yum install -y sshpass ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get update sudo apt-get install -y sshpassここでは、このデモで、ansible制御ノードと管理対象ノード間のパスワードなしの通信を使用しました。
Ansibleサーバーのユーザー名=root
管理対象ノードのユーザー名=raj
Ansibleインベントリを作成する
/ etc / ansible / hosts を編集(または作成)します ファイル。 このファイルは、AnsibleがSSH経由で接続して管理するリモートホストのインベントリを保持します。
### CentOS 7 / RHEL 7 & Fedora ### vi /etc/ansible/hosts ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo nano /etc/ansible/hosts
1つ以上のリモートシステムを配置してグループ化します。ここでは、両方のマシンをデモサーバーグループに追加しました。
グループは、特定の用途のためにシステムを分類するために使用されます。グループを指定しない場合、グループ化されていないホストとして機能します。
[demo-servers] 192.168.1.20 192.168.1.30
最初のコマンド
次に、制御マシンからpingを実行するだけですべてのノードをチェックします。これを行うには、コマンド ansibleを使用します。 オプション付き-m (モジュールのロード)およびすべて (すべてのサーバー)。
# all servers - Works when both server's and client's user name are same (Passwordless) ansible all -m ping # all servers - "raj" is managed node's user (Passwordless) ansible all -u raj -m ping OR # Only demo-servers group - "raj" is managed node's user (Passwordless) ansible demo-servers -u raj -m ping OR # If you use password authendication ansible -m ping all -u raj --ask-pass
出力:
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
上記の例では、pingモジュールを ansibleで使用しています。 リモートホストのすべてまたはグループにpingを実行するコマンド。
同様に、 ansibleでさまざまなモジュールを使用できます コマンドを使用すると、利用可能なモジュールをここで見つけることができます 。
ここでは、このデモで、ansible制御ノードと管理対象ノード間のパスワードなしの通信を使用しました。Ansibleサーバーのユーザー名=root
管理対象ノードのユーザー名=raj
したがって、すべてのansibleコマンドは
-u raj
リモートコマンド実行
今回はコマンドを使用します ansibleのモジュール リモートマシン情報を取得するコマンド。
たとえば、ホスト名を実行します コマンドを使用したコマンド 一度にリモートホストのホスト名を取得するモジュール。
ansible -m command -a "hostname" -u raj demo-servers
出力:
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
以下のコマンドでパーティションの詳細を取得します。
ansible -m command -a "df -hT" -u raj demo-servers
出力:
192.168.1.30 | SUCCESS | rc=0 >> Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 395M 1.5M 393M 1% /run /dev/sda4 ext4 94G 4.9G 84G 6% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/loop0 squashfs 87M 87M 0 100% /snap/core/4486 /dev/loop3 squashfs 3.4M 3.4M 0 100% /snap/gnome-system-monitor/36 /dev/loop1 squashfs 1.7M 1.7M 0 100% /snap/gnome-calculator/154 /dev/loop2 squashfs 141M 141M 0 100% /snap/gnome-3-26-1604/59 /dev/loop4 squashfs 21M 21M 0 100% /snap/gnome-logs/25 /dev/loop5 squashfs 88M 88M 0 100% /snap/core/5328 /dev/loop6 squashfs 13M 13M 0 100% /snap/gnome-characters/69 /dev/sda1 vfat 93M 4.6M 88M 5% /boot/efi tmpfs tmpfs 395M 28K 395M 1% /run/user/120 tmpfs tmpfs 395M 36K 395M 1% /run/user/1000 /dev/loop7 squashfs 15M 15M 0 100% /snap/gnome-logs/40 192.168.1.20 | SUCCESS | rc=0 >> Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 50G 1.1G 49G 3% / devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm tmpfs tmpfs 1.5G 8.5M 1.4G 1% /run tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 188M 827M 19% /boot /dev/mapper/centos-home xfs 46G 33M 46G 1% /home tmpfs tmpfs 287M 0 287M 0% /run/user/1000 tmpfs tmpfs 287M 0 287M 0% /run/user/0
両方のノードの稼働時間と負荷の詳細を確認します。
ansible -m command -a "uptime" -u raj demo-servers
出力:
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
特定のファイルの内容を確認することもできます。
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers
出力:
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
以下のようにリダイレクトすることで、出力を任意のファイルに保存することもできます。
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers > /tmp/ouput_file cat /tmp/ouput_file
このようにして、ansibleを使用して多くのシェルコマンドを実行できます。
これで、Ansibleが CentOS 7に正常にインストールされました。 / Ubuntu 18.04 / Ubuntu 16.04 / Debian 9 。
続きを読む :IT自動化用のAnsibleプレイブックを作成する方法
以上です。