首页 > 其他分享 >集中化运维工具Ansible

集中化运维工具Ansible

时间:2022-10-13 15:55:48浏览次数:47  
标签:control 运维 集中化 ansible 默认 Ansible hosts ssh root

1.环境准备

现准备3台机器,一台作为控制节点,安装ansible,另外两台作为被管理节点,不需安装ansible

主机名IP地址节点类型系统版本
ansible-control 192.168.250.245 控制节点 centos7.8
node01 192.168.250.50 被管理节点 centos7.8
node02 192.168.250.51 被管理节点 centos7.8

2.什么是ansible

Ansible是一款自动化运维工具,基于Python开发,客户端无需安装,Ansible 使复杂的更改变得容易。它处理配置管理、应用程序部署、云配置、临时任务执行、网络自动化和多节点编排等批量任务的执行。

3.ansible有什么特点

  • 部署简单,只需在主控端部署ansible环境,被控端无需做任何操作。
  • 默认使用SSH协议对设备进行管理。
  • 有大量常规运维操作模块,可实现日常绝大部分操作。
  • 配置简单、功能强大、扩展性强。
  • 支持API及自定义模块,可通过Python轻松扩展。
  • 通过Playbooks来定制强大的配置、状态管理。
  • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可。
  • 要求python的版本为2.6以上,客户端需要sshpython支持。
  • 支持Windows,但仅支持客户端,服务端必须是Linux系统。
  • 幂等性:允许重复执行N次,没有变化时,只会执行第一次。

4.怎么安装ansible

ansible只需在管理机,或者说是控制端安装,被管理端无需安装。

以上图环境为例,在CENTOS7.8的系统,ansible-control主机上安装,采用yum安装方式:

4.1检查环境

首先检查python版本,大于2.6就不需要更新python版本。

[root@ansible-control ~]# python -V
Python 2.7.5
[root@ansible-control ~]# 

CENTOS7.8默认安装Python 2.7.5python环境满足条件。

同时,检查当前系统是否存在ansible安装版本,是否需要升级:

[root@ansible-control ~]# rpm -qa | grep ansible
[root@ansible-control ~]# 

说明没有ansible或相应版本。

4.2安装epel

正式安装ansible之前,先安装第三方epel源:

[root@ansible-control ~]# yum install epel-release
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 epel-release.noarch.0.7-11 将被 安装
……
4.3安装ansible
[root@ansible-control ~]# yum install -y ansible
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 ansible.noarch.0.2.9.27-1.el7 将被 安装
--> 解决依赖关系完成
……
已安装:
  ansible.noarch 0:2.9.27-1.el7                                                                                                                                                                                  

完毕!
[root@ansible-control ~]# 
4.4查看版本

安装完成后,查看当前安装的版本:

[root@ansible-control ~]# ansible --version
ansible 2.9.27
  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  2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
[root@ansible-control ~]# 

当前版本为2.9.27,配置文件路径为/etc/ansible/ansible.cfg

5.ansible基本架构

Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。

上面这张图是网上找的,很清晰,下面这张更全面:

  • 核心:ansible
  • 核心模块(Core Modules):是ansible自带的模块。
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块。
  • 插件(Plugins):完成某个功能的补充。
  • 剧本(Playbooks):**ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行。**
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,默认是基于SSH连接到目标机器上执行操作的,但是它还支持其他的连接方法,所以需要有连接插件,管理端支持local ssh、 paramiko三种方式连接被管理端。

6.ansible的7个指令

安装完ansible后,ansible一共提供了七个指令:

6.1ansible

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。

 

 

 

6.2ansible-doc

该指令用于查看模块信息,常用参数有两个-l  -s ,读者可以使用命令ansible-doc -l查看Ansible中已加载的模块。

 

 

 读者可以使用ansible-doc -s 查看某个模块的用法

6.3ansible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,可以形象的理解其类似于centos下的yumpython下的pipeasy_install 。

它的官方文档地址为:

https://galaxy.ansible.com/docs/using/installing.html
6.4ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。

用法:

ansible-lint  playbook.yml
6.5ansible-playbook

它是ansible的一种执行模式,一个简单的示例如下:

 

它是ansible的一种执行模式,一个简单的示例如下:

 

[root@ansible-control ~]# ansible-playbook myregister.yml -k
SSH password: 

PLAY [192.168.250.50] **********************

 

6.6ansible-pull

 

它是一种拉模式,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间。

 

6.7ansible-vault

 

ansible-vault主要应用于配置文件中含有敏感信息,又不希望被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。

 

主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。

 

7.ansible任务执行模式

 

ansible执行自动化任务,分为两种执行模式:

 

  • ad-hoc:单个模块,单条命令的批量执行,称之为ad-hoc
  • playbook:多个命令,它可以把多个想要执行的任务放到一个playbook中,通过多个任务列表可以完成一个总体的目标,这就是playbook

 

8.ansible配置文件

 

ansible的配置文件位于/etc/ansible目录下,主要有ansible.cfghosts文件。

 

[root@ansible-control ~]# cd /etc/ansible
[root@ansible-control ansible]# ll -sh
总用量 32K
 20K -rw-r--r--. 1 root root  20K 1月  16 2022 ansible.cfg
4.0K -rw-r--r--. 1 root root 1.1K 8月  10 12:49 hosts
4.0K -rw-r--r--. 1 root root 1.1K 8月   9 09:00 hosts.rpmsave
   0 drwxr-xr-x. 2 root root    6 1月  16 2022 roles
[root@ansible-control ansible]# 

 

8.1hosts文件

 

8.1.1查看hosts示例文件

 

Ex 1Ungrouped hosts, specify before any group headers.(对于未分组的主机,请在任何组头之前指定。)

 

green.example.com
blue.example.com
192.168.100.1
192.168.100.10

 

Ex 2A collection of hosts belonging to the 'webservers' group(属于“Web服务器”组的主机集合)

 

[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110

 

如果有多个主机遵循一种模式,则可以指定,比如:

 

www[001:006].example.com
db[a-f].haopython.com

 

Ex 3A collection of database servers in the 'dbservers' groupdbserver组中的数据库服务器集合)

 

[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57

 

上面的/etc/ansible/hosts文件如下:

 

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

green.example.com
blue.example.com
192.168.100.1
192.168.100.10

[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110

[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57

 

8.1.2hosts文件中的主机变量

 

以下是hosts部分中经常用到的变量部分:

 

ansible_ssh_host     #用于指定被管理的主机的真实IP
ansible_ssh_port     #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user     #ssh连接时默认使用的用户名
ansible_ssh_pass     #ssh连接时的密码
ansible_sudo_pass     #使用sudo连接用户时的密码
ansible_sudo_exec     #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file     #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type     #目标系统的shell的类型,默认sh
ansible_connection     #SSH 连接的类型:local , ssh , paramiko,在 ansible1.2之前默认是 paramiko ,后来智能选择,优先使用基于ControlPersist 的ssh
ansible_python_interpreter     #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl的路径
ansible_*_interpreter     #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或perl等其它语言

 

比如链接时ssh的密码也可以写在/etc/ansible/hosts文件中:

 

[webservers]
www.haopython.com http_port=80
beta.example.org   http_port=80
192.168.1.100
192.168.1.110

[webservers:vars]
http_port=80
ansible_ssh_pass='haopython999'

 

8.1.3hosts文件中的主机组

 

主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关系我们使用:children来表示,如下所示:

 

[webservers]
alpha.example.org
192.168.1.100

[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net

[allhosts:children]
webservers
dbservers

 

8.2ansible.cfg文件

 

/etc/ansible/ansible.cfg文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。

 

#inventory      = /etc/ansible/hosts   该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表 
#library        = /usr/share/my_modules/   Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp   指定远程执行的路径
#local_tmp      = ~/.ansible/tmp   ansible管理节点的执行路径
#forks  = 5   forks 设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
#poll_interval  = 15   轮询间隔
#sudo_user      = root   sudo使用的默认用户 ,默认是root
#ask_sudo_pass = True  是否需要用户输入sudo密码
#ask_pass      = True   是否需要用户输入连接密码
#remote_port    = 22  这是指定连接对端节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
#module_lang    = C  这是默认模块和系统之间通信的计算机语言,默认为’C’语言.
host_key_checking = False  跳过ssh首次连接提示验证部分,False表示跳过。
#timeout = 10  连接超时时间
#module_name = command   指定ansible默认的执行模块
#nocolor = 1    默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:
#private_key_file=/path/to/file.pem  在使用ssh公钥私钥登录系统时候,使用的密钥路径。

 

 

 

 

 

标签:control,运维,集中化,ansible,默认,Ansible,hosts,ssh,root
From: https://www.cnblogs.com/zouhong/p/16788414.html

相关文章