Ansible是Red Hat发布的最新工具之一,也是开发人员和DevOps工程师的最佳选择之一,可以自动化新服务器中的所有内容。它是免费的和开源的,并且相信我,配置远程服务器从未如此简单。
在本教程中,我打算向您展示如何安装和开始使用此功能强大的工具。
安装Ansible
首先,您将需要一个Ansible Controller主机来管理所有节点。不用担心,该主机可能是您的本地主机,无论您使用哪个操作系统,Ansible都会工作。我正在使用ubuntu,但是任何其他操作系统的安装步骤几乎相同。
让我们使用APT安装Ansible。
$ sudo apt install ansible
安装完成后,运行
$ ansible --version
如果包装安装成功,您应该看到这样的东西。
Ansible节点
现在您的Ansible控制器正在工作,非常容易吧?
让我们设置您的节点,使用首选编辑器打开/etc/ansible/hosts
文件,您应该看到此模板
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups
# Ex 1: Ungrouped hosts, specify before any group headers.
#green.example.com
#blue.example.com
#192.168.100.1
#192.168.100.10
# Ex 2: A collection of hosts belonging to the 'webservers' group#[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
#192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
#www[001:006].example.com# Ex 3: A collection of database servers in the 'dbservers' group
#[dbservers]
#
#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57# Here's another example of host ranges, this time there are no
# leading 0s:#db-[99:101]-node.example.com
您可以在文件底部添加主机或删除所有内容,然后将其替换为主机。唯一的规则是遵循下面的语法。
# Linux host
# host_alias ansible_host=<host_ip_or_url> ansible_connection=ssh ansible_user=<host_user> ansible_ssh_pass=<ssh_password_for_user>
# Windows host
# host_alias ansible_host=<host_ip_or_url> ansible_connection=winrm ansible_user=<host_user> ansible_password=<password_for_user>
# I am adding two servers, both of them are Linux servers
web1 ansible_host=my.webserver.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Passw0rd
db1 ansible_host=my.databaseserver.com ansible_connection=ssh ansible_user=root ansible_ssh_server=Passw0rd
现在,为您的服务器添加一些组。组让您同时在多个主机上运行命令和脚本。
[web_nodes]
web1 ansible_host=my.webserver.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Passw0rd
[db_nodes]
db1 ansible_host=my.databaseserver.com ansible_connection=ssh ansible_user=root ansible_ssh_server=Passw0rd
保存更改并关闭文件。
Ansible取决于SSHPass软件包,安装运行以下命令
$ sudo apt install sshpass
唯一剩下的步骤是通过SSH连接到主机;这是为了将主机的指纹添加到~/.ssh/known_hosts
文件中。
$ ssh root@my.webserver.com
$ ssh root@my.databaseserver.com
现在,通过运行:
尝试您的主机
$ # Ansible has an 'all' group which contains all your defined hosts
$ ansible all -m ping
如果一切进展顺利,您会看到类似的输出
运行剧本
您的主机准备通过Ansible使用。请在您的主目录中创建一个新文件夹。
$ mdkir ~/ansible-tutorial
$ cd ~/ansible-tutorial
Ansible的脚本只是YAML文件。如果您以前与YAML合作,此步骤将很简单。
打开一个新的playbook.yml文件并添加以下行
- name: My playbook
hosts: web1
tasks:
- name: Runnig date
command: date
-
name
是剧本的别名 -
hosts
定义了主机运行剧本,可以是一个小组 -
tasks
是一个数组,可容纳要使用的动作或模块
保存更改并关闭文件,现在使用
运行
$ ansible-playbook playbook.yml
您应该看到类似的输出
一个简单的现实生活例子
您到目前为止学到了一些新事物
- 安装和配置Ansible Controller
- 添加新的剧本
- 在您的主机上运行它
现在是时候学习如何在现实生活中使用Ansible。
对于此示例,您将安装并运行Nginx Web服务器。
让我们创建一本新的剧本
$ vim nginx-playbook.yml
要开始写这本剧本,添加名称和nginx应该运行的主机(记住标识)
- name: 'Install and deploy nginx'
hosts: web1
现在,添加任务,在这种情况下,您需要定义两个动作。
安装最新的nginx版本
启动nginx服务器
tasks:
- name: 'Install Nginx latest version'
apt:
name: nginx
state: latest
此任务在目标主机上寻找NGINX。如果Ansible找到Nginx的最新版本,则不会发生安装。
- name: 'Run Nginx'
service:
name: nginx
state: started
此任务检查NGINX服务器是否已经在运行。如果不是,则跳过了步骤。
您完整的nginx-playbook.yml应该看起来像这样
- name: 'Install and deploy nginx'
hosts: web1
tasks:
- name: 'Install Nginx latest version'
apt:
name: nginx
state: latest
- name: 'Run Nginx'
service:
name: nginx
state: started
保存您的更改,现在,尝试!
由于我们在主机中安装了一个软件包,因此您需要在playbook命令中添加“ -b”标志。
$ ansible-playbook nginx-playbook.yml -b
$ # -b or --become grants root privileges to ansible user.
最后,让我们检查浏览器!
结论
Ansible是一个伟大的盟友;它使其易于在所有服务器中安装和部署东西。当然,这只是一个介绍性教程,但是该工具为您需要自动化的所有内容都有一个模块。您可以找到所有始终可用的here。
感谢您的阅读。高度赞赏每个反馈,评论或共享!