Ansible再入门-关于Ansible Tower和Ansible的引入

首先

我一直以为基础设施即代码的意思是将服务器建设大致上脚本化来处理。看起来是不对的。{Chef或Ansible单独}并不等于{基础设施即代码},而是称之为基础设施即代码的综合基础设施构建机制,比如Chef-Provisioning或Ansible Tower。本次将介绍Ansible和Ansible Tower的使用流程和解释。

在引入Ansible之前

在嵌入Ansible时,要记住虽然Ansible是无代理的,但被操作方也需要进行设置。
经常在Ansible的说明书中写着因为是无代理的,所以不需要额外的工具,但这是错误的。
对于Linux来说,需要设置SSH,对于使用openssh-server的系统来说不是那么麻烦,
但对于使用dropbear的服务器来说,可能会有一些操作限制。
对于Windows来说,在一些书籍中写着可以使用Windows远程管理(WinRM) / Windows远程服务(WinRS),
但是WinRM有版本要求,v1系列不可用,需要v2系列以上,并且需要PowerShell 3.0以上的版本。
此外,由于使用PowerShell,可能会涉及权限设置等方面的问题。

找一台Ansible Host准备。

如果使用Ansible进行系统配置,将其以以下配置(最小配置两台)建立起来,之后的管理将更加轻松。

[Ansible Tower & Ansible Host] - [Ansible Node]
    2-1. Ansible Towerのインストール

使用Ansible Tower时,无法通过软件包管理器安装,需要使用专用的安装程序。
首先,通过以下命令下载最新版本的Ansible Tower并进行解压。
如果希望使用非最新版本,则可以从这里(http://releases.ansible.com/ansible-tower/setup/)选择任意版本。
另外,Ansible Engine也包含在设置中,无需单独安装。

$ wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz 
$ tar xvzf ansible-tower-setup-latest.tar.gz

如果内存小于2GB或者磁盘可用空间小于20GB,则在执行setup.sh时会导致安装失败,请务必注意安装Ansible Tower的服务器规格/资源。
推荐的服务器规格是内存8GB以上,磁盘容量100GB以上。

请编辑打开的目录下的“inventory”文件,输入并保存以下条目的密码。

admin_password -> Ansible Towerの管理者パスワード
redis_password -> キャッシュ管理を行うRedisのパスワード
pg_password -> Ansible Towerのデータを保持するPostgreSQLのパスワード(ユーザー「awx」のパスワード)

接下来需要指定许可证,有四种许可证供选择(在可追溯的许可证列表中只有免费塔试用许可证,但您可以通过查询表单获取关于旧版10个节点免费许可证的信息,以获取不会过期且可以自行支持的许可证)。

・免费的Tower试用和永久免费使用Ansible Tower
・适用于初创企业和小团队的Ansible Tower
・适用于企业级用户的Ansible Tower(企业级8×5)
・适用于企业级用户的Ansible Tower(高级24×7)

除了Ansible Tower for Free Forever外,其他都是付费许可证。因此,最好选择FREE ANSIBLE TOWER TRIAL作为试用版来运行。关于Free Forever,您可以从https://www.ansible.com/license选择FREE ANSIBLE TOWER TRIAL – LIMITED FEATURES UP TO 10 NODES(不会过期的自助支持许可证)以获取许可证密钥。如果您想要先运行试用版,然后转向商业许可证,那么请选择FREE ANSIBLE TOWER TRIAL – ENTERPRISE FEATURES。如果选择了LIMITED FEATURES UP TO 10 NODES,将无法升级。

此外,请注意,从申请到收到许可证密钥可能需要一些时间。

如果您在使用AWS,您可以通过在Amazon EC2中启动特定的AMI来启动Ansible Tower,从而省去安装的麻烦。

    2-2. Ansible Nodeのセットアップ

基本上是无代理的,所以只需要通过SSH连接Linux,通过WinRM连接Windows就可以。
但是,由于设置选项实际上较多,所以需要注意。

    • Linuxの場合、sshログインが出来るユーザの作成(useradd)と、rootに昇格するための設定(visudo)、接続に秘密鍵を使用するので公開鍵/秘密鍵のペアを生成(ssh-keygen -t rsa -b 4096)し、秘密鍵(id_rsa)をAnsible Hostに送っておく

 

    Windowsの場合はWinRMの設定とAnsible Host側にpywinrmライブラリが必要になる

在下列环境下

Ansible Tower & Ansible Host
Host : 10.0.0.10
Inventory : hosts
Ansible Node 01
Host : 10.0.0.15
OS   : CentOS7
User : ansible
Pass : elbisna
Key  : /home/ansible/.ssh/10-0-0-15_id_rsa
Ansible Node 02
Host : 10.0.0.16
OS   : CentOS7
User : ansible
Pass : elbisna
Key  : /home/ansible/.ssh/10-0-0-16_id_rsa
Ansible Node 03
Host : 10.0.0.17
OS   : Windows Server 2012
User : ansible
Pass : elbisna
    • Ansible Node 01で作ったid_rsaをAnsible Tower & Ansible Hostの/home/ansible/.ssh/10-0-0-15_id_rsaにコピーしパーミッションを400にする。

 

    • Ansible Node 02で作ったid_rsaをAnsible Tower & Ansible Hostの/home/ansible/.ssh/10-0-0-16_id_rsaにコピーしパーミッションを400にする。

 

    Ansible Node 03では、WinRMを設定するスクリプトが公開されているので、これをPowerShellを管理者モードで起動して実行する
PS C:\Windows\system32> mkdir C:\work
PS C:\work> cd C:\work
PS C:\work> Set-ExecutionPolicy Bypass
PS C:\work> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1
PS C:\work> PS > powershell -ExecutionPolicy Bypass -File ConfigureRemotingForAnsible.ps1
PS C:\work> Set-ExecutionPolicy restricted

在Ansible主机上添加用于操作WinRM的库。

curl -sL https://bootstrap.pypa.io/get-pip.py | python
pip install pywinrm

在Ansible主机上,可以在清单(主机)中指定IP地址/登录用户/密钥。

[web]
10.0.0.15 ansible_user=ansible ansible_private_key_file=/home/ansible/.ssh/10-0-0-15_id_rsa
10.0.0.16 ansible_user=ansible ansible_private_key_file=/home/ansible/.ssh/10-0-0-16_id_rsa

[Windows]
10.0.0.17

[windows:vars]
ansible_user=ansible
ansible_password=elbisna
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

为了确认起见,在Ansible Host的控制台进行连接测试。

ansible 10.0.0.15 -m ping -i hosts --ask-become-pass
ansible 10.0.0.16 -m ping -i hosts --ask-become-pass
ansible 10.0.0.17 -m win_ping -i hosts -vvvv

因为加了”-ask-become-pass”参数,所以会要求输入升级为root时的密码。

10.0.0.15 | success >> {
    "changed": false,
    "ping": "pong"
}

只要返回了像这样的结果,那就可以了,至此,Ansible主机和Ansible节点的通信设置

    2-3. Ansible Towerの設定をしよう

首先,让我们来对Ansible Tower界面中的项目进行配置。

    • 組織(Organization)

 

    • Ansible Towerの全ての構成要素を束ねる単位。無償ライセンスではデフォルトで用意されている組織一つしか利用できない

 

    • プロジェクト(Project)

 

    • プレイブックを集約する単位

 

    • インベントリ(Inventory)

 

    • 被管理ホストのホスト名や変数などの情報を保持する。ただし、認証に関する情報(ユーザー名やパスワード)は別途扱う

 

    • 認証情報(Credential)

 

    • 被管理ホストへの接続情報や、プレイブックを取得するためのバージョン管理システムへの接続情報など認証に関する情報を保持する

 

    • ジョブテンプレート(Job Template)

 

    • 「どのプレイブックをどのインベントリファイル、認証情報を使って実行するか」を保持する

 

    • ジョブ(Job)

 

    ジョブテンプレートを元に作成された実行情報

当设定完成后,就会感觉已经准备好使用Ansible Tower了。

关于执行剧本所需的最低必要步骤

    • (プレイブックの配置):プレイブックはあらかじめ作成しておき指定のディレクトリ(/var/lib/awx/projects/)に配置しておく必要がある。なお、GitやSubversionなどのバージョン管理システムを利用してプレイブックを取得することも可能。

 

    • (プロジェクトの作成):プレイブックをどこから取得するのかを設定する

 

    • (インベントリの作成):被管理ホストの情報を設定する

 

    • (認証情報の作成):被管理ホストの接続情報を設定する

 

    • (ジョブテンプレートの作成):「どのプレイブックを、どのインベントリに対し実行するのか」を設定する

 

    (ジョブの実行):ジョブテンプレートを元にプレイブックを実行する

最后

老实说,对一般用户来说,通过ansible-playbook来执行playbook.yml是非常困难的现实存在,所以能够通过GUI / WEB UI工具来完成这一点真是太棒了。
接下来,我想尝试一下实际构建的例子。

广告
将在 10 秒后关闭
bannerAds