Ansible使用记录(1):ansible简述与安装配置

一、Ansible简单介绍

Ansible是一款自动化运维工具,类似于之前的Puppet,Saltstack,chef等,可以针对批量服务器实现系统配置、程序部署、命令执行等。ansible本身没有批量部署的能力,但其提供了一种基于模块的框架,可以通过模块实现批量部署以及运行。
ansible是非典型性C/S模型,ansible服务器的ansible程序在执行命令时候调用,而不是后台运行的监听程序;被操作服务器(cleint服务器)不用额外安装ansible特定开发的客户端程序,而是直接复用openssh实现。

Ansible 总体架构示意图

在这里插入图片描述
图片来源地址:https://www.oreilly.com/library/view/learning-ansible/9781783550630/graphics/0630OT_01_01.jpg

详细的介绍或者原理解析可以在需要的时候,到官方网站阅读或者搜索相关博文

二、Ansible安装部署[CentOS7]

在 CentOS 7 中安装部署Ansible非常简单,先配置epel yum源,然后直接安装。如下

1. 配置epel源

yum -y install epel-release

2. 安装ansible

2.1 安装部署
yum -y install ansible

这样ansible就已经安装完成了,版本信息如下

ansible --version
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
2.2 ansible命令与文件

ansible系统命令

ansible安装完成后提供了一组命令实现不同的功能

ansible                       # 核心指令,主要使用实现执行ad-hoc命令
ansible-playbook              # 通过读取playbook 文件后,执行相应的动作
ansible-pull                  # 拉取模式(ansible默认使用的是推送模式)
ansible-doc                   # 用于模块信息查询,以及相关文档
ansible-galaxy                # 下载/管理第三方扩展模块,类似于python的pip/esay_install
ansible-lint                  # 对playbook的语法进行检查的一个工具
ansible-vault                 # 用于敏感信息加密解密
ansible-config                # 浏览,编辑,管理ansible配置
ansible-inventory             # 展示ansible inventory信息,
ansible-console               # 控制台式的批量交互执行
ansible-connection            # 看名字,应该是ansible的connection plugins

ansible配置文件

/etc/ansible/ansible.cfg    # ansible默认主配置文件
/etc/ansible/hosts            # ansible命令执行ad-hoc的inventory文件(主机列表)

三、ansbile 简单使用

ansible连接操作客户端服务器可以直接通过账号密码操作也可以直接使用秘钥无密码访问操作,配置如下

# ansible服务器执行[我这里默认使用的是root账户]
# 1. 生成密码
ssh-keygen -t rsa  -P ""  -f  ~/.ssh/id_rsa

# 2. 配置无密码访问被操作服务器(例如,10.116.186.4)
ssh-copy-id 10.116.186.4

这样ansible服务器就可以使用当前用户无密码访问被操作服务器(例如,10.116.186.4)

1. ansible(ad-hoc)

配置inventory,具体语法格式查看相关文档

vi /etc/ansible/hosts  # 如下是我的2台ngnix服务器(centos7)

[nginx]
10.116.186.4
10.116.186.5

通过ansible模块批量执行ad-hoc命令

# 通过ping模块,测试服务器连通性
ansible nginx -m ping
10.116.186.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.116.186.5 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

# 通过command模块,可以执行命令,例如获取主机当前目录[备注:command模块为默认模块,可以不使用-m指定]
 ansible nginx -a 'pwd'
10.116.186.5 | CHANGED | rc=0 >>
/root
10.116.186.4 | CHANGED | rc=0 >>
/root

ansible有很多核心模块,例如:setup ping shell raw command copy等等,还可以自定义模块

2. ansible-playbook

playbook通过组织和模板的方式批量配置应用或者系统,包括:

# 核心元素
tasks:              # 任务,即由模块定义的操作列表
variables:          # 变量
templates:          # 模板,即使用模板语法编辑的相关配置文件
handlers:           # 由特定条件触发的任务/操作列表
roles:             # 角色

# 基础组件
hosts:              # 运行目标主机(运行指定任务或者操作)
remote_user:        # 在客户机上使用哪个用于身份执行任务/操作
sudo_user:          # 非管理员用户使用sudo权限执行任务/操作,前提条件是具有该权限
tasks:              # 任务列表 

一个简单的实例

vi demo.yaml

---
- hosts: nginx
  remote_user: root

  tasks:
  - name: ping servers
    ping:  
  - name: copy a file to nginx servers
    copy:
      src: /tmp/test.txt
      dest: /tmp/test.txt
      owner: root
      group: root
      mode: 0755

cat /tmp/test.txt
hello world

# 执行这个简单的playbook,没有指定inventory会使用默认/etc/ansible/hosts,直接指定-i /etc/ansible/hosts可以省略
ansible-playbook -i /etc/ansible/hosts demo.yaml 

PLAY [nginx] ****************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [10.116.186.5]
ok: [10.116.186.4]

TASK [ping servers] *********************************************************************************
ok: [10.116.186.4]
ok: [10.116.186.5]

TASK [copy a file to nginx servers] *****************************************************************
changed: [10.116.186.5]
changed: [10.116.186.4]

PLAY RECAP ******************************************************************************************
10.116.186.4               : ok=3    changed=1    unreachable=0    failed=0   
10.116.186.5               : ok=3    changed=1    unreachable=0    failed=0  

可以到服务器上查看文件是否存在
ssh 10.116.186.4 'ls -l /tmp/test.txt'      # ssh 10.116.186.5 'ls -l /tmp/test.txt'  
-rwxr-xr-x 1 root root 12 May  9 17:23 /tmp/test.txt

这里演示的只是一个非常简单的单文件的playbook,而playbook是可以通过文件目录主机完成非常复杂且强大的配置的。典型的一个playbook目录结构

└── demo          #项目名称
    ├── hosts_production  #生产环境hosts
    ├── hosts_staging     #测试环境hosts
    ├── group_vars        # hosts group变量目录
    ├── host_vars         # hosts 指定host变量目录
    ├── roles             # 角色列表目录
    │   ├── common        # common role 配置一些共通的任务或操作
    │   │   ├── defaults
    │   │   │   └── main.yaml
    │   │   ├── files
    │   │   │   ├── a.txt
    │   │   │   └── b.txt
    │   │   ├── handlers
    │   │   │   └── main.yaml
    │   │   ├── meta
    │   │   │   └── main.yaml
    │   │   ├── tasks
    │   │   │   └── main.yaml
    │   │   ├── templates
    │   │   │   └── ntp.conf.j2
    │   │   └── vars
    │   │       └── main.yaml
    │   ├── database              # 数据库角色,配置数据库相关任务
    │   │   ├── 目录结构与common类似
    │   └── web                  # web角色,配置web服务相关任务
    │       ├── 目录结构与common类似
    ├── site.yaml               # playbook入口,名字可以随意定,执行ansible-playbook的时候指定
    ├── webservers.yaml         # webserver的playbook定义文件,可以被site.yaml引用
    └── dbservers.yaml          # databaseserver的playbook定义文件,可以被site.yaml

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值