Ansible快速入门

2021-07-07 10:27:27 浏览数 (1)

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

0 人点赞