Linux之自动化运维工具ansible、ansible模块(1)

简介: Linux之自动化运维工具ansible、ansible模块(1)

1、什么是ansible?

ansible是一个自动化运维工具的名称,是基于Python开发,集合了众多运维工具的优点(puppet、fabric、slatstack),实现批量系统配置,程序的部署。

Linux运维:自动化(脚本)、智能化、平台化。由于Linux运维人员,人肉运维不可取–效率慢,如果敲错出事,于是就诞生了一系列的运维工具,ansible就是其中之一。

日常运维:

1、软件安装-查看依赖 漏铜 升级 Debian-apt-get

2、服务的配置-架构搭建-负载均衡(高可用)-等价路由-lvs

3、运行脚本

4、升级

5、备份

6、告警

ansible依赖于:paramiko、PyYam和jinja三个关键组件,基于ssh协议,只要ssh协议,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。

2、ansible的组成

1、host inventory --定义客户机,可以对客户机进行分类:db类、web类等

2、playbook 剧本 让主机按照我给定的剧本去完成一些事情。

3、module 模块 实现一个个功能的程序。

4、pluging 插件 实现一些额外的小功能。

3、ansible环境安装配置以及实例测试

1、实验环境

1、准备三台虚拟机:

A机器:192.168.2.152(ansible)

B机器:192.168.2.132

C机器:192.168.2.137

实验前提,做好免密登录认证,使用ssh服务,详情可见ssh服务免密登录

A---->B, A----->C A可以免密码登录到B机器和C机器上。

首先在A机器上操作(建立免密通道):

先连接到B机器(192.168.2.132)

[root@sc-master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YgRssTONWSCv0/JgvN//oI54fJL8bTClAP4oqHjg1Ws root@sc-master
The key's randomart image is:
+---[RSA 2048]----+
|  ..+o.          |
|  .ooB           |
| . oB o          |
| ..o.+  .        |
|. Boo.ooS        |
|+..B.o+.         |
|+ooo...o.        |
|o..o*E.o..       |
| ...+==oo..      |
+----[SHA256]-----+
[root@sc-master ~]# cd /root/.ssh
[root@sc-master .ssh]# ls
authorized_keys  config  id_rsa  id_rsa.pub  known_hosts

登录测试:看能不能登录到B机器上,第一次登录需要输入密码,第二次登录就不需要密码了。

[root@sc-master .ssh]# ssh-copy-id -p 22 -i id_rsa.pub root@192.168.2.132
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out an are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now to install the new keys
root@192.168.2.132's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh -p '22' 'root@192.168.2.132'"
and check to make sure that only the key(s) you wanted were added.

这里直接登录,就不需要输入密码。建立成功。

[root@sc-master .ssh]# ssh -p '22' 'root@192.168.2.132'
Last login: Sat Aug 20 11:00:50 2022 from 192.168.2.116

然后查看B机器上~/.ssh目录下生成的A机器上生成的authorized_keys 文件。

[root@sc-slave .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@sc-slave .ssh]# cat id_rsa.pub

然后就是建立和C机器之间的免密通信。方法同上,直接将A机器上生成的公钥上传到137机器上。

[root@sc-master .ssh]# ssh-copy-id -p 22 -i id_rsa.pub root@192.168.2.137
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out an are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now to install the new keys
root@192.168.2.137's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh -p '22' 'root@192.168.2.137'"
and check to make sure that only the key(s) you wanted were added.

然后直接登录。

[root@sc-master .ssh]# ssh -p '22' 'root@192.168.2.137'
Last login: Sat Aug 20 11:01:11 2022 from 192.168.2.116
[root@nginx-kafka03 ~]# exit
登出
Connection to 192.168.2.137 closed.
[root@sc-master .ssh]# ssh -p '22' 'root@192.168.2.137'
Last login: Sat Aug 20 11:05:18 2022 from nginx-kafka01
[root@nginx-kafka03 ~]# exit
登出
Connection to 192.168.2.137 closed.

2、在A机器上安装ansible

[root@a .ssh]# yum install epel-release
[root@b ansible]# yum install ansible

3、配置:配置目录

/etc/ansible/ansible.cfg :ansible的主配置文件,此文件主要定义了roles_path的路径,主机清单路径,连接清单中的主机方式等等。

**/etc/ansible/hosts:**这个配置文件就是默认的主机清单配置文件, 可以通过ansible.cfg 重新定义。

备份/etc/ansible/hosts:

[root@sc-master ansible]# cp hosts hosts.bak

编辑 /etc/ansible/hosts文件:

[root@b ansible]# cat hosts
[webser]
192.168.2.132:22    
192.168.2.137:22

[webser]表示将需要管理的主机添加到webser组

如果通过ssh登陆的端口不是22号端口,就需要在配置文件中指明端口号

除了以上两个重要的配置文件还有三个重要的可执行文件分别是:

**ansible 主执行程序,**一般用于命令行下执行。

ansible-playbook 执行playbook中的任务。

ansible-doc 获取各模块的帮助信息。

2、ansible的使用

HOST-PATTERN: 匹配主机模式,如all表示所有主机

-m MOD_NAME: 模块名 如:ping、shell模块

-a MOD_ARGS : 模块执行的参数

-f FORKS : 生成几个子进程进行执行

-C :(不执行,模拟跑)

**-u Username :**某主机的用户名

-c CONNection: 连接方式(default smart)

3、ansible 体验

分组执行:

指定ansible管理的所有主机都执行命令(在tmp目录下创建sc目录)

[root@sc-master ansible]# ansible all -m shell -a "mkdir /tmp/sc"
[WARNING]: Consider using the file module with state=directory rather than running
'mkdir'.  If you need to use command because file is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg
to get rid of this message.
192.168.2.132 | CHANGED | rc=0 >>
192.168.2.137 | CHANGED | rc=0 >>

rc ==》 return code --为0表示执行成功。

使用pssh服务去批量处理。

[root@sc-master ansible]# pssh -h hosts "mkdir /tmp/sc2"
[1] 11:44:55 [FAILURE] [webser] Exited with error code 255
[2] 11:44:56 [SUCCESS] 192.168.2.132:22
[3] 11:44:56 [SUCCESS] 192.168.2.137:22

ansible不是一个守护进程(起来后一直在内存中运行,等待其他人访问),ansible就是一个命令脚本,使用python写的。

[root@sc-master ansible]# ps -ef|grep ansible
root       8411   7979  0 11:47 pts/0    00:00:00 grep --color=auto ansible

4、ansible的模块

1、copy模块:从本地copy文件分发到目录主机路径

2、fetch模块:从远程主机拉取文件到本地

3、command模块:在远程主机上执行命令,不进行shell解析。

4、shell模块:需要两台机器上也有能执行的命令

5、file模块:设置文件属性(创建文件)

6、cron模块:对目标主机生成计划任务

7、yum模块:yum安装软件包的模块

8、service模块:服务管理模块

9、script模块:把本地的脚本传到远端执行;前提是到远端可以执行

1、copy模块

从本地copy文件分发到目录主机路径

参数说明:

src=源文件路径
dest=目标路径
注意src=路径后面
带/表示里面的所有内容复制到目标目录下**,不带/是目录递归复制过去

content=自行填充的文件内容

owner 属主

group 属组

mode 权限

例如:1、将/lianxi/ansible-copy复制到主机的/lianxi/ansible下,并设置权限为777,属主为sanchuang,属组为sanchuang。

[root@b lianxi]# ansible all -m copy -a "src=/lianxi/ansible-copy dest=/lianxi/ansible mode=777 owner=sanchuang group=sanchuang"

2、指定webser组,将/etc/passwd 复制到主机/tmp目录下,指定权限777

[root@b copy_dir]# ansible webser -m copy -a "src=/etc/passwd  dest=/tmp mode=777"

3、指定webser组,将/lianxi下的aa文件拷贝到主机下的/tmp/sc下的aa.txt文件。

[root@sc-master ansible]# ansible webser -m copy -a "src=/lianxi/aa dest=/tmp/sc/aa.txt"
192.168.2.137 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "6dbdec21eba690a18d6fada6e33744c34d826b39", 
    "dest": "/tmp/sc/aa.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "dfd35885c2b6d0c25a7ba699b6ced4f7", 
    "mode": "0644", 
    "owner": "root", 
    "size": 452, 
    "src": "/root/.ansible/tmp/ansible-tmp-1660967660.93-8472-73428149734911/source", 
    "state": "file", 
    "uid": 0
}

src目录后面带/和不带/的区别:

① 带/ 表示拷贝目录下的子文件或者子文件夹

② 不带/ 表示拷贝整个目录

不带/的例题:/lianxi/copy_dir

将lianxi下的copy_dir整个目录都拷贝到主机的/lianxi/ansible目录下。

[root@b copy_dir]# ansible all -m copy -a "src=/lianxi/copy_dir dest=/lianxi/ansible"
192.168.0.48 | CHANGED => {
    "changed": true, 
    "dest": "/lianxi/ansible/", 
    "src": "/lianxi/copy_dir"
}

测试:将ansible机器上的/lianxi下的myproject的所有目录文件夹传入到主机下的lianxi下的ansible文件夹中。如果对方主机不存在的目录会自动帮助你新建,可以看下面的。

[root@sc-master lianxi]# ansible all -m copy -a "src=/lianxi/myproject dest=/lianxi/ansible"

执行拷贝目录的如果目录文件比较大,反应速度有点慢。需要等待。

被上传文件的主机:B机器

首先查看主机上的/lianxi/ansible文件夹是不存在的。

[root@sc-slave .ssh]# cd /lianxi
-bash: cd: /lianxi: 没有那个文件或目录
[root@sc-slave .ssh]# cd /
[root@sc-slave /]# cd /lianxi
-bash: cd: /lianxi: 没有那个文件或目录

C机器:也是如此。

在执行了上面那条命令之后,就有自动帮助创建了文件夹。

B机器上:

[root@sc-slave /]# ls
backup  boot  dev  home    lib    media  opt   root  sbin  sys  usr
bin     data  etc  lianxi  lib64  mnt    proc  run   srv   tmp  var
[root@sc-slave /]# cd /lianxi
[root@sc-slave lianxi]# ls
ansible
[root@sc-slave lianxi]# cd ansible
[root@sc-slave ansible]# ls
myproject

C机器上:

[root@nginx-kafka03 /]# cd /lianxi
[root@nginx-kafka03 lianxi]# ls
aa  ansible  bb  cc  file_num.sh  lianxi  tongle  xieshan

可以看到被执行了那条命令之后,B、C两机器上都有这个被上传的整个目录,那就说明命令执行成功。

Linux之自动化运维工具ansible、ansible模块(2)+https://developer.aliyun.com/article/1557940

相关文章
|
8天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
3天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
6天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
27 4
|
5天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
20 2
|
6天前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible实战指南
【10月更文挑战第36天】在快速迭代的数字时代,自动化运维成为提升效率、减少错误的关键。Ansible以其简洁性、易用性和强大的功能脱颖而出。本文将带你了解Ansible的核心组件,通过实际案例深入其应用,并探讨如何结合最佳实践优化你的自动化工作流程。无论你是新手还是有经验的运维人员,本指南都将为你提供宝贵的知识和技能。
|
6天前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible进行批量配置管理
【10月更文挑战第36天】在现代的IT基础设施中,高效和可靠的系统管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具来简化运维任务,包括安装、配置、部署应用程序以及管理系统更新。我们将探讨Ansible的核心概念,并通过实际代码示例展示其应用。通过阅读本文,读者将获得使用Ansible改善日常运维工作流程的实用知识。
|
8天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
11天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
16天前
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
57 1
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4