Ansible 环境部署
在本次的章节里,冻仁将简单地介绍 Ansible 基本观念和怎么安装、设定 Ansible。
Ansible 是怎么运作的?
在 Ansible 的世界里,我们会通过 inventory 档案来定义有哪些 Managed node (被控端),并借由 SSH 和 Python 进行沟通。
换句话说,当 Control Machine (主控端) 可以用 SSH 连上 Managed node,且被连上的机器里有预载 Python 时,Ansible 就可以运作了!
Control Machine
指的是我们主要会在上面操作 Ansible 的机器,冻仁喜欢用主控端来形容它。它可以是我们平时用的电脑、手机 1 或机房里的某一台机器,也可以把它想成是一般 Lab 练习里的Workstation
。Managed node
则是被 Ansible 操纵的机器,冻仁喜欢用被控端来形容它。在很多的 Lab 练习里会用Server
来称呼它。
怎么安装 Ansible?
在一般的情况下,我们只需在 Control Machine 里安装 Ansible 即可,因为 GNU/Linux 和 macOS 的 Managed node 都早已预载了 Python 2.5 以上的版本,且开通了 SSH 连线的条件。
若想拿 Ansible 来管 Windows 的话,则需进行较多的设置。大家可参考冻仁先前分享的 Ansible - Roles & Windows 简报和官方文件。
在 Control Machine 上安装 Ansible
碍于文章篇幅,这里只会提到冻仁较常用的环境,其余的部份还请参考官方文件和 Ansible 台湾使用者社群所维护的 Ansible 安装教学。
目前最新释出的 Ansible 版本为 v2.2.0.0。
Ubuntu (Apt)
安装
add-apt-repository
必要套件。$ sudo apt-get install -y python-software-properties software-properties-common
使用 Ansible 官方的 PPA 套件来源。
$ sudo add-apt-repository -y ppa:ansible/ansible; sudo apt-get update
安装 Ansible。
$ sudo apt-get install -y ansible
CentOS (Yum)
新增
epel-release
第三方套件来源。$ sudo yum install -y epel-release
安装 Ansible。
$ sudo yum install -y ansible
macOS (Homebrew)
请先安装 homebrew,已安装者请略过。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装 Ansible。
$ brew install ansible
Python (Pip)
Ansible 近来的释出速度很快,若想追求较新的版本可改用 Pip 的方式进行安装,较不建议初学者使用。
需请先安装 pip,已安装者请略过。
# Debian, Ubuntu $ sudo apt-get install -y python-pip # CentOS $ sudo yum install -y python-pip # macOS $ sudo easy_install pip
升级 pip。
$ sudo pip install -U pip
安装 Ansible。
$ sudo pip install ansible
在 Managed Node 安装 OpenSSH server 和 Python
正常在 Managed Node 我们都会安装 OpenSSH server 和开通连线权限以便于远端管理,OpenSSH 这边冻仁就不多加赘述了。
Python 的部份呢?虽说现代的 GNU/Linux 大多都早已内建了,可 Ansible 预设使用的 Python 是 2.x 的版本,这在 Ubuntu 16.04 预载 Python 3.4 的环境上需做些调整,详情请参阅 Python 3 Support | Ansible Documentation 一文。2
Ubuntu.
$ sudo apt-get install -y openssh-server python2.7
CentOS.
$ sudo yum install -y openssh-server python
macOS: 在 macOS 10.11 里,我们只需使用内建的 OpenSSH server 和 Python 即可,详情请参考 Apple 官方的 OS X El Capitan: 允许远端电脑取用您的 Mac 一文进行设置。
怎么设定 Ansible?
我们可以借由 ansible.cfg
来设定预设的 inventory 档案的路径、远端使用者名称和 SSH 金钥路径等相关设定。
- 安装好 Ansible 后,我们可以在
/etc/ansible/
的目录底下找到 Ansible 的设定档。 - 通常我们较偏爱把
ansible.cfg
和hosts
这两个档案与其它的Playbooks
放在同个专案目录底下,然后通过版本控制系统 (例如 Git) 把它们一起储存起来,以实现 Ansible 的 Infrastructure as Code!
inventory 是什么?
inventory
就单字本身有详细目录、清单和列表的意思。在这里我们可以把它当成是一份主机列表,我们可通过它对定义每个 Managed Node 的代号、IP 位址、连线相关资讯和群组。
若有对 Control Machine 本机操作的需求,建议于
/etc/ansible/hosts
补上 local 的设定。# For root user. $ /bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts # For sudo user. $ sudo su -c '/bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts'
Hello World
当已上的设置都完成了,您可以试著在终端机里用 Ansible 呼叫本机印出 Hello World
。
$ ansible localhost -m command -a 'echo Hello World.'
localhost | SUCCESS | rc=0 >>
Hello World.
欢迎来到 Ansible 的世界!:D
相关连结
1. 相信在这个智慧型手机里盛行的时代,要在手机里装个 Python 和 OpenSSH 一定不是什么难事 (笑)。在台湾还有人整合了 Ansible 与聊天机器人 (Chatbot),这样出门在外只要有手机和网络就可以远端工作了!(详情请参考从 DevOps 到 ChatOps:War Room、Bots 与 Automation 的简报) ↩
2. Ansible 已在 2.2 时加入了 Python 3 Support 的功能,感谢友人 @maxsolar 的 feedback,这下冻仁可以少写一篇文章了! ↩