Ansible快速入门

小柒博客
小柒博客
小柒博客
196
文章
79
评论
2020-03-1814:47:29 评论 1,112 4452字阅读14分50秒

Ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,Ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架,Ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

Ansible的特点

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

1、no angents: 被管控节点无需安装agent

2、no server: 无服务端,使用是直接调用命名

3、modules in any languages: 基于模块工作, 可以使用任意语言开发模块

4、易读的语法: 基于yaml语法编写playbook

5、基于推送模式: 不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间

6、模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook是安全的

Ansible程序目录结构

配置文件: /etc/ansible/hosts

执行文件目录: /usr/bin/

lib依赖库: /usr/lib/python2.7/site-packages/ansible/

help文件: /usr/lib/python2.7/site-packages/ansible

Ansible组成结构

Ansible

是Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。

Ansible Playbook

任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yaml格式。

Inventory

Ansible管理主机的清单,默认是/etc/ansible/hosts文件。

Modules

Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。

Plugins

插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。

API

提供给第三方程序调用的应用程序编程接口。

环境准备

IP地址

操作系统 主机名 描述
192.168.1.75 CentOS 7.7.1908 (Core) Ansible Ansible管理节点
192.168.1.76 CentOS 7.7.1908 (Core) node1 受控节点1
192.168.1.77 CentOS 7.7.1908 (Core) node2 受控节点2
192.168.1.78 CentOS 7.7.1908 (Core) node3

受控节点3

Ansible安装

1)配置epel源

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

[root@ansible ~]# yum clean all

[root@ansible ~]# yum makecache

2)安装Ansible

[root@ansible ~]# yum -y install ansible

# 查看ansible版本

[root@ansible ~]# ansible --version

ansible 2.9.2

  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, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Ansible Inventory文件

Inventory中文文档

Inventory文件通常用于定义要管理的主机的认证信息,例如ssh登录用户名、密码以及key相关信息。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件配置。

配置文件路径为:/etc/ansible/hosts

基于密码连接

[root@ansible ~]# vim /etc/ansible/hosts

# 方法一 主机+端口+密码

[test]

192.168.1.76 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"

192.168.1.77 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"

192.168.1.78 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"

# 方法二 主机+端口+密码

[test]

192.168.1.7[6:8] ansible_ssh_user=root ansible_ssh_pass="123456"

# 方法二 主机+端口+密码

[test]

192.168.1.7[6:8]

[test:vars]

ansible_ssh_pass="123456"

基于密钥连接

基于秘钥连接需要先创建公钥和私钥,并发送给被管理机器

1)生成公私钥

[root@ansible ~]# ssh-keygen

[root@ansible ~]# for i in `seq 76 78`;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.${i};done

2)配置连接

[root@ansible ~]# vim /etc/ansible/hosts

# 方法一 主机+端口+密钥

[test]

192.168.1.76

192.168.1.77

192.168.1.78

# 方法二 别名主机+端口+密钥

[test]

node1 ansible_ssh_host=192.168.1.76 ansible_ssh_port=22

node2 ansible_ssh_host=192.168.1.77 ansible_ssh_port=22

node3 ansible_ssh_host=192.168.1.78 ansible_ssh_port=22

主机组的使用

# 主机组变量名+主机+密码

[apache]

192.168.1.76

192.168.1.77

[apache.vars]

ansible_ssh_pass='123456'

# 主机组变量名+主机+密钥

[nginx]

192.168.1.7[7:8]

# 定义多个组,把一个组当另外一个组的组员

#webserver组包括两个子组:apache nginx

[webserver:children]  

apache

nginx

临时指定inventory

1)先编辑一个主机定义清单

[root@ansible ~]# vim /etc/server

[server]

192.168.1.76

192.168.1.77

192.168.1.78

2)在执行命令是指定inventory

[root@ansible ~]# ansible server -m ping -i /etc/server -o

192.168.1.76 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

192.168.1.77 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

192.168.1.78 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

Inventory内置参数

参数

用途

例子

ansible_ssh_host 定义hosts ssh地址 ansible_ssh_host=192.168.1.1
ansible_ssh_port 定义hosts ssh端口 ansible_ssh_port=22
ansible_ssh_user 定义hosts ssh用户名 ansible_ssh_user=root
ansible_ssh_pass 定义hosts ssh用户密码 ansible_ssh_pass=123456
ansible_sudo 定义hosts sudo用户 ansible_sudo=admin
ansible_sudo_pass 定义hosts sudo密码 ansible_sudo_pass=123456
ansible_sudo_exe 定义hosts sudo路径 ansible_sudo_exe=/usr/bin/sudo
ansible_connection 定义hosts 连接方式 ansible_connection=local
ansible_ssh_private_key_file 定义hosts sudo私钥 ansible_ssh_private_key_file=/etc/key
ansible_ssh_shell_type 定义hosts shell类型 ansible_ssh_shell_type=bash
ansible_python_interpreter 定义hosts任务执行python路径 ansible_python_interpreter=/usr/bin/python2.7
ansible_*_interpreter 定义hosts其他语言解析路径 ansible_*_interpreter=/usr/bin/ruby

Ansible中文权威指南:http://www.ansible.com.cn/docs

继续阅读
  • 微信号
  • 微信扫一扫加我~~
  • weinxin
  • 微信公众号
  • 微信扫一扫关注我吧~~
  • weinxin
广告也精彩
小柒博客
  • 本文由 发表于 2020-03-1814:47:29
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: