ansible基础快速入门

1、Ansible基础知识与架构

1.1 什么是Ansible

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

1.2 Ansible的主要功能

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

主要包括:(1)、连接插件connection plugins:负责和被监控端实现通信;(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;(3)、各种模块核心模块、command模块、自定义模块;(4)、借助于插件完成记录日志邮件等功能;(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

1.3 Ansible的特点

1、部署简单,只需在主控端部署ansible环境,被控端无需做任何操作;

2、默认使用SSH协议对设备进行管理;

3、有大量常规运维操作模块,可实现日常绝大部分操作;

4、配置简单、功能强大、扩展性强;

5、支持API及自定义模块,可通过Python轻松扩展;

6、通过Playbooks来定制强大的配置、状态管理;

7、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

8、提供一个功能强大、操作性强的Web管理界面和REST API接口-AWX平台。

1.4 Ansible基础架构

在这里插入图片描述

2、Ansible安装与配置

2.1 Ansible安装方式

2.1.1 rpm安装

[root@vm001 ~]# wget -O  /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@vm001 ~]# yum  -y install ansible

2.1.2 pip安装

[root@vm002 ~]#  yum -y install python3 python3-devel python3-pip 
[root@vm002 ~]# pip3 install --upgrade pip -i https://pypi.douban.com/simple/
[root@vm002 ~]# pip3 install ansible -i https://pypi.douban.com/simple/

2.1.3 确认安装

[root@vm001 ~]# ansible --version
ansible 2.9.27
[root@vm001 ~]# ansible localhost -m ping    #验证是否安装好
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

2.2 Ansible 配置文件

2.2.1 Ansible 配置文件解析

[root@vm001 ~]#  rpm -qc ansible
/etc/ansible/ansible.cfg     #ansible主配置文件
/etc/ansible/hosts           #主机清单文件


[root@vm001 ~]# cat /etc/ansible/ansible.cfg   
#inventory      = /etc/ansible/hosts    # 配置主机清单路径
#library        = /usr/share/my_modules/   #模块存放路径
#module_utils   = /usr/share/my_module_utils/   #模块存放路径
#remote_tmp     = ~/.ansible/tmp    #模块推送至被控端后临时存放路径,被控端执行完成后会删除
#local_tmp      = ~/.ansible/tmp    #本地模块临时存放路径
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml #插件过滤文件
#forks          = 5     # 并发数量
#poll_interval  = 15  #多久轮一次
#sudo_user      = root
#ask_sudo_pass = True
#ask_pass      = True
#transport      = smart
#remote_port    = 22     #远程端口
#module_lang    = C
#module_set_locale = False
#host_key_checking = False  # ssh主机时会提示输入yes/no,这个参数可以设置不提示

2.2.2 Ansible 配置文件优先级

# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first

配置优先级:

  • 第一步读取:ANSIBLE_CONFIG 这个变量
  • 第二步读取:当前项目目录下的ansible.cfg
  • 第三步读取: 当前用户家目录下的.ansible.cfg
  • 第四步读取: /etc/ansible/ansible.cfg

配置文件优先级演示 :

    1. ANSIBLE_CONFIG
[root@vm001 ~]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
[root@vm001 ~]# export ANSIBLE_CONFIG=/tmp/ansible.cfg
[root@vm001 ~]# touch /tmp/ansible.cfg
[root@vm001 ~]# ansible --version
ansible 2.9.27
  config file = /tmp/ansible.cfg
[root@vm001 ~]# unset ANSIBLE_CONFIG  #取消
    1. 当前项目目录下的ansible.cfg,常用
[root@vm001 ~]# mkdir  project1
[root@vm001 ~]# cd project1/
[root@vm001 project1]# touch ansible.cfg
[root@vm001 project1]# ansible --version
ansible 2.9.27
  config file = /root/project1/ansible.cfg
    1. 为当前用户植入配置文件,不常用
[root@vm001 ~]#  touch  ~/.ansible.cfg
[root@vm001 ~]#  ansible --version
ansible 2.9.27
  config file = /root/.ansible.cfg
    1. 默认的配置文件加载路径,优先级最低
[root@vm001 ~]# rm -rf  .ansible.cfg 
[root@vm001 ~]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg

总结: 实际使用中会为每个项目建立不同的配置文件与主机清单,方便管理。

2.3 Ansible Inventory

2.3.1 Inventory是什么

Inventory 文件主要用来填写被管理主机以及主机组信息;
默认Inventory文件为/etc/ansible/hosts;
也可以自定义文件,当执行ansible命令时使用-i 选项指定Inventory文件位置

2.3.2 Inventory-密码连接方式

1.指定主机IP,端口,用户名,密码

[webservers]
192.168.1.1 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'

# 通过域名的简写方式
web[1:10].panpancar.com ansible_ssh_pass '123456'

2.通过变量方式定义密码

[webservers:vars]
 ansible_ssh_port=22 
 ansible_ssh_user=root
ansible_ssh_pass='123456'

2.3.3 Inventory-密钥链接方式

1.创建密钥对,然后推送密钥

[root@jenkins-001 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.1.1

2.配置inventory主机清单

[webservers]
192.168.1.1
192.168.1.2

#定义别名:
web01 ansible_ssh_host=192.168.1.1 ansible_ssh_port=22
web02 

2.3.4 使用普通用户管理被控端

说明: ansible使用 user001 普通用户统一管理所有的被控端节点
1、首先控制端、被控端,都要有user001用户

[root@jenkins-001 ~]# useradd user001
[root@jenkins-001 ~]# echo '123' | passwd --stdin user001

2.将控制端的user001用户公钥推送至被控端user001用户下,使普通用户能进行免密码登录

[root@jenkins-001 ~]# su - user001
[user001@jenkins-001 ~]$ ssh-keygen
[user001@jenkins-001 ~]$ ssh-copy-id  -p22612  -i .ssh/id_rsa.pub  192.168.1.28

3.所有主机的user001用户必须添加sudo权限

[root@jenkins-001 ~]# visudo
user001 ALL=(ALL)       NOPASSWD:ALL

[root@web-002 ~]# visudo -csf /etc/sudoers
/etc/sudoers:解析正确

4.修改/etc/ansible/ansible.cfg主配置文件,配置普通用户提权

[root@jenkins-001 ~]# vim /etc/ansible/ansible.cfg 
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

2.4 Ansible相关工具

ansible命令格式:

ansible <host-pattern> [-m module_name] [-a args]

ansible的host-pattern使用:

#指定操作所有组
ansible all -m ping

#通配符
ansible "*" -m ping
ansible 10.0.0.* -m ping 

# 与:在webserver组,并且在dbservers中的主机
ansible "webservers:&dbservers"  -m ping

# 或:在webservers组,或者在appservers中的主机
ansible "webservers:appservers" -m ping

# 非: 在webservers组,但不在app组中的主机
ansible 'webservers:!apps' -m ping

# 正则表达式:
ansible "~(web|db.*\.panapncar\.com)" -m ping

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值