自动化运维——Ansible管理工具

Ansible管理工具

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能

ansible基于ssh来和远程主机通讯的,所以不需要在远程主机上安装client/agents

ansible特点:1.部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作

                        2.默认使用SSH协议对设备进行管理

                        3.有大量常规运维操作模块,可实现日常绝大部分操作

                        4.配置简单、功能强大、扩展性强

                        5.支持API及自定义模块,可通过Python轻松扩展
    
                        6.通过Playbooks来定制强大的配置、状态管理

                        7.轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可

                        8.提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台

Ansible基本架构

Ansible:Ansible核心程序

Host Inventory:记录由Ansible管理的主机信息(默认是在Ansible的hosts配置文件中定义被管理主机),包括端口、密码、ip等

Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能

Core Modules:核心模块,主要操作是通过调用核心模块来完成管理任务

Custom Modules:自定义模块,完成核心模块无法完成的功能,支持多种语言

Connection Plugins:连接插件,Ansible和Host通信使用

安装配置Ansible

1.安装依赖包和ansible

yum -y install epel-release

yum -y install ansible

配置文件目录:/etc/ansible

执行文件目录:/usr/bin

Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible

Help文档目录:/usr/share/doc/ansible-X.X.X

Man文档目录:/usr/share/man/man1

2.配置主机清单:vim /etc/hosts

比如格式如下:

[webserver]
192.168.11.26
[dbserver]
192.168.11.27

3.配置无密码登陆

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa root@192.168.11.26

ssh-copy-id -i /root/.ssh/id_rsa root@192.168.11.27

ansible常用模块命令格式

基础命令选项

-h:来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:

-a:MODULE_ARGS#模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等

-k:--ask-pass:#ask for SSH password,登录密码,提示输入SSH密码而不是假设基于密钥的验证

--ask-su-pass:#ask for su password,su切换密码

-K:--ask-sudo-pass #ask for sudo password,提示密码使用sudo,sudo表示提权操作

--ask-vault-pass#ask for vault password,假设我们设定了加密的密码,则用该选项进行访问

-B:SECONDS#后台运行超时时间

-C:#模拟运行环境并进行预运行,可以进行查错测试

-c:CONNECTION#连接类型使用

-f:FORKS#并行任务数,默认为5

-i:INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts

--list-hosts:#查看有哪些主机组

-m:MODULE_NAME#执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数

-o:压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用

-S:用su命令

-R:SU_USER#指定 su 的用户,默认为 root 用户

-s:用sudo命令

-U:SUDO_USER#指定 sudo 到哪个用户,默认为 root 用户

-T:TIMEOUT#指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改

-u:REMOTE_USER#远程用户,默认为 root 用户

-v:查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

查看模块:ansible-doc -l

查看具体模块的信息:ansbile-doc -s  command

1.command模块(用于在被管理主机上运行命令)

ansible webserver -m command -a 'date'

2.cron模块(用于在被管理主机上管理计划任务)

persent:添加、absent:移除,其使用的语法跟我们的crontab文件中的语法一致,同时,可以指定以下选项:

day:日应该运行的工作( 1-31, , /2, )

hour:小时 ( 0-23, , /2, )   

minute:分钟( 0-59, , /2, )

month:月( 1-12, *, /2, )

weekday:周 ( 0-6 for Sunday-Saturday,, )

job:指明运行的命令是什么

name:定时任务描述    

ansible dbserver -m cron -a 'name="host reboot" minute="30" hour="22" job="/usr/sbin/reboot"'    

3.user模块(创建用户)

ansible all -m user -a 'name="test"'

4.group模块(创建组)

ansible all -m group -a 'name=test'

5.copy模块(复制本地文件到管理的服务器)

ansible all -m copy -a 'src=/etc/fstab dest=/home/fstab.test owner=root  mode=744'

6.file模块(修改文件属性)

ansible all -m file -a 'owner=test group=test mode=644 path=/home/fstab.test'

7.ping模块(ping测试)

ansible all -m ping

8.service模块(设置修改服务状态)

ansible webserver -m service -a 'enabled=true name=httpd state=started

9.shell模块(shell模块可以在远程主机上调用shell解释器运行命令)

ansible dbserver -m shell -a 'echo 123456 | passwd --stdin zhangsan'

10.script模块(将本地脚本复制到被管理主机进行运行)

ansible webserver -m script -a '/root/ping.sh'

11.yum模块(yum安装软件)

ansible webserver -m yum -a 'name=httpd state=present'

12.setupt模块(该模块主要用于收集信息,是通过调用facts组件来实现的)

比如查看内存:ansible webserver -m setup -a 'filter="*mem*"'

13.fetch 模块(该模块用于从远程某主机获取(复制)文件到本地)

ansible webserver -m fetch -a 'src=/data/hello dest=/data'

playbook的使用

playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活,主要可以用来多机部署,你可以把它理解成一种脚本,可以一次性运行一系列操作

1.使用playbook远程安装httpd

vim installhttpd.yaml

---
- hosts: webserver
  remote_user: root
  tasks:
    - name: install Apache
      yum:
        name: httpd
        state: installed
    - lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: '^Listen '
        line: 'Listen 8080'
    - replace:
        path: /etc/httpd/conf/httpd.conf
        regexp: '^#(ServerName).*'
        replace: '\1 localhost'
    - service:
        name: httpd
        enabled: yes
        state: restarted
    - name: Create wwwroot directory
      file:
        dest: /var/www/html
        state: directory
    - copy:
        src: /root/index.html
        dest: /var/www/html/index.html

运行playbook直接远程管理安装

ansible-playbook installhttpd.yaml

2.使用playbook远程安装nginx

vim installnginx.yaml

---
  tasks:
  - name: add repo
    yum_repository:
      name: nginx
      description: nginx repo
      baseurl: http://nginx.org/packages/centos/7/$basearch/
      gpgcheck: no
      enabled: 1
  - name: install centos plungins
    shell: yum -y install zlib zlib-devel openssl openssl-devel pcre-devel wget gcc gcc++ autoconf automake
  - name: Install nginx
    yum:
      name: nginx
      state: installed
  - name: Copy nginx configuration file
    copy:
      src: /root/nginx.conf
      dest: /etc/nginx/nginx.conf
  - name: Create wwwroot directory
    file:
      dest: /var/www/nginx
      state: directory
  - name: Create test page index.html
    shell: echo "<h1>Congratulations on the successful installation of Nginx!!!</h1>" > /var/www/nginx/index.html
  - name: Start nginx
    service:
      name: nginx
      state: started

运行playbook直接远程管理安装

ansible-playbook installnginx.yaml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值