Ansible基础入门

Ansible基础入门

目录

Ansible基础概述

Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率

同类型软件对比

  • Ansible

  • Saltstack

  • puppet

对比puppetAnsibleSaltstack
开发语言rubypythonPython
远程执行功能没有有、串行有、并行
客户端没有没有
架构SSHC/S、也支持SSH

Ansible的功能

1.远程执行 批量执行远程命令,可以对多台主机进行远程操作 
2.配置管理 批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停 
3.事件驱动 通过Ansible的模块,对服务进行不同的事件驱动 比如: 
	1)修改配置后重启 
	2)只修改配置文件,不重启 
	3)修改配置文件后,重新加载 
	4)远程启停服务管理 
4.管理公有云 通过API接口的方式管理公有云,不过这方面做的不如saltstack. saltstack本身可以通过saltcloud管理各大云厂商的云平台
5.二次开发 因为语法是Python,所以便于运维进行二次开发
6.任务编排 可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署 123456789101112131415161718192021222324
7.跨平台,跨系统 
几乎不受到平台和系统的限制,比如安装apache和启动+服务 
在Ubuntu上安装apache服务名字叫apache2 
在CentOS上安装apache服务名字叫httpd 

在CentOS6上启动服务器使用命令:/etc/init.d/nginx start 
在CentOS7上启动服务器使用命令:systemctl start nginx

Ansible的架构

  1. 连接插件connection plugins用于连接主机 用来连接被管理端

  2. 核心模块core modules连接主机实现操作, 它依赖于具体的模块来做具体的事情

  3. 自定义模块custom modules根据自己的需求编写具体的模块

  4. 插件plugins完成模块功能的补充

  5. 剧本playbookansible的配置文件,将多个任务定义在剧本中,由ansible自动执行

  6. 主机清单inventor定义ansible需要操作主机的范围

最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

ansible架构

Ansible的执行流程

  1. Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务

  2. 首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块

  3. 其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表

  4. 最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行

Ansible安装部署

环境准备

主机名WanIPLanIP角色
m0110.0.0.61172.16.1.61Ansible控制端
web0110.0.0.7172.16.1.7被控端
web0210.0.0.8172.16.1.8被控端

安装Ansible

选项说明
–versionansible版本信息
-v显示详细信息
-i主机清单文件路径,默认是在/etc/ansible/hosts
-m使用的模块名称,默认使用command模块
-a使用的模块参数,模块的具体动作
-k提示输入ssh密码,而不使用基于ssh的密钥认证
-C模拟执行测试,但不会真的执行
-T执行命令的超时
#1.安装ansible 有epel源 
[root@m01 ~]# yum install -y ansible

[root@m01 ~]# ansible --version 
## ansible版本号 
ansible 2.9.27 
## ansible默认配置文件 
config file = ca
## 配置文件模块路径 
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] 
## python模块路径 
ansible python module location = /usr/lib/python2.7/site-packages/ansible 
## ansible可执行命令的路径 
executable location = /usr/bin/ansible
## Python版本 
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Ansible配置文件读取顺序

  1. $ANSIBLE_CONFIG

  2. .ansible.cfg

  3. ~/.ansible.cfg

  4. /etc/ansible/ansible.cfg

Ansible配置文件详解

[root@m01 ~]# vim /etc/ansible/ansible.cfg 
#inventory      = /etc/ansible/hosts      #主机列表配置文件
#library        = /usr/share/my_modules/  #库文件存放目录
#remote_tmp     = ~/.ansible/tmp          #临时py文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp          #本机的临时执行目录
#forks          = 5                       #默认并发数
#sudo_user      = root                    #默认sudo用户
#ask_sudo_pass = True                     #每次执行是否询问sudo的ssh密码
#ask_pass      = True                     #每次执行是否询问ssh密码
#remote_port    = 22                      #远程主机端口
host_key_checking = False                 #跳过检查主机指纹
log_path = /var/log/ansible.log           #ansible日志
 
#普通用户提权操作
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False 

Ansible Inventory(主机清单)

/etc/ansible/hosts是ansible默认主机资产清单文件,用于定义被管理主机的认证信息, 例如ssh登录用户名、密码以及key相关信息。Inventory文件中填写需要被管理的主机与主机组信息。还可以自定义Inventory主机清单的位置,使用-i指定文件位置即可

使用IP+端口+用户+密码
[root@m01 ~]# vim /etc/ansible/hosts 
[web_group] 
10.0.0.7 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123' 
10.0.0.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'

## 检测web_group主机是否通 
[root@m01 ~]# ansible web_group -m ping
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

10.0.0.8 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"

[root@m01 ~]# ansible web_group -m shell -a 'df -h'
10.0.0.7 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.5G   18G   8% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0

10.0.0.8 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.5G   18G   8% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0
主机名+密码
## 注意:该方式,需要做域名解析,把主机名解析在IP上,否则ansible无法识别 
[root@m01 ~]# vim /etc/ansible/hosts 
[web_group] 
web0[1:2] ansible_ssh_pass='123'

[root@m01 ~]# vim /etc/hosts 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 
localhost localhost.localdomain localhost6 localhost6.localdomain6 
10.0.0.7 web01 
10.0.0.8 web02

[root@m01 ~]# ansible web_group -m ping
web01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

web02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

变量方式,主机名+密码
## 使用变量的写法 
[web_group] 
web0[1:2] 
[web_group:vars] 
ansible_ssh_pass='1' 

[root@m01 ~]# vim /etc/hosts 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 
localhost localhost.localdomain localhost6 localhost6.localdomain6 
10.0.0.7 web01 
10.0.0.8 web02
使用秘钥连接
#1.先在管理机上生成秘钥对 
[root@m01 ~]# ssh-keygen 

#2.推送公钥 
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.7 
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.8

#3.修改主机清单 
[root@m01 ~]# vim /etc/ansible/hosts 
[web_group] 
10.0.0.7:22
10.0.0.8:22

[root@manage01 ~]# ansible web_group -m ping
10.0.0.8 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong
企业使用究极进化版(☆☆☆☆☆)
[root@m01 ~]# vim /etc/ansible/hosts 
[web_group] 
web01 ansible_ssh_host=10.0.0.7 ansible_ssh_port=22
web02 ansible_ssh_host=10.0.0.8 ansible_ssh_port=22
配置主机标签组
## 标签组配置语法 
[标签组名字:children] 
主机标签名1 
主机标签名2 

[lnmp:children] 
db_group
web_group

## ansible主机写法: 
### 主机清单中的所有主机 
[root@m01 ~]# ansible all -m ping
### 只针对某一台主机 
[root@m01 ~]# ansible web01 -m ping 
### 针对某一个IP 
[root@m01 ~]# ansible 10.0.0.7 -m ping 
### 指定某一个标签名中的所有主机 
[root@m01 ~]# ansible web_group -m ping 
### 指定某一个标签组中的所有主机 
[root@m01 ~]# ansible lnmp -m ping

Ansible执行任务

  • Ad-hoc

  • playbook

ad-hoc模式的命令使用

ad-hoc语法: 
ansible 主机 -m 模块 -a 动作

ad-hoc结果返回颜色

  • 绿色:命令执行成功且无变化的颜色

  • 黄色:命令执行成功,但是有变化(有更改)

  • 红色:命令执行失败,报错msg

  • 粉色|紫色:Warning,警告一般无需处理

ansible查看帮助

ansible-doc 模块名 
找到帮助信息中的:EXAMPLES
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耗同学一米八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值