【自动化运维】带你入门ansible

2022-07-26 08:21:04 浏览数 (1)

1、什么是ansible?

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

2、如何安装ansible?

代码语言:javascript复制
ansible的安装来源于epel仓库,因此在安装前需确保安装了正确的epel源:yum install -y epel-release安装ansible命令:yum install ansible -y查看ansible是否安装:rpm -qa |grep ansible ,whereis ansible查看ansible安装信息:ansible --version

3、ansible的特点?

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1) 连接插件connection plugins:负责和被监控端实现通信

(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机

(3) 各种模块核心模块、command模块、自定义模块

(4) 借助于插件完成记录日志邮件等功能

(5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

4、ansible相关概念

1、Play:将一系列主机与需要在主机上运行的任务列表相关联

2、Playbook:一个ansible脚本,它指定一系列play与一批play执行的对象主机

3、Task:Ansible play中的工作单元,一个task指定一个模块和相关参数,以及一个可选名字与一些可选的参数

4、TLS(Transport Layer Security):用于Web服务器与浏览器之间相关的安全通信协议

5、Transport :Ansible用于连接到远程主机的协议与实现,默认的transport是SSH

6、Convergence(收敛性):配置管理系统的一种属性,具有这种属性的系统将会对一台服务器执行多次让服务器接近期望的状态(Ansible执行一次后就会将服务器置为期望状态,所以不具备收敛性)

5、ansible的主机清单配置?

代码语言:javascript复制
ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务。
代码语言:javascript复制
管理节点(即安装ansible的节点)上添加目标节点(即需要管理的节点)的ssh认证信息。管理节点生成SSH-KEY:ssh-keygen添加目标节点的SSH认证信息:ssh-copy-id root@目标节点IP添加认证信息后,目标节点主机的~/.ssh/目录下将会出现一个authorized_keys文件,里面包含了ansible管理节点的公钥信息,可以检查一下是否存在。测试ping探测test1客户主机是否存活:ansible -m ping test1

6、ansible的常用模块?

1 、file模块

代码语言:javascript复制
用于设定或修改文件的属性信息
group:默认为空
owner:默认为空
path:默认为空,别名:'dest', `name'
recurse:yes, no 默认为no
src:创建连接文件时有用

state:file, link, directory, hard, touch, absent
file 默认属性,如果文件不存在则不创建,并且报错,用于修改已存在文件的属性
directory 如果目录不存在,则创建目录和子目录
absent 递归删除文件或目录
link 在创建软链接是有用
hard 创建硬链接

示例
---
- name: file
  hosts: local
  tasks:
  - name: file
    file:
      src: '/tmp/{{ item.src }}'
      dest: '{{ item.dest }}'
      state: link
    with_items:
      - { src: 'x', dest: 'y' }
      - { src: 'z', dest: 'k' }

2 、synchronize 模块

代码语言:javascript复制
archive:是否采用地规模上同步
compress:开启压缩默认为开启
copy_links:同步是否复制连接
delete:删除源中没有而目标文件存在文件
dest= 目标地址
dirs 以非递归的方式传输目录
mode:push或pull,默认为push
recursive 是否递归
rsync_opts 使用rsync的参数
rsync-path=PATH # 指定远程服务器上的rsync命令所在路径信息
rsync_timeout # 指定 rsync 操作的 IP 超时时间,和rsync命令的 --timeout 参数效果一样.
set_remote_user # put user@ for the remote paths. If you have a custom ssh config to define the remote user for
src= # 源,同步的数据源
times #
--exclude=.Git 忽略同步.git结尾的文件

注:同步businessdata目录下单独某个文件到对应目录,delete: yes 先清空再同步

---
- name: synchronize test1/sit files to develop
  hosts: develop
  tasks:
    - name: synchronize
      synchronize:
        src: '{{ item.src }}'
        dest: '{{ item.dest }}'
        delete: yes 
      with_items:
        - { src: '/tmp1/', dest: '/tmp1/' }
        - { src: '/tmp2/', dest: '/tmp2/' }

3 、template模块

代码语言:javascript复制
文档内变量的替换的模块
ansible develop –m template –a ‘src=/mytemplates/foo.j2 dest=/etc/file.conf mode="u=rw,g=r,o=r"’
解释:将src上foo.j2的变量模版复制到dest上。Template适合用playbook编写 ,通过变量然后拷贝到远程主机。#1.2、jetty-core中的start.sh
ansible ${ENV} -m template -e "codeName=${codeName} startAddressPort=${startAddressPort}" -a "src=/etc/ansible/newProject/start.sh dest=/app/tc-${codeName}/jetty/${codeName}-core/bin/"

#2.1、tomcat-oms:tc-xxx.sh
ansible ${ENV} -m template -e "codeName=${codeName} tcCodeNameAddressPort=${tcCodeNameAddressPort}" -a "src=/etc/ansible/newProject/tc-${codeName}.sh dest=/app/tc-${codeName}/tomcat/"

7、ansible学习资源?

代码语言:javascript复制
1、小白学Ansible之基本介绍:https://zhuanlan.zhihu.com/p/91231901?utm_source=wechat_session&utm_medium=social&utm_oi=724990794020167680
2、AnsibleBook01:https://www.kancloud.cn/hiyang/ansiblebook/305223
3、AnsibleBook02:https://www.kancloud.cn/louis1986/ansible/544331

0 人点赞