Ansible -- 自动化运维

2018-09-26  本文已影响0人  saoraozhe3hao

官网:https://www.ansible.com/
Github:https://github.com/ansible/ansible
历史:美国人Michael DeHaan 于 2012年创始Ansible,2015年被Red Hat收购
特征:无客户端程序,通过ssh通信,易用性高,效率较低
同类产品:Puppet、Chef、SaltStack

概念:
EPEL:(Extra Packages for Enterprise Linux,是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包
YAML:YAML Ain’t Markup Language,Clark Evans在2001年发表了这种语言

管理机安装

0、前提是控制机和客户机都已安装Python,检查 python -V
1、添加yum 源,选好对应的版本
vim /etc/yum.repos.d/ansible

[epel]     # 先检查/etc/yum.repos.d是否已经配置了epel源,没有才需要者段
name = all source for ansible
baseurl = https://mirrors.aliyun.com/epel/7/x86_64/
enabled = 1
gpgcheck = 0

[ansible]
name = all source for ansible
baseurl = http://mirrors.aliyun.com/centos/7.5.1804/os/x86_64/
enabled = 1
gpgcheck = 0

2、yum clean all;yum install ansible -y

配置

/etc/ansible/ansible.cfg

forks = 4  # 最大进程数,一般设为cpu核数 * 2

/etc/ansible/hosts
添加客户机,可以分组

172.31.171.139
[group1]
172.31.171.140

步骤

1、建立互信
生产密钥对:ssh-keygen -t rsa -P '' // 存放在~/.ssh/,-t 加密类型,-P私钥口令
发送公钥:ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx // 追加到远程主机的 ~/.ssh/authorized_key上
2、连接测试:ansible all -m ping # 使用ping模块
3、执行ad-hoc命令,即单次命令,相对于playbook而言
命令的一般格式为:ansible 目标机表达式 -m 模块 -a '参数'
不指定模块时,默认模块为command,不能带参数;可以改用shell模块,可以带参数
目标机表达式:*(通配),:(和)

常用模块

模块列表:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
除了Command和Shell,其他模块的参数都是 key=value格式

Shell 模块:ansible all -m shell -a 'cat temp.txt'
Copy模块:ansible all -m copy -a 'src=./temp.txt dest=temp.txt' # 把管理机的文件拷贝到客户机
File模块:ansible all -m file -a 'path=/etc/foo.conf owner=foo group=foo mode=0644' # 设置文件权限

playbook

---
- hosts: all
  remote_user: root
  sudo: yes  
  vars:           # 定义变量,可在模板和参数中通过{{}}引用
    port: 80
    max: 200
    tomcat:    # 通过{{tomcat[0]}} 引用
         - 127.0.0.0
         - 127.0.0.1
  tasks:
    - name: push temp   # 用于控制台显示
      template: src=temp.txt dest=temp1.txt  # 模块名:参数
      ignore_errors: True
      when: port > 80  # 满足条件时,才执行这个task
      notify:           # 给客户机推送的文件和上次不一样时,才通知执行name为restart apache的handler
        - restart apache
  handlers:       # 由notify触发,只会触发一次
    - name: restart apache
      service: name=apache state=restarted  # service模块用于启停服务

执行playbook:
ansible-playbook playbook.yml
ansible-playbook install.yml -k -K //没有互信,要-k输入密码。没有sudo NOPASSWD,要-K 输入 root密码

整合Jenkins

让ansible控制机,作为Jenkins的从节点;在任务的Post Steps中调用ansible命令

上一篇下一篇

猜你喜欢

热点阅读