Ansible简介&部署&用法

什么是ansible

ansible是自动化的运维工具,可以实现自动化的批量部署。

自动化运维工具对比

  • Puppet:Ruby语言开发,采用C/S架构。
  • SaltStack:python开发,采用C/S架构,比puppet更轻量级。
  • ansible:基于python开发,分布式,无需客户端,轻量级。

ansible工作原理

  • 读取ansible.cfg文件。
  • 通过inventory读取相应位置的主机列表
  • 加载task对应的模块。
  • ansible core将模块或命令打包成python脚本文件
  • 将临时脚本传输到被控制节点。
  • 被控制节点执行临时脚本。
  • 给文件加执行权限。
  • 执行脚本文件,并返回结果
  • 删除临时脚本文件并退出。

部署ansible

案例信息:
控制节点:master:192.168.178.144
被控制节点:slave:192.168.178.128

  • 所有节点编辑好解析/etc/hosts文件
  • 控制节点安装ansible
  • 设置控制节点的免密登陆,将master上的公钥发送给slave。
[yiki@ ~] yum -y install ansible
[yiki@ ~] ansible --version  #检查版本信息,这里是ansible 2.9.1
  • 主配置文件:/etc/ansible/ansible.cfg
    1.forks:最大并发连接数。在这里插入代码片
    2.inventory:存放资源清单的路径。
    3.sudo_user:默认执行命令的用户。
    4.remote_port:指定连接控制节点的端口。
    5.log_path:日志存放路径。
    6.host_key_checking:是否检查主机密钥。

  • 将被控制主机加入主机清单(/etc/ansible/hosts)

[yiki@ ~] vim /etc/ansible/hosts

*在结尾添加被控制的主机
*方式一:添加没有猪祭祖的单个主机们
slave(或ip)

*方式二:添加主机组
[test]
slave(或ip地址)
  • 初步测试(连通性)
[yiki@ ~] ansible test -m ping
或
[yiki@ ~] ansible slave -m ping
结果为绿色则没有问题哦

*一次指定多台主机
[yiki@ ~] ansible slave1,slave2,slave3 -m ping
[yiki@ ~] ansible slave* -m ping
*一次指定多个主机组
[yiki@ ~] ansible test1:test2:test3 -m ping

ansible语法

[yiki@ ~] ansible 【被控制端】 -m 【模块名】 -a 【传递给模块的参数】
*参数信息
1.默认模块的commond
例:
[yiki@ ~] ansible test -a date
slave | CHANGED | rc=0 >>
2019年 11月 22日 星期五 21:37:08 CST

[yiki@ ~] ansible test -a "cat /etc/hosts" > ./a.txt
*将被控制节点的信息输出到本地的文件中。

inventory组件

  • 组可以包含其他组,例:
[group-1]
slave-1
slave-1
[group-2]
slave-3
slave-4
[group]  //group组包含两个子组
group-1
group-2
  • 查看组内主机列表
[yiki@ ~] ansible test --list-hosts  
hosts (1):
    slave
  • 自定义主机清单
[yiki@ ~] vim /testhosts
[test]
slave

[yiki@ ~] ansible -i /testhosts test -a "date"
slave | CHANGED | rc=0 >>
2019年 11月 22日 星期五 21:37:08 CST

ansible常用模块

Ad-Hoc组件相当于快速的执行一条命令

  • 获取模块列表
[yiki@ ~] ansible-doc -l 
  • copy模块:将文件复制到被控制主机
[yiki@ ~] ansible test -m copy -a 'src=/a.txt dest=/ owner=root group=root mode=777'
1.src:源文件地址。
2.dest:目标文件地址
3.owner,group,mode:目标文件被创建后的属组,属主和权限。
4.backup=yes/no:在被控制节点上创建的同时备份。
  • user模块
[yiki@ ~] ansible test -m user -a "name=yiki password=`echo 123|openssl passwd -1 -stdin` "
1.password:设置用户密码
2.openssl:将密码交给ssl加密
3.后面的“-1”:设置加密模式未md5

[yiki@ ~] ansible test -m user -a "name=susu state=absent"
删除用户
  • yum软件包管理模块
[yiki@ ~] ansible test -m yum -a "name=httpd state=latest"
1.state=状态动作
   absent:即remove
   latest:安装最新版或更新
   removed:卸载
  • service服务管理模块
[yiki@ ~] ansible test -m service -a "name=httpd state=started enabled=yes"
1.started:启动
2.stopped:停止
3.restarted:重启
4.enabled=yes:开机启动
5.enabled=no:开机关闭
  • file文件模块
[yiki@ ~] ansible test -m file -a "path=/ mode=777 state=touch"
1.state=表示操作
  touch:创建一个文件
  directory:创建一个目录
  • setup收集信息模块
[yiki@ ~] ansible test -m setup //收集ansible所有的信息
[yiki@ ~] ansible test -m setup -a "filter=ansible_all_ipv4-addresses"
// 查询ipv4地址
1.filter:过滤
  • cron计划任务模块
[yiki@ ~] ansible test -m cron -a "cron_file=/a.txt "
1.backup=yes/no  修改内容前是否备份。
2.cron_file:应该文件替文件换被控制端的计划任务文件。

playbook剧本

      当配置一台设备,比如初始化时,往往不只要做一件事,这时候用剧本更合适。playbook用yaml语言编写。

案例一
[yiki@ ~] vim /etc/ansible/test.yml

---
- hosts: test   #被控制主机名或组名
  user: root   #执行操作的用户
  tasks:
  - name: playbook_test
    file: path=/a.txt state=touch   #file模块
  
案例二:handler条件判断
---
- hosts: test
  user: root
  tasks:
  - name: test
    file: "path=/b.txt state=touch"
    notify: handler_test   #在上面的tast之后,才能执行这个handler
  handlers:
  - name: handler_test   #handler名要与上面notify的一致。
    shell: "echo 123 > /b.txt"

案例三:循环
---
- hosts: test
  user: root
  tasks:
  - name: test
    user: "name={{ item }}"  #需要重复执行的任务
    with_items:
    - susu1
    - susu2
    - susu3

案例4:tags
tags:给tasks的一个name打上标识,可以在执行时只执行他或跳过他或
从他开始执行
---
 - hosts: test
   user: root
   tasks:
   - name: touch file
     file: path=/root/nihao.txt state=touch
     tags: nihao
   - name: mkdir file
     file: path=/root/xingdian state=directory
     tags: yiki
[yiki@ ~] ansible-playbook test -t yiki  //只执行yiki标签的task
[yiki@ ~] ansible-playbook test --skip-tags=yiki  //只不执行yiki
                                               标签的task
[yiki@ ~] ansible-playbook test --start-at-task yiki

ansible-role

role使ansible的playbook的目录组织结构,每个目录下存放各自功能的文件。
Ansible简介&部署&用法_第1张图片

  • files:存放copy或script等模块调用的文件。
  • tasks:专门存储任务的目录。
  • handlers:前一个任务执行成功后再去执行handlers下面的文件。
  • vars:目录下存放定义变量的文件。
  • templates:存放模版文件。
  • site.yml:
案例:安装nginx并配置虚拟主机
[yiki@ roles]ls
nginx      site.yml
[yiki@ nginx]ls
files      tasks      handlers      templates      vars
[yiki@ tasks]vim main.yml
---
- name: install nginx
  yum: "name=nginx state=latest"
- name: html
  shell: "mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak"
- name: html2
  copy: "src=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html"
- name: conf
  copy: "src=/etc/ansible/roles/nginx/files/test.conf dest=/etc/nginx/conf.d/"
- name: nginx start
  service: "name=nginx state=started"
- name: enable nginx
  service: "name=nginx enabled=yes"
  notify: start nginx     //执行完上面的task,执行start nginx的
                            handler模块


[yiki@ handlers] vim main.yml
---
- name: start nginx
  service: "name=nginx state=started"


[yiki@ roles] vim site.yml
---
- hosts: test
  user: root
  roles:
  - nginx    //nginx使同roles目录下的项目目录名。

[yiki@ roles] ansible-playbook site.yml --syntax-check
[yiki@ roles] ansible-playbook site.yml

加速配置

在主配置文件/etc/ansible/ansible.cfg中

#accelerate_port = 5099
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
#accelerate_daemon_timeout = 30
#accelerate_multi_key = yes

你可能感兴趣的:(自动化运维工具)