linux自动化运维--ansible

linux自动化分为三个层次

  1.OS provisioning 自动化安装系统  

    常用软件:cobbler(red hat 用、PXE

  2.OS config  自动化配置系统

    常用软件:cfengine,puppet,saltstack chef

  3.OS deployment 深度定制自动化

    常用软件:func(C/S,ssl)、fabric(ssh,python)、ansible

ansible:由于可以完成三个层次的事情所以比较强大。(基于ssh去连接到主机,所以先要认证)

  ansible特性:     

    部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
    默认使用SSH协议对设备进行管理;
    有大量常规运维操作模块,可实现日常绝大部分操作;
    配置简单、功能强大、扩展性强;
    支持API及自定义模块,可通过Python轻松扩展;
    通过Playbooks来定制强大的配置、状态管理;
    轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
    提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

  ansible的架构及组件

    

      Ansible:Ansible核心程序。
      HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
      Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
      CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
      CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
      ConnectionPlugins:连接插件,Ansible和Host通信使用

  安装ansible:yum安装

    

  安装ansible:

      1.下载epel源到/etc/yum.repos.d

          #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

      2.yum clean all

      3. yum makecache

      4.yum install ansible -y

  使用ansible准备

    1.配置主机:

      在安装有ansible服务器上/etc/hosts 文件中添加主机

        格式:

            [机组名]          例:  [websevices]

            机组ip或主机名          192.168.29.129

                              www.zrq1.com

     2.配置认证:这里由于ansible需要到客户机上执行操作,所以需要对于客户机有登录权限,最好设置免密登录

          1.创建证书,密码为空

            #ssh-keygen -t   rsa  -P ''

          2.拷贝证书

            #ssh-copy-id -i ./ssh/id_rsa.pub  root@192.1168.1.162

    3.测试是否成功

        #ansible  all -m  pinng  :像所有的客户机发送ping测试

  ansible配置文件:

      hosts:配置主机群

  ansible基本语法:    

      ansible 

        ansible <host-pattern> [options]

          host-pattern:在host中定义的主机群      

              all:所有主机

          options:

              -m:后面接模块

                如果直接执行命令,不用模块可以省略

                   例如:ansible all   -a  ‘service httpd status’

                  查看客户机的httpd服务状态

              -a:后面接模块的命令

              ansible-doc  -l:列出所有模块

                常用模块:copy、cron、acl、group、user

              ansible-doc -s  模块名:查看指定模块的参数 

          例:ansible  webserver  -m copy  -a  “src=/root/zrq.sh dest=/tmp/zrq/”   注意:命令不支持管道

             用复制模块复制文件到websever服务器群的目录中

      ansible相关命令:

        ansible-doc

            -l:查看所有模块

                主要模块:

                  命令模块:

                      command执行一些命令

                       例如:ansible all  -m command -a "hostname"

                       解析:对所有主机通过command模块执行一个命令hostname,查看主机名

                      shell:执行一些脚本

                       例如:ansible all -m shell -a "ps aux"

                       解析:对所有主机通过shell模块,执行shell命令“ps aux ”,查看目标主机进程

                  文件模块:

                      copy:复制文件

                        例如:ansible all -m copy -a "src=./2.txt dest=/root"

                        解析:对于所有主机,通过copy拷贝当前目录下2.txt文件到目标主机的/root目录下

                      fetch:抓取目标主机的文件到管理机上(注意:这里抓取过来会以这个主机的主机名为目录下)

                        例如:ansible all -m fetch -a "src=/root/zrq.txt dest=/root/"

                        解析:对于所有主机,抓取/root/zrq.txt文件到本机的/root目录下。

                      file:实现创建、删除、更改属性(属主,属组)对于文件或目录

                        例如:ansible all -m file -a "path=/root/book.txt state=touch"

                        解析:对于所有主机,在/root下创建book.txt文件

                  安装模块

                      yum:

                        例如:ansible all -m yum -a "name=httpd state=installed"

                        解析:安装httpd

                  服务模块

                      service:

                        例如: ansible all  -m service -a "name=httpd state=started enabled=yes"

                        解析:启动httpd服务,并且设置为开机自启

                  挂载模块

                      mount:

                        例如:ansible all -m mount -a "src=192.168.1.172:/data/ path=/mnt fstype=nfs state=mounted" 

                        解析:对于所有主机,把nfs的192.168.1.172的/data目录,通过nfs文件系统类型,挂载在/mnt下,并且卸载fstab文件中

                  定时任务:

                      cron:

                        例如:ansible all -m cron -a "name='echo 123' minute=*/1 job='echo 123 >> /root/1.txt'"

                        解析:创建一个定时任务,名称是echo 123,间隔每分钟执行一次,内容是,输出123到1.txt文件

                  用户模块

                      group:

                        例如:ansible all -m group -a "name=zabbix1 gid=1052"

                        解析:创建一个组,组名zabbix1,组id是1052

                      user:

                        例如:ansible all -m user -a "name=zabbix1 uid=1052 group=root groups=zabbix1"

            -s:查看指定模块的参数

                例如:ansible-doc -s copy             

      ansible的playbook模块:

          1.基于YAML(一种文本格式)语言:

             ymal文件扩展名通常为。yaml

            -:表示

            空格:表示

            每个任务都有名称  

            注意缩进

          2.playbooks:基于yaml语言格式的一个.yaml文件

            示例:(注意:千万注意缩进以及对其,特别是-)

            #vim test.yaml             

            - hosts: all
              remote_user: root
              tasks:
              - name: ensure apache status
              service:
             name: httpd
                state: status

              

posted @ 2020-06-09 16:44  Kevinz  阅读(486)  评论(0编辑  收藏  举报