前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ansible环境搭建

ansible环境搭建

作者头像
吾爱运维
发布2022-09-29 21:48:54
8000
发布2022-09-29 21:48:54
举报
文章被收录于专栏:吾爱运维吾爱运维

最近准在学习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了,后面管理受控端服务器就方便了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾爱运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档