Ansible自动化运维(一)

简介: Ansible自动化运维

   Ansible特点如下:

  1. Ansible基于Python开发,运维工程师对其二次开发相对较容易。
  2. Ansible丰富的内置模块,基本可以满足一切需求。
  3. 管理模式非常简单,一条命令可以影响上千台机器。
  4. 无客户端模式 ,底层通过SSH通信。

案例环境

       Ansible可以使上千台机器受到影响,本次案例环境中只添加连台管理操作即可。

Ansible安装

🍤通过YUM安装Ansible,本次通过配置网络仓库。配置参考文章配置网络源仓库

1. [root@ansible ~]# yum -y install ansible                //yum安装Ansible
2. [root@ansible ~]# ansible --version                 //查看版本,验证安装结果
3. ansible 2.9.27
4.   config file = /etc/ansible/ansible.cfg
5.   configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
6.   ansible python module location = /usr/lib/python2.7/site-packages/ansible
7.   executable location = /usr/bin/ansible
8.   python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

🍤创建SSH免交互登录

       Ansible通过SSH对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是通过密钥对认证。前者需要和系统交互,而后者是免交互登录。

1. [root@ansible ~]# ssh-keygen -t rsa             //生成密钥对
2. Generating public/private rsa key pair.
3. Enter file in which to save the key (/root/.ssh/id_rsa):    //密钥对存放路径
4. Created directory '/root/.ssh'.
5. Enter passphrase (empty for no passphrase):         //输入私钥密码,直接按Enter表示无密码
6. Enter same passphrase again: 
7. Your identification has been saved in /root/.ssh/id_rsa.
8. Your public key has been saved in /root/.ssh/id_rsa.pub.
9. The key fingerprint is:
10. 3e:8a:bc:b7:70:9b:f4:a1:21:3f:77:af:54:20:a7:7a root@ansible
11. The key's randomart image is:
12. +--[ RSA 2048]----+
13. |                 |
14. |                 |
15. |        . o      |
16. |         + .     |
17. |        S   .    |
18. |       o   .     |
19. |    o = E .      |
20. |   . BoO.+.      |
21. |    +oB+...o.    |
22. +-----------------+
23. [root@ansible ~]# ssh-copy-id root@192.168.1.20         //通过scp命令复制公钥到远端IP
24. [root@ansible ~]# ssh-copy-id root@192.168.1.30
25. [root@ansible ~]# ssh 192.168.1.20                      //测试查看可以免密码登录
26. Last login: Tue Aug  9 20:09:08 2022
27. [root@localhost ~]# exit                                //查看后退出SSh登录
28. logout
29. Connection to 192.168.1.20 closed.

       经过以上操作,对于Ansible的部署就已经完成了,下面就是通过Ansible对设备进行管理了。

Ansible配置

       inventory是Ansible管理主机信息的配置文件,相对于系统Hosts文件的功能,默认存放在/etc/ansible/hosts。默认情况下,通过访问22端口(SSH)来管理设备,若目标使用非默认的SSH端口,需要在主机IP或域名后添加冒号加端口号标明,以行为单位分隔配置。hosts文件也还支持通配符。

       可以将同一个主机同时归置在多个不同的组中。

1. [root@ansible ~]# vim /etc/ansible/hosts 
2. ......//配置文件内添加下面配置
3. [web]
4. 192.168.1.20
5. 192.168.1.30

       🍤配置完成后,可以针对hosts定义的组进行远程操作,也可以针对组中指定的某一个主机操作。下面介绍如何针对特定的服务器操作。

  • 只对web组中192.168.1.20主机操作。通过--limit参数限定主机的变更。
1. [root@ansible ~]# ansible web -m command -a "systemctl status httpd" --limit "192.168.1.20"
2. 192.168.1.20 | FAILED | rc=4 >>                         //因为1.20主机没有安装httpd服务,所以可能会显示红色错误
3. Unit httpd.service could not be found.non-zero return code

       因为没有安装httpd服务,可以用“ansible all -f 5 -m ping”测试是否成功。

  • 只对192.168.1.20主机操作。通过ip限定主机的变更。
1. [root@ansible ~]# ansible 192.168.1.20 -m command -a "systemctl status httpd"
2. 192.168.1.20 | FAILED | rc=4 >>
3. Unit httpd.service could not be found.non-zero return code
  • 只对192.168.1.0网段主机操作。通过配置通配符限定主机的变更。
1. [root@ansible ~]# ansible 192.168.1.* -m command -a "systemctl status httpd"
2. 192.168.1.20 | FAILED | rc=4 >>
3. Unit httpd.service could not be found.non-zero return code
4. 192.168.1.30 | FAILED | rc=4 >>
5. Unit httpd.service could not be found.non-zero return code

Ansible命令

       Ansible的维护命令大多以Ansible开头,在中断输入ansible后连续按两次Tab键,会补全所有以ansible字母开头的命令。

1. [root@ansible ~]# ansible
2. ansible               ansible-doc           ansible-playbook-2
3. ansible-2             ansible-doc-2         ansible-playbook-2.7
4. ansible-2.7           ansible-doc-2.7       ansible-pull
5. ansible-config        ansible-galaxy        ansible-pull-2
6. ansible-connection    ansible-galaxy-2      ansible-pull-2.7
7. ansible-console       ansible-galaxy-2.7    ansible-vault
8. ansible-console-2     ansible-inventory     ansible-vault-2
9. ansible-console-2.7   ansible-playbook      ansible-vault-2.7

ansible

       ansible是生产环境中使用非常频繁的命令之一,主要在以下场景使用。

  1. 非固化需求。
  2. 临时一次性操作。
  3. 二次开发接口调用。

🍤语法如下:

ansible <host_pattern> [options]

🍤可用选项如下:

-v(--verbose):输出详细的执行过程信息,可以得到执行过程所有信息。

-i PATH(-inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts。

-f NUM(--forks=NUM):并发线程数,默认为5个线程。

--private-key=PRIVATE_KEY_FILE:指定秘钥文件。

-m NAME,--module-name=NAME:指定执行使用的模块。

-M DIRECTORY(--module-path=DIRECTORY):指定模块存放路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。

-a ARGUMENTS(--args=ARGUMENTS):指定模块参数。

-u USERNAME(--user=USERNAME):指定远程主机以USERNAME运行命令。

-l subset(--limit=SUBSET):限制运行主机。

--list-hosts:列出符合条件的主机列表,不执行任何命令。

🍤检查所有主机是否存活。命令如下:

       执行主机为192.168.1.20和192.168.1.30,SUCCESS表示命令执行成功。“=>{}”表示返回结果,“changed”:false表示没有对主机做出更改,“ping”:“pong”表示执行了ping命令的返回结果。

1. [root@ansible ~]# ansible all -f 5 -m ping
2. 192.168.1.30 | SUCCESS => {
3.    "ansible_facts": {
4.        "discovered_interpreter_python": "/usr/bin/python"
5.     }, 
6.    "changed": false, 
7.    "ping": "pong"
8. }
9. 192.168.1.20 | SUCCESS => {
10.    "ansible_facts": {
11.        "discovered_interpreter_python": "/usr/bin/python"
12.     }, 
13.    "changed": false, 
14.    "ping": "pong"
15. }

🍤列出web组所有的主机列表。命令如下:

       --list选项列出web组所有主机列表信息,web组中包括两台主机192.168.1.20和192.168.1.30。

1. [root@ansible ~]# ansible web --list
2. hosts (2):
3.    192.168.1.20
4.    192.168.1.30

🍤批量显示web组中的磁盘使用空间。命令如下:

1. [root@ansible ~]# ansible web -m command -a "df -hT"
2. 192.168.1.20 | CHANGED | rc=0 >>
3. 文件系统            类型      容量  已用  可用 已用% 挂载点
4. /dev/mapper/cl-root xfs        17G  4.3G   13G   25% /
5. devtmpfs            devtmpfs  473M     0  473M    0% /dev
6. tmpfs               tmpfs     489M  144K  489M    1% /dev/shm
7. tmpfs               tmpfs     489M  7.1M  482M    2% /run
8. tmpfs               tmpfs     489M     0  489M    0% /sys/fs/cgroup
9. /dev/sda1           xfs      1014M  173M  842M   18% /boot
10. tmpfs               tmpfs      98M  8.0K   98M    1% /run/user/0
11. /dev/sr0            iso9660   4.1G  4.1G     0  100% /run/media/root/CentOS 7 x86_64
12. 192.168.1.30 | CHANGED | rc=0 >>
13. 文件系统            类型      容量  已用  可用 已用% 挂载点
14. /dev/mapper/cl-root xfs        17G  4.3G   13G   25% /
15. devtmpfs            devtmpfs  473M     0  473M    0% /dev
16. tmpfs               tmpfs     489M   88K  489M    1% /dev/shm
17. tmpfs               tmpfs     489M  7.1M  482M    2% /run
18. tmpfs               tmpfs     489M     0  489M    0% /sys/fs/cgroup
19. /dev/sda1           xfs      1014M  173M  842M   18% /boot
20. tmpfs               tmpfs      98M  8.0K   98M    1% /run/user/0
21. /dev/sr0            iso9660   4.1G  4.1G     0  100% /run/media/root/CentOS 7 x86_64

       🍤 Ansible的返回结果非常友好,由三种颜色来表示执行结果。红色:表示执行过程有异常;橘黄色:表示命令执行后目标有状态变化;绿色:表示执行成功且没有对目标机器做修改。

Ansible-doc

       Ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及案例介绍。

🍤语法如下:

ansible-doc [otions] [module......]

🍤列出支持的模块:

[root@ansible ~]# ansible-doc -l                                 //按q退出

查询ping模块的说明信息。

[root@ansible ~]# ansible-doc ping

Ansible-playbook

       Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux中的sh或source命令,用来执行系列任务。playbook.yml文件需要体现编写好,建议指定playbook.yml的绝对路径。

🍤使用方法如下:

[root@ansible ~]# ansible-playbook playbook.yml

Ansible-console

       Ansible-console是Ansible为用户提供的一款交互式工具,类似于windows的cmd以及Linux中的Shell。exit退出或者快捷键Ctrl+D或Ctrl+C。

🍤命令如下(输入命令后会有一个浅色的字体出现):

1. [root@ansible ~]# ansible-console
2. Welcome to the ansible console.
3. Type help or ? to list commands.
4. 
5. root@all (2)[f:5]$ cd web
6. root@web (2)[f:5]$ list
7. 192.168.1.20
8. 192.168.1.30

Ansible模块

command模块

       command模块在远程主机执行命令,不支持管道、重定向等Shell的特性。

🍤常用参数如下:

chdir:在远程主机上运行命令前要提前进入的目录。

creates:在命令运行时创建一个文件,如果文件已经存在,则不执行创建命令。

removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务。

executeble:指明运行命令的shell程序。

🍤在所有主机上运行“ls ./”命令,运行前切换到/home目录。命令如下:

1. [root@ansible ~]# ansible all -m command -a "chdir=/home ls ./"
2. 192.168.1.20 | CHANGED | rc=0 >>
3. z3
4. 192.168.1.30 | CHANGED | rc=0 >>
5. z3

Shell模块

       Shell模快在远程主机执行命令,相当于调用远程主机的Shell进程,然后在Shell下打开一个子Shell运行命令。和command模块的区别是它支持Shell特性,如管道、重定向等。

1. [root@ansible ~]# ansible web -m shell -a 'echo "hello" >> /tmp/hello.txt'
2. 192.168.1.20 | CHANGED | rc=0 >>
3. 
4. 192.168.1.30 | CHANGED | rc=0 >>
5. 
6. [root@ansible ~]# ssh 192.168.1.20 cat /tmp/hello.txt
7. hello
8. [root@ansible ~]# ssh 192.168.1.30 cat /tmp/hello.txt
9. hello

copy模块

       copy模块用于复制指定主机文件到远程主机的指定位置。

🍤常见参数如下:

dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容。

src:指出源文件的路径,可以使用相对路径和绝对路径,支持直接指定目录。如果源是目录,则目标也要是目录。

mode:指出复制时,目标文件的权限,可选。

owner:指出复制时,目标文件的属主,可选。

group:指出复制时,目标文件的属组,可选。

content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content致命的数据到目标文件中。

1. [root@ansible ~]# ansible web -m copy -a "src=/etc/hosts dest=/tmp/ mode=777 owner=nobody group=root"
2. 192.168.1.20 | CHANGED => {
3.    "ansible_facts": {
4.        "discovered_interpreter_python": "/usr/bin/python"
5.     }, 
6.    "changed": true, 
7.    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
8.    "dest": "/tmp/hosts", 
9.    "gid": 0, 
10.    "group": "root", 
11.    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
12.    "mode": "0777", 
13.    "owner": "nobody", 
14.    "size": 158, 
15.    "src": "/root/.ansible/tmp/ansible-tmp-1660217157.43-4832-6734297780200/source", 
16.    "state": "file", 
17.    "uid": 99
18. }
19. 192.168.1.30 | CHANGED => {
20.    "ansible_facts": {
21.        "discovered_interpreter_python": "/usr/bin/python"
22.     }, 
23.    "changed": true, 
24.    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
25.    "dest": "/tmp/hosts", 
26.    "gid": 0, 
27.    "group": "root", 
28.    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
29.    "mode": "0777", 
30.    "owner": "nobody", 
31.    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
32.    "size": 158, 
33.    "src": "/root/.ansible/tmp/ansible-tmp-1660217157.44-4833-6859918093267/source", 
34.    "state": "file", 
35.    "uid": 99
36. }
37. [root@ansible ~]# ssh 192.168.1.20 ls -l /tmp/hosts
38. -rwxrwxrwx 1 nobody root 158 8月  11 19:25 /tmp/hosts
39. [root@ansible ~]# ssh 192.168.1.30 ls -l /tmp/hosts
40. -rwxrwxrwx. 1 nobody root 158 8月  11 19:25 /tmp/hosts


相关文章
|
19天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
14天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
9天前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
17天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
41 4
|
15天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
16天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
31 2
|
17天前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible实战指南
【10月更文挑战第36天】在快速迭代的数字时代,自动化运维成为提升效率、减少错误的关键。Ansible以其简洁性、易用性和强大的功能脱颖而出。本文将带你了解Ansible的核心组件,通过实际案例深入其应用,并探讨如何结合最佳实践优化你的自动化工作流程。无论你是新手还是有经验的运维人员,本指南都将为你提供宝贵的知识和技能。
|
17天前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible进行批量配置管理
【10月更文挑战第36天】在现代的IT基础设施中,高效和可靠的系统管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具来简化运维任务,包括安装、配置、部署应用程序以及管理系统更新。我们将探讨Ansible的核心概念,并通过实际代码示例展示其应用。通过阅读本文,读者将获得使用Ansible改善日常运维工作流程的实用知识。
|
24天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
49 4
|
22天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。