Ansible 从入门到实战(2)-Ansible 初体验

本贴最后更新于 1901 天前,其中的信息可能已经物是人非

Ansible 从入门到实战(2)-Ansible 初体验

Ansible 是一款基于 python 的自动化运维工具,既然是自动化运维工具,那么就是用来管理其他服务器的。上一节中,我们已经在主控节点安装好了 Ansible,那么我们还需要一台被管理的服务器。下面为学习本节的要求:

  • 安装了 Ansible 的主控节点,上一节你已经安装好了
  • 被管理服务器,可以再新建一台 Centos7 或者其他 Linux 系统的虚拟机

一、Ansible 自动化运维原理

  • Ansible 是通过 SSH 协议与被管理的节点通信的,过程是怎样的呢?

下面为官方的回答:

默认情况下,Ansible 将尽可能使用本机 OpenSSH 进行远程通信。这样可以启用 ControlPersist(性能功能),Kerberos 和~/.ssh/config 跳转主机设置等选项。但是,当使用 Enterprise Linux 6 操作系统作为控制机器(Red Hat Enterprise Linux 和 CentOS 等衍生产品)时,OpenSSH 的版本可能太旧而无法支持 ControlPersist。在这些操作系统上,Ansible 将回归使用名为'paramiko'的 OpenSSH 的高质量 Python 实现。如果您希望使用 Kerberized SSH 等功能,请考虑使用 Fedora,macOS 或 Ubuntu 作为控制计算机,直到您的平台可以使用较新版本的 OpenSSH。

有时您会遇到不支持 SFTP 的设备。这种情况很少见,但如果发生这种情况,您可以在配置 Ansible 中切换到 SCP 模式。

与远程计算机通话时,Ansible 默认假设您使用的是 SSH 密钥。鼓励使用 SSH 密钥,但也可以通过提供选项在需要时使用密码验证--ask-pass。如果使用 sudo 功能,当 sudo 需要密码时,也提供--ask-become-pass(之前--ask-sudo-pass 已弃用)。

二、 配置被管理的主机清单

如你所想,既然 Ansible 用来管理众多的服务器,那么肯定会有一个文件记录着那些被管理的主机。文件 /etc/ansible/hosts 就是默认的记录着被管理的主机清单文件。

cat /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

下面我们编辑 /etc/ansible/hosts 文件,在文本最后添加如下内容:

[node1]
apple ansible_host=192.168.153.129 ansible_user=root ansible_password=root

上面的配置中:

  • node1 是主机组名,我这里只配置了 192.168.153.129 这台主机
  • apple 是主机名称,根据实际情况起一个简单易记的名字,也可以填写 IP
  • ansible_host=192.168.153.129 ,配置主机的 IP 地址。如果 DNS 能解析的话,也可以配置 hostname,
  • ansible_user=root ,Ansible 访问时使用的用户
  • ansible_password=root,Ansible 访问时使用的用户的密码

三、Ansible 初体验

  • 3.1 现在 ping 所有节点:$ ansible all -m ping

我的主控节点执行上面的命令后得到的结果如下:

[root@localhost ~]# ansible all -m ping
apple | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

四、配置免密登陆

在第三节中,我们在 /etc/ansible/hosts 文件中配置主机清单时也配置了用户名和密码,在生产环境中,这是十分不安全的。正如第二节,官方说到的,鼓励使用 SSH 密钥进行通信,那么我们就配置好主控节点和被管理节点的 SSH 免密登陆,那样就无需再配置用户名和密码了。

配置免密登陆参考链接

根据上面的教程配置好了免密登陆后,/etc/ansible/hosts 的配置修改为下面的样子:

[node1]
apple ansible_host=192.168.153.129
#apple ansible_host=192.168.153.129 ansible_user=root ansible_password=root

执行以下命令验证:ansible all -a "/bin/echo hello"

我的机器得到结果如下:

[root@localhost ~]# ansible all -a "/bin/echo hello"
apple | CHANGED | rc=0 >>
hello

可以看到已经成功了。

注意:Ansible 会尝试使用您当前的用户名远程连接到计算机,就像 SSH 一样。要覆盖远程用户名,只需使用“ -u”参数。

如果您想访问 sudo 模式,还有一些标志可以做到这一点:

# as bruce
$ ansible all -m ping -u bruce
# as bruce, sudoing to root (sudo is default method)
$ ansible all -m ping -u bruce --become
# as bruce, sudoing to batman
$ ansible all -m ping -u bruce --become --become-user batman

五、一个有用的提示

运行命令时,可以使用“localhost”或“127.0.0.1”指定本地服务器作为服务器名称。

例:

$ ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"'

我的服务器执行结果如下:

[root@localhost ~]# ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"'
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

当然,我们也可以配置 /etc/ansible/hosts 文件来明确指定 localhost。在 /etc/ansible/hosts 文件最后添加以下配置:

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"

再次执行 ansible all -a "/bin/echo hello" 命令,结果如下:

[root@localhost ~]# ansible all -a "/bin/echo hello"
localhost | CHANGED | rc=0 >>
hello

apple | CHANGED | rc=0 >>
hello

可见配置已经生效。

六、下一节是?

你或许对上面执行的命令还不是很理解,不过没有关系。我提倡的是在实践中学习,在学习中总结,后面的教程会一一答疑的,别急,跟着教程一步一步来就好。

  • Ansible
    27 引用 • 3 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    946 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...