自动化运维工具-------Ansible(超详细)

这篇具有很好参考价值的文章主要介绍了自动化运维工具-------Ansible(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Ansible相关

1、简介

Ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架

2、Ansible特性

1)、no agents:不需要在被管控主机上安装任何客户端,更新时,只需在操作机上进行一次更新即可(不用安装客户端。分布式的)

2)、no server:无服务器端,使用时直接运行命令即可
3)、modules in any languages:基于模块工作,可使用任意语言开发模块
4)、yaml,not code:使用yaml语言定制剧本playbook
5)、ssh by default:基于SSH工作
6)、strong multi-tier solution:可实现多级指挥

3、Ansible常用模块

语法结构
## ansible  <pattern>   -m <module_name>   -a <arguments>
pattern--主机清单里定义的主机组名,主机名,IP,别名等,all表示所有的主机,支持通配符,正则
-m module_name: 模块名称,默认为command
-a arguments: 传递给模块的参数
-o  单行显示
ping模块
##ping模块使用扩展
1.指定单台机器:
[root@ansible-server ~]# ansible ansible-web1 -m ping -o

2.同时指定多台机器:
[root@ansible-server ~]# ansible ansible-web1,ansible-web2 -m ping -o

3.指定组名:
[root@ansible-server ~]# ansible  webservers1 -m ping -o
[root@ansible-server ~]# ansible  all -m ping -o
copy模块
1.远程复制备份模块:copy
模块参数详解:
src=:指定源文件路径
dest=:目标地址(拷贝到哪里)
owner:指定属主
group:指定属组
mode:指定权限,可以以数字指定比如0644
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
[root@ansible-server ~]# vim a.txt  #创建一个测试文件
123123
[root@ansible-server ~]# ansible ball -m copy -a 'src=/root/a.txt dest=/opt owner=root group=root mode=644' -o
[root@ansible-server ~]# vim a.txt  #追加如下内容
123123
234234
[root@ansible-server ~]# ansible ball -m copy -a 'src=/root/a.txt dest=/opt/ owner=root group=root mode=644 backup=true' -o
注释:如果文件没有变化,不会备份。只有文件内容不同,才会做备份。

登录被控制机器其中一台查看
[root@ansible-web1 ~]# cat /opt/a.txt.15301.2019-09-01\@00\:35\:18~

[root@ansible-server ~]# ansible weball -m shell -a 'mv /mnt/qf.txt /tmp' -o
移动被控制节点的文件
yum模块
2.软件包管理 yum模块
安装apache
[root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=latest" -o
state=     #状态是什么,干什么
state=absent       用于remove安装包
state=latest       表示最新的
state=removed      表示卸载
卸载软件:
[root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=removed" -o
或者
[root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=absent" -o
service模块
3.服务管理service模块
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started" #启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=stopped" #停止
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=restarted" #重启
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=yes" #开机启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=no"  #开机关闭
file模块
4.文件模块file
模块参数详解:
owner:修改属主
group:修改属组
mode:修改权限
path=:要修改文件的路径
recurse:递归的设置文件的属性,只对目录有效
        yes:表示使用递归设置
state:
touch:创建一个新的空文件
directory:创建一个新的目录,当目录存在时不会进行修改
#创建一个文件
[root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/youngfit1.txt mode=777 state=touch'
[root@ansible-server ~]# ansible ansible-web2 -m file -a 'path=/tmp/youngfit2.txt mode=777 owner=nginx state=touch'
#创建一个目录
[root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/qf mode=777 state=directory' 

被控节点ansible-web2操作:
[root@ansible-web2 tmp]# cd /opt/
[root@ansible-web2 opt]# ll haha
total 0
-rw-r--r--. 1 root  root 0 Sep 12 09:41 haha2.txt
-rw-r--r--. 1 nginx root 0 Sep 12 09:41 haha.txt

[root@ansible-server ~]# ansible ansible-web2 -m file -a "path=/opt/haha owner=nginx group=nginx  state=directory recurse=yes"

被控节点查看:
[root@ansible-web2 opt]# ll haha
total 0
-rw-r--r--. 1 nginx nginx 0 Sep 12 09:41 haha2.txt
-rw-r--r--. 1 nginx nginx 0 Sep 12 09:41 haha.txt
setup模块
5.收集信息模块setup
[root@ansible-server ~]# ansible webservers1 -m setup  #收集所有信息
[root@ansible-server ~]# ansible webservers1 -m setup -a 'filter=ansible_all_ipv4_addresses' #只查询ipv4的地址
filter:过滤
模块扩展知识点

ansible的shell模块与commend模块的区别:

不加 -m  默认是 command 模块

command模块不是调用的shell的指令,所以没有bash的环境变量,也不能使用shell的一些操作方式,其他和shell没有区别

二、准备环境

主机:4台  1个控制节点 3个被控制节点

解析:本地互相解析(所有机器)
## vim /etc/hosts
192.168.85.128 nsible-server  (控制节点服务器端)
192.168.85.129 ansible-web1
192.168.85.132 ansible-web2
192.168.85.133 ansible-web3

##配置ssh公钥认证:控制节点需要发送ssh公钥给所有被控制节点
[root@ansible-server ~]# ssh-keygen
[root@ansible-server ~]# ssh-copy-id -i 192.168.85.129  #所有被控节点机器
[root@ansible-server ~]# ssh-copy-id -i 192.168.85.132
[root@ansible-server ~]# ssh-copy-id -i 192.168.85.133  

##所有机器:
systemctl stop firewalld && setenforce 0

三、安装配置与测试(在控制节点上安装即可)

1、安装所需的扩展yum源
[root@ansible-server ~]# yum install -y epel-release
2、安装并查看版本
##安装ansible
[root@ansible-server ~]# yum install -y ansible
 
##查看版本
[root@ansiable-server ~]# ansible --version

##看帮助
[root@ansible-server ~]# ansible --help
3、配置------inventory主机清单清单文件(默认位置/etc/ansible/hosts)

注:inventory文件通常用于定义要管理主机的认证信息,例如ssh登录用户名、密码以及key相关信息。主配置文件:/etc/ansible/ansible.cfg  #主要设置一些ansible初始化的信息,比如日志存放路径、模块、等配置信息

1)、配置
[root@ansible-server ~]# vim /etc/ansible/hosts

##1、单独指定主机,可以使用主机名称或IP地址
ansible-web1 

##如果未解析添加ip
192.186.85.132

##如果解析添加主机名
ansible-web3

##2、使用[]标签指定主机组 ----标签自定义
[webservers1]     #组一
ansible-web1
[webservers2]     #组二
ansible-web2
[webservers1]     #组三
ansible-web3


##3、组可以包含其他组:
[all:children]      #children-照写 #all包括三个子组
webservers1        #组一
webservers2        #组二
webservers3        #组三

##4.为一个组指定变量,组内每个主机都可以使用该变量:
[weball:vars]         #设置变量,vars--照写
ansible_ssh_port=22     
ansible_ssh_user=root   
ansible_ssh_private_key_file=/root/.ssh/id_rsa  
##ansible_ssh_pass=test      #也可以定义密码,如果没有互传秘钥可以使用密码。
2)、扩展(Ansible Inventory 常见的内置参数)

自动化运维工具-------Ansible(超详细),运维,自动化,ansible

3)、使用命令查看是否联通被控制节点
##语法:ansible  组名  --list-hosts
[root@ansible-server ~]# ansible  all --list-hosts
  hosts (3):
    ansible-web1
    ansible-web2
    ansible-web3

##使用ping模块
[root@ansible-server ~]# ansible -i all -m ping -o
##注释:如果不通,手动连接第一次,第一次需要手动输入密码。"第一次"
-i:指定清单文件
##注意:这里的ping并不是真正意义上的ping而是探测远程主机ssh是否可以连接!判断ssh端口是否存活
-o:单行显示
4)、测试
1.给节点增加用户:
[root@ansible-server ~]# ansible webservers1 -m shell -a 'useradd tom'
ansible-web1 | CHANGED | rc=0 >>
[root@ansible-server ~]# ansible webservers1  -m shell -a 'grep tom /etc/passwd'
ansible-web1 | CHANGED | rc=0 >>
tom:x:1000:1000::/home/tom:/bin/bash
重定向输出到本地文件中:
[root@ansible-server ~]# ansible webservers1 -m shell -a 'df -Th' > /opt/a.txt
[root@ansible-server ~]# cat /opt/a.txt 
ansible-web1 | CHANGED | rc=0 >>
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        18G  1.1G   17G   6% /
devtmpfs                devtmpfs  226M     0  226M   0% /dev
tmpfs                   tmpfs     237M     0  237M   0% /dev/shm
tmpfs                   tmpfs     237M  4.7M  232M   2% /run
tmpfs                   tmpfs     237M     0  237M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  125M  890M  13% /boot
tmpfs                   tmpfs      48M     0   48M   0% /run/user/0

四、ansible-playbook(剧本)

1、Playbook介绍

playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的tasks,可以让远端主机达到预期的状态。playbook是由一个或多个”play”组成的列表。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机器的配置统一,并很简单的执行日常任务。

ansible通过不同的模块实现相应的管理,管理的方式通过定义的清单文件(hosts)所管理的主机包括认证的方式连接的端口等。所有的功能都是通过调用不同的模块(modules)来完成不同的功能的。不管是执行单条命令还是play-book都是基于清单文件。

playbook格式

playbook由yaml语言编写,便于人理解和阅读,同时便于书写。

一个剧本里面可以有多个play,每个play只能有一个tasks,每个tasks可以有多个name

2、核心元素

核心元素:
Playbooks  
Variables     #变量元素,可传递给Tasks/Templates使用;  
Tasks          #任务元素,由模块定义的操作的列表,即调用模块完成任务;  
Templates   #模板元素,使用了模板语法的文本文件;  
Handlers     #处理器元素,通常指在某事件满足时触发的操作;  
Roles          #角色元素

3、与基础组件

name:
    定义playbook或者task的名称(描述信息),每一个play都可以完成一个任务。
hosts: 
    hosts用于指定要执行指定任务的主机.
user:
    remote_user则用于指定远程主机上的执行任务的用户
tasks:
    任务列表play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。
vars:
   定义变量(如果不使用内部变量需要提前定义)
vars_files:
  调用定义变量文件
notify:
    任务执行结果如果是发生更改了的则触发定义在handler的任务执行
handlers:
    用于当前关注的资源发生变化时采取一定指定的操作

3、案例

1)、创建文件
[root@ansible-server ~]# cd /etc/ansible/
[root@ansible-server ansible]# vim test.yml  #创建文件必须以.yml/.yaml结尾
---
 - hosts: webservers1
   user: root
   tasks:
   - name: playbook_test
     file: state=touch path=/tmp/playbook.txt
===================================================================================
参数解释:
    hosts: 参数指定了对哪些主机进行操作;
    user: 参数指定了使用什么用户登录远程主机操作;
    tasks: 指定了一个任务.
    name:参数同样是对任务的描述,在执行过程中会打印出来。


检测语法:
[root@ansible-server ansible]# ansible-playbook --syntax-check test.yml 
playbook: test.yml
运行Playbook:
[root@ansible-server ansible]# ansible-playbook test.yml #加剧本名称
2)、handlers:由特定条件触发的Tasks
handlers:由特定条件触发的Tasks
handlers:处理器
notify:触发器
语法:
tasks:
- name: TASK_NAME
  module: arguments               #1.上面任务执行成功,然后
  notify: HANDLER_NAME        #2.通知他
handlers:
- name: HANDLER_NAME        #3.一一对应,这里的描述与notify定义的必须一样
  module: arguments         #4.执行这个命令
=======================================================
[root@ansible-server ansible]# vim handlers.yml
- hosts: webservers1
  user: root
  tasks:
  - name: test copy
    copy: src=/root/a.txt dest=/mnt
    notify: test handlers
  handlers:
  - name: test handlers
    shell: echo "abcd" >> /mnt/a.txt
========================================================
说明:只有 copy 模块真正执行后,才会去调用下面的 handlers 相关的操作,追加内容。所以这种比较适合配置文件发生更改后,需要重启服务的操作。

检测语法:
[root@ansible-server ansible]# ansible-playbook --syntax-check handlers.yml 
playbook: handlers.yml
[root@ansible-server ansible]# ansible-playbook handlers.yml
3)、循环:迭代,需要重复执行的任务
循环:迭代,需要重复执行的任务;
对迭代项的引用,固定变量名为”item”,使用with_items属性给定要迭代的元素; 

基于字符串列表元素实战:
[root@ansible-server ansible]# vim list.yml
- hosts: webservers2
  remote_user: root
  tasks:
  - name: install packages
    yum: name={{ item }} state=latest         #相当于for循环里面的i 
    with_items:                               #取值 。但是不支持通配符
     - httpd
     - php
     - php-mysql
     - php-mbstring
     - php-gd
##新版本格式
- hosts: ansible-web1
  remote_user: root
  tasks:
#  - name: install soft
#    yum: name={{ item }} state=latest
#    with_items:
#     - httpd
#     - sl
  - name: Install common software requirements 
    ignore_errors: yes 
    become: true 
    yum: pkg={{ item }} state=present 
    with_items: 
    - yum-plugin-fastestmirror 
    - epel-release 
    - git 
    - libyaml-devel 
    - libnet-devel 
    - libnetfilter_queue-devel 
    - libpcap-devel 
    - pcre-devel 
    - file-devel 

检测语法:
[root@ansible-server ansible]# ansible-playbook --syntax-check list.yml 
playbook: list.yml
执行:
[root@ansible-server ansible]# ansible-playbook  list.yml

4)、自定义vars_files变量
变量调用语法:
{{ var_name }}
====================================================
创建变量目录:
[root@ansible-server ~]# mkdir /etc/ansible/vars
[root@ansible-server ~]# vim /etc/ansible/vars/file.yml
src_path: /root/test/a.txt
dest_path: /opt/test/


创建一个测试文件
[root@ansible-server vars]# mkdir /root/test
[root@ansible-server vars]# vim /root/test/a.txt  #编辑测试文件
123
创建play-book引用变量文件:
[root@ansible-server vars]# cd /etc/ansible/
[root@ansible-server ansible]# vim vars.yml
- hosts: ansible-web1
  user: root
  vars_files:
   - /etc/ansible/vars/file.yml
  tasks:
   - name: create directory
     file: path={{ dest_path }} mode=755 state=directory
   - name: copy file
     copy: src={{ src_path }} dest={{ dest_path }}


检测语法:
[root@ansible-server vars]# cd ..
[root@ansible-server ansible]# ansible-playbook --syntax-check vars.yml
playbook: vars.yml
执行:
[root@ansible-server ansible]# ansible-playbook  vars.yml

望对大家有所帮助,点个赞再走吧!!!文章来源地址https://www.toymoban.com/news/detail-691848.html

到了这里,关于自动化运维工具-------Ansible(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Ansible】Ansible自动化运维工具之playbook剧本

      简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合复杂应用的部署。   Playbooks 可用于声明配置,更强大的地方在于,playbooks可以编排有序的去执行过程,甚至做到多组机器间来回有序的执行特别指定的

    2024年02月14日
    浏览(31)
  • 自动化运维工具之Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月08日
    浏览(59)
  • 自动化运维工具——Ansible学习(二)

    目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handlers也可以触发多个 二、tags 1.通过指定

    2024年02月16日
    浏览(37)
  • Ansible自动化运维工具---Playbook

    playbook是剧本的意思,通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook各部分组成 : Tasks : 任务,即调用模块完成的某操作 Variables : 变量 emplates : 模板 Handlers : 处理器,当某条件满足时,触发执行的操作 Roles : 角色 playbook yaml语法 是换行空两格,-和

    2024年02月03日
    浏览(32)
  • Ansible 自动化运维工具(完善版)

    目录  Ansible概述 Ansible特点 Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 Ansible的搭建 环境 ansible主机 1、ansible 2、Ansible-doc Ansible模块 1.command模块 2.shell模块 3.raw模块 Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工

    2024年02月16日
    浏览(34)
  • Ansible 自动化运维工具的使用

    目录   一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 (1)command 模块 (2)shell 模块 (3)cron 模块 (4)user 模块 (5)group 模块 (6)copy 模块 (7)file 模块 (8)hostname 模块 (9)ping 模块  (10)yum 模块 (11)service/

    2024年02月11日
    浏览(46)
  • Linux:ansible自动化运维工具

    当前所有执行权限我是在root下执行的,如果提示权限之类的,可以在每句命令前  加上 sudo     ansible主服务器  192.168.0.194         另外两个客户端分别为 192.168.0.193   192.168.0.192 软件只需要在主服务器上安装,客户端不需要去安装软件,因为他们相互使用的是ssh 只需要

    2024年02月11日
    浏览(36)
  • Ansible自动化运维工具的认识

    目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 四、Ansible的搭建 1、实验环境 2、环境准备 Ansible: 3、创建ssh免密交互登录 client端环境准备 五、Ansible配置 六、Ansible命令 1、ansible 实验案例: 1.检查所有主机是否存活 2.列出Rich组中

    2024年02月16日
    浏览(35)
  • Ansible自动化运维工具介绍与部属

    ansible是新出现的自动化运维工具,基于python开发,集合了从多的运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于paramiko开发的,并且基于模块化工作,它本身没有批量部署的能力。真正具有批量部署的是

    2024年02月07日
    浏览(34)
  • 自动化运维工具Ansible教程(二)【进阶篇】

    ansible 学习大纲 Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。 简单易用 :Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包