• Linux-ansible详解及安装操作-命令操作


    一、ansible简介

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

    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:可实现多级指挥

     connection plugins:连接插件,负责和被监控端实现通信,默认使用SSH连接。
     host inventory:主机清单,是一个配置文件里面定义监控的主机。
     modules : 模块,核心模块、command模块、自定义模块等。
     plugins : modules功能的补充,包括连接插件,邮件插件等。
     playbook:编排,定义 Ansible 多任务配置文件,非必需。

     工作原理

    Ansible由节点和控制机器组成。 控制机器是安装Ansibles的地方,节点由这些机器通过SSH管理。 借助SSH协议,控制机器可以部署临时存储在远程节点上的模块。

    控制机器使用ansible或者ansible-playbooks在服务器终端输入的Ansible命令集或者playbook后,Ansible会遵循预先编排的规则将PLAYbook逐条拆解为Play,再将Play组织成Ansible可以识别的任务tasks,随后调用任务涉及到的所有MODULES及PLUGINS,根据主机清单INVENTORY中定义的主机列表通过SSH协议将任务集以临时文件或者命令的形式传输到远程节点并返回结果,如果是临时文件则执行完毕后自动删除。

    二、安装ansible

    ansible的安装很简单,yum安装即可

    1. [root@master ~]# yum install -y epel-release
    2. [root@master ~]# yum -y install ansible
    3. [root@master ~]# ansible --version
    4. ansible 2.9.27
    5. config file = /etc/ansible/ansible.cfg
    6. configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    7. ansible python module location = /usr/lib/python2.7/site-packages/ansible
    8. executable location = /usr/bin/ansible
    9. python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
    10. 查看版本

    三、ansible基础--主机清单

    1.配置文件

    /etc/ansible/ansible.cfg  #主要设置一些ansible初始化的信息,比如日志存放路径、模块、等配置信息

    2.主机清单文件

    默认位置/etc/ansible/hosts

    清单详解

    语法:
    1.添加主机或者主机组:
    [root@ansible-server ~]# vim /etc/ansible/hosts  #在最后追加被管理端的机器
    ansible-web1                      #单独指定主机,可以使用主机名称或IP地址
    2.添加主机组:
    [webservers]        #使用[]标签指定主机组 ----标签自定义
    192.168.126.140        #如果未解析添加ip
    ansible-web2      #解析添加主机名
    3.组可以包含其他组:
    [webservers1]     #组一
    ansible-web1
    [webservers2]     #组二
    ansible-web2
    [weball:children]      #children-照写 #weball包括两个子组
    webservers1        #组一
    webservers2        #组二
    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      #也可以定义密码,如果没有互传秘钥可以使用密码。

    四、部署和测试

    1.环境准备

    我们需要三台机器,控制机器master   192.168.126.140

    被控制机器web1    192.168.126.133        web2  192.168.126.139

    控制机器要先安装ansible,然后给三台机器配置解析,三台机器都要配置

    1. [root@master ~]# vim /etc/hosts
    2. 192.168.126.140 ansible-master
    3. 192.168.126.133 ansible-web1
    4. 192.168.126.139 ansible-web2

    配置ssh公钥认证:控制节点需要发送ssh公钥给所有被控制节点

    1. [root@master ~]# ssh-keygen #一直回车即可
    2. [root@master ~]# ls /root/.ssh/
    3. id_rsa id_rsa.pub
    4. [root@master ~]# ssh-copy-id -i 192.168.126.133 #发送公钥给web1
    5. [root@master ~]# ssh-copy-id -i 192.168.126.139 #发送公钥给web2

    所有机器都要关闭防火墙和selinux

    2.配置master的主机清单

    1. [root@master ~]# vim /etc/ansible/hosts
    2. ansible-web1 #这里配置过解析可以写解析名,也可以写ip
    3. ansible-web2
    4. [webservers] #可以自定义组名
    5. ansible-web1
    6. ansible-web2
    7. [webserver1]
    8. 192.168.126.133
    9. [webserver2]
    10. 192.168.126.139
    11. [weball:children]
    12. webserver1
    13. webserver2
    14. [weball:vars]
    15. ansible_ssh_port=22
    16. ansible_ssh_user=root
    17. ansible_ssh_private_key_file=/root/.ssh/id_rsa

    查看组内列表

    1. [root@master ~]# ansible weball --list-hosts
    2. hosts (2):
    3. 192.168.126.133
    4. 192.168.126.139

    手动测试一下连通

    可以看到连通性正常,可以正常控制web1   web2

    3.模块讲解和测试

    1.shell模块

    语法:ansible  组名或者ip或者解析名  -m   模块   -a '命令'

    1. [root@master ~]# ansible ansible-web1 -m shell -a uptime
    2. ansible-web1 | CHANGED | rc=0 >>
    3. 11:14:04 up 2:43, 3 users, load average: 0.00, 0.01, 0.05

    给节点添加用户

    1. [root@master ~]# ansible webservers -m shell -a 'useradd alan'
    2. ansible-web1 | CHANGED | rc=0 >>
    3. ansible-web2 | CHANGED | rc=0 >>

    然后去web1 web2 查看

    1. [root@web1 ~]# id alan
    2. uid=1002(alan) gid=1003(alan) 组=1003(alan)
    3. [root@web2 ~]# id alan
    4. uid=1000(alan) gid=1000(alan) 组=1000(alan)

     重定向输出到本地文件中

    显示的的web1的磁盘状态

    1. [root@master ~]# ansible ansible-web1 -m shell -a 'df -Th' > /opt/a.txt
    2. [root@master ~]# cat /opt/a.txt
    3. ansible-web1 | CHANGED | rc=0 >>
    4. 文件系统 类型 容量 已用 可用 已用% 挂载点
    5. /dev/mapper/centos-root xfs 17G 7.1G 10G 42% /
    6. devtmpfs devtmpfs 478M 0 478M 0% /dev
    7. tmpfs tmpfs 489M 0 489M 0% /dev/shm
    8. tmpfs tmpfs 489M 13M 476M 3% /run
    9. tmpfs tmpfs 489M 0 489M 0% /sys/fs/cgroup
    10. /dev/sda1 xfs 1014M 125M 890M 13% /boot
    11. tmpfs tmpfs 98M 0 98M 0% /run/user/0

    2.远程复制备份模块:copy

    模块参数详解:
    src=:指定源文件路径
    dest=:目标地址(拷贝到哪里)
    owner:指定属主
    group:指定属组
    mode:指定权限,可以以数字指定比如0644
    backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

    先在本机创建一个测试文件 

    1. [root@master ~]# vim /opt/ceshi.txt
    2. [root@master ~]# cat /opt/ceshi.txt
    3. 112233
    [root@master ~]# ansible ansible-web1 -m copy -a 'src=/opt/ceshi.txt dest=/opt owner=alan group=alan mode=644'
    

    在web1上查看

    1. [root@web1 ~]# ll /opt/
    2. 总用量 4
    3. -rw-r--r--. 1 alan alan 7 92 11:28 ceshi.txt
    4. [root@web1 ~]# cat /opt/ceshi.txt
    5. 112233

    3.软件包管理模块:yum

    详解

    state=     #状态是什么,干什么
    state=absent       用于remove安装包
    state=latest       表示最新的:安装
    state=removed      表示卸载

    给web1安装httpd

    [root@master ~]# ansible ansible-web1 -m yum -a 'name=httpd state=latest'

    卸载httpd

    [root@master ~]# ansible ansible-web1 -m yum -a 'name=httpd state=removed'

    4.服务管理模块:service

    1. [root@master ~]# ansible webservers1 -m service -a "name=httpd state=started" #启动
    2. [root@master ~]# ansible webservers1 -m service -a "name=httpd state=stopped" #停止
    3. [root@master ~]# ansible webservers1 -m service -a "name=httpd state=restarted" #重启
    4. [root@master ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=yes" #开机启动
    5. [root@master ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=no" #开机关闭

    5.文件模块:file

    模块参数详解:
    owner:修改属主
    group:修改属组
    mode:修改权限
    path=:要修改文件的路径
    recurse:递归的设置文件的属性,只对目录有效
            yes:表示使用递归设置
    state:
    touch:创建一个新的空文件
    directory:创建一个新的目录,当目录存在时不会进行修改

    创建一个文件

    [root@master ~]# ansible ansible-web1 -m file -a 'path=/opt/b.txt mode=777 state=touch'
    

    创建目录

    [root@master ~]# ansible ansible-web1 -m file -a 'path=/opt/file1 mode=777 state=directory'

    在web1查看

    1. [root@web1 ~]# ll /opt/
    2. 总用量 4
    3. -rwxrwxrwx. 1 root root 0 92 11:43 b.txt
    4. -rw-r--r--. 1 alan alan 7 92 11:28 ceshi.txt
    5. drwxrwxrwx. 2 root root 6 92 11:45 file1

    ansible-playbook(剧本)看下篇文章

  • 相关阅读:
    【kr】强化学习之旅 1 环境配置
    探索Linux中的fdisk命令:磁盘分区管理的利器
    python-kafka客户端封装
    【Linux学习笔记】git工具
    OpenSSL生成PKCS#8私钥和公钥
    vue3语法严禁问题
    C++ //练习 9.19 重写上题的程序,用list替代deque。列出程序要做出哪些改变。
    CLIP扩展
    【32. 图中的层次(图的广度优先遍历)】
    自动化测试 —— 基于Jmeter之DDT!
  • 原文地址:https://blog.csdn.net/qq_61838278/article/details/132634672