ansible环境搭建

2022-09-29 21:48:54 浏览数 (1)

最近准在学习ansible自动化运维工具,这个ansible老厉害了,可以一条命令或者一个playbook剧本批量处理上百台服务器任务。本文和大家聊聊ansible环境搭建那些事。

一、ansible介绍

ansible是一个开源自动化运维平台,可以在Ansible playbook中在完美描述IT应用架构的简单的自动化语言。Ansible可以管理强大的自动化任务,并且可以适应许多不同的工作流和环境。同时,Ansible的新使用者可以非常快速的使用它并将其带入生产环境。ansible 特性: no agent:不需要在被管控机器上安装客户端程序 no server:无服务端,直接运行命令 modules in any languages:基于模块工作 yaml,not code:使用yaml语言定制playbook ssh by default:基于ssh strong multi­tier solution:可以实现多级指挥

跨平台支持:ansible的无代理特性支持Linux,Windows,Unix和网络设备,无论 物理机,虚拟机,云主机和容器环境都能支持。 二、系统环境 Red Hat Enterprise Linux release 8.2 (Ootpa)

三、操作步骤 1、安装ansible (1)首先配置yum源,包含本地源和网络源(阿里源),方法如下: RHEL8配置yum源

(2)yum安装ansible: yum install -y ansible 等待自动完成安装 2、 控制机和被管理主机devops用户sudo提权配置 (1)创建devops用户 ps:可以使用root用户配置ansible环境和执行命令,但是root权限太大了,所以专门创建devops用户来配置和使用ansible命令。为了使用devops账号可以用sudo执行管理员权限,所以要提权,控制机和被管理主机都需要配置sudo提权。

在root用户下操作: useradd devops 创建devops用户

usermod -G wheel devops 给devops用添加wheel附属组 vim /etc/sudoer文件第110行,去掉前面注释#号,最后wq!让这条命令生效。

%wheel ALL=(ALL) NOPASSWD: ALL 这样用户devops就能使用sudo命令提权了。 同理被控制的5台主机也要创建devops账号做提权配置,主机名分别改为node1.com这样,方便记忆。

3、控制机配置ssh免密登陆 (1)为了访问被管理主机方便,我们在控制节点主机做域名解析,/etc/hosts配置文件如下:

测试node1.com和node1是否可以ping通,如下图说明成功了。

(2)使用su - devops命令切换到devops用户下(shell环境变量是devops用户的,pwd命令,显示为:/home/devops)

(3)ssh-keygen命令生成私钥和公钥

ssh-keygen 直接回车、回车、回车就行。

查看公钥id_rsa.pub具体信息

(4)ssh-copy-id node1 将控制机公钥拷贝到被管理主机node1,过程中需要输入yes和node1的devops用户密码。

(5)cat .ssh/authorized_keys查看被管理主机授权信息

发现cat .ssh/authorized_keys就是控制主机公钥文件内容。

(6)测试ssh免密登陆node1情况

ps:在控制机切换到devops用户再使用下面命令测试。

ssh node1 直接登陆到node1被管理主机

ssh node1 hostname 查看的hostname是node1的主机名

4、配置ansible.cfg文件

备注:ansible的配置文件叫ansible.cfg, 默认位于/etc/ansible/ansible.cfg 。此文件定义了连接受管主机的方法、权限以及受管主机清单文件等信息。一般都是在devops用户下面创建ansible文件夹,然后创建ansible.cfg文件,根据ansible.cfg的读取顺序当前目录的配置文件优先于默认路径的,所以不用担心配置文件不生效。可以通过ansible --version查看当前配置文件路径。

如下是我的ansible.cfg文件

[defaults]

inventory = /home/devops/ansible/inventory

#定义inventory主机清单文件的位置,默认清单文件是/etc/ansible/hosts

remote_user = devops

#设置受管主机的用户,默认是root。

roles_path = /home/devops/ansible/roles

[privilege_escalation]

become=True # 在受管主机是否进行提权

become_method=sudo #提权方式为sudo ,默认是su

become_user=root #提权后的用户

become_ask_pass=False #提权时是否需要密码

5、配置inventory文件

inventory文件就是受管主机的清单,定义了哪些主机将被ansible管理。

ps:根据实际情况是否要分租,主机可以是IP地址,也可以是主机名。

6、检查ansible配置是否正确

可以使用如下命令检查:

(1) ansible all --list-hosts

(2)ansible all -m ping #ping所有被管理主机,如下图表示成功了。

7、故障排除

(1)控制主机切换到devops用户后,使用sudo ssh-keygen等命令无法执行,按Table键查询不到命令,这因为devops用户执行sudo的权限;

解决方法:参照上面第2条。

(2)控制机devops用户下执行ssh node1提示输入node1控制机devops密码一直无法成功;

解决方法:给被管理主机devops用户配置密码。

(3)ssh-copy-id node1 已经将公钥发给node1主机,但是ssh node1连接仍然需要输入node1的devops用户密码;

解决方法:说明ssh免密登陆异常,可以先通过密码登陆node1主机,查看.ssh/authorized_keys文件里是否是控制主机的公钥信息,若不是可以将authorized_keys内容清空,重新执行ssh-copy-id命令;最后一招可以将控制主机的/home/devops/.ssh/文件夹内容删了,重新按照上面第3条执行。

(4)执行ansible all --list-host提示主机列表为空

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost

does not match 'all'

解决方法:第一:有可能是ansible.cfg配置文件的inventory主机清单文件路径配置错了(或者单词拼写错了),另外就是inventory主机清单文件配置异常,查看这2个文件。

第二:执行ansible all -m ping命令时当前文件夹路径不是我们手动创建ansible.cfg的路径,默认查找/etc/ansible/ansible.cfg配置文件和主机清单文件了,将路径切换到/home/devops/ansible文件夹就可以了。

四、总结

综上所述,ansible正常工作需要满足以下几个条件:devops用户有sudo的权限、ssh免密登陆正常、ansibel.cfg配置文件和inventory主机清单文件都都配置正常。只要ansible环境搭建OK了,后面管理受控端服务器就方便了。

0 人点赞