Ansible的第一步。
#网络开发人员 #python #devops #ansible

Ansible是Red Hat发布的最新工具之一,也是开发人员和DevOps工程师的最佳选择之一,可以自动化新服务器中的所有内容。它是免费的和开源的,并且相信我,配置远程服务器从未如此简单。

在本教程中,我打算向您展示如何安装和开始使用此功能强大的工具。

安装Ansible

首先,您将需要一个Ansible Controller主机来管理所有节点。不用担心,该主机可能是您的本地主机,无论您使用哪个操作系统,Ansible都会工作。我正在使用ubuntu,但是任何其他操作系统的安装步骤几乎相同。

让我们使用APT安装Ansible。

$ sudo apt install ansible

安装完成后,运行

$ ansible --version

如果包装安装成功,您应该看到这样的东西。

Image description

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

如果一切进展顺利,您会看到类似的输出

Image description

运行剧本

您的主机准备通过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
您应该看到类似的输出

Image description

一个简单的现实生活例子

您到目前为止学到了一些新事物

  • 安装和配置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.

Image description

最后,让我们检查浏览器!

Image description

结论

Ansible是一个伟大的盟友;它使其易于在所有服务器中安装和部署东西。当然,这只是一个介绍性教程,但是该工具为您需要自动化的所有内容都有一个模块。您可以找到所有始终可用的here

感谢您的阅读。高度赞赏每个反馈,评论或共享!