安装ansible

1.ansible是如何工作的

如果管理的服务器很多,如几十台甚至几百台,那么就需要一个自动化管理工具了,ansible就是这样的一种自动化管理工具。

ansible是通过ssh连接到被管理主机,然后执行相关操作的,如下图所示。

ansible主机通过ssh连接到被管理主机时,需要提前设置密钥登录,使得从ansible主机可以无密码登录到被管理主机。

2.在 RHEL8中安装ansible

先使用root用户登录server,在其上配置epel源

[root@RHEL ~]# yum -y install https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@RHEL ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@RHEL ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

挂载镜像

[root@RHEL ~]# mount /dev/cdrom /mnt/

配置本地yum源

[root@RHEL ~]# cat /etc/yum.repos.d/jiayi.repo 
[jiayi]
name=jiayi
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0

[jia]
name=jia
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0

安装开发工具

 yum ‐y groupinstall 开发工具

下载Python3.9.5

[root@RHEL ~]# ls 
公共  视频  文档  音乐  anaconda-ks.cfg             
模板  图片  下载  桌面  Python-3.11.7.tgz

安装必须的包

[root@RHEL ~]# dnf -y install gcc zlib* libffi-devel

安装Python

[root@RHEL Python-3.11.7]# ./configure --prefix=/usr/local/python3 --enable-optimizations
[root@RHEL Python-3.11.7]# make
[root@RHEL Python-3.11.7]# make install

删除原先的Python3和pip3

[root@RHEL Python-3.11.7]# rm -rf /usr/bin/python3
[root@RHEL Python-3.11.7]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[root@RHEL Python-3.11.7]# rm -rf /usr/bin/pip3
[root@RHEL Python-3.11.7]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

查看Python3和Pip3是否正确的被安装

[root@RHEL ~]# python3 --version
Python 3.11.7
[root@RHEL ~]# pip3 --version
pip 23.2.1 from /usr/local/python3/lib/python3.11/site-packages/pip (python 3.11)

安装ansible

[root@RHEL ~]# rpm -ivh ansible-2.9.11-1.el8ae.noarch.rpm 
警告:ansible-2.9.11-1.el8ae.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
错误:依赖检测失败:
    python3-cryptography 被 ansible-2.9.11-1.el8ae.noarch 需要
    python3-jinja2 被 ansible-2.9.11-1.el8ae.noarch 需要
    sshpass 被 ansible-2.9.11-1.el8ae.noarch 需要

需要解决依赖包问题

前面两个使用本地yum源就可以解决了

安装以上依赖

[root@RHEL ~]# yum -y install python3-cryptography
[root@RHEL ~]# yum -y install python3-jinja2
[root@RHEL ~]# rpm -ivh sshpass-1.06-3.el8ae.x86_64.rpm

再次安装ansible

[root@RHEL ~]# ansible --version
ansible 2.9.11
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Sep  9 2021, 07:49:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]

使用命令检查ansible的安装结果

[root@RHEL ~]# ansible --version
ansible 2.9.11
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Sep  9 2021, 07:49:02) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
[root@RHEL ~]# pip3 --version
pip 23.2.1 from /usr/local/python3/lib/python3.11/site-packages/pip (python 3.11)

这里安装的ansible的版本是2.9.11,同时也显示ansible的默认配置是letc/ansible/ansible.cfgo还要确保ansible主机能够解析所有的被管理机器,这里通过配置/etc/hosts 来实现,/etchosts的内容如下。

[root@RHEL ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.10    RHEL
192.168.10.20    RHEL2
192.168.10.30    RHEL3

在RHEL2和RHEL3两台机器上确认已经创建好jiayi用户,如果没有请自行创建,然后配置好sudo

[root@RHEL2 ~]# cat /etc/sudoers.d/jiayi
jiayi ALL=(root) NOPASSWD: ALL

[root@RHEL3 ~]# cat /etc/sudoers.d/jiayi
jiayi ALL=(root) NOPASSWD: ALL

这样在这两台机器上,jiayi用户通过sudo-i可以无密码切换到root用户。

ssh2、3号(自己配置密钥无密码连接RHEL2、3)

[root@RHEL ~]# ssh RHEL2
Last login: Tue Dec 19 22:04:28 2023 from 192.168.10.10
[root@RHEL2 ~]# exit
注销
Connection to rhel2 closed.
[root@RHEL ~]# ssh RHEL3
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Wed Dec 20 11:04:28 2023 from 192.168.10.10
[root@RHEL3 ~]# exit
注销
Connection to rhel3 closed.

3.编写ansible.cfg和清单文件

执行ansible或ansible-playbook命令时,优先使用当前目录中ansible.cfg的配置。如果当前目录中没有,则使用默认的/etc/ansible.cfg中的配置。

先在家目录下创建ansible.cfg,内容如下

[root@RHEL ~]# cat ansible.cfg 
[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root

这里在[defaults]字段下只添加了一句inventory = ./hosts,表示把当前目录下名称为hosts的文件当作清单文件。

在 [privilege_escalation]字段下定义了如何提升权限,因为是使用lduan用户登录到被管理主机的,所以需要提升权限。这个字段下写了3条

(1)become=True:登录到被管理主机时要切换到其他用户。

(2)become_method=sudo:以 sudo的方式切换。

(3)become_user-root :切换到root用户。

这三句的意思是,当用ssh登录到被管理主机时,以 sudo的方式切换到root,这也是为什么一开始要在被管理主机上配置好sudo的原因。

所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机,那么分别写在hosts中

[root@RHEL ~]# cat hosts 
RHEL2
RHEL3

如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法

[root@RHEL ~]# cat hosts
RHEL2
RHEL3
RHEL[10:15]

[db1]
RHEL[2:5]

[db2]
RHEL6
RHEL7

[db3:children]
db1
db2

这里加了一行RHEL[10:15],表示 RHEL10到RHEL15,这样在清单文件中就写了8台主机

定义了两个主机组db1和db2,db1组中包括的主机有RHEL2到RHEL5,db2组中包括的主机有RHEL6和RHEL7

定义了一个主机组db3,但是后面加了":children",则这个主机组下面的db1和db2就不再表示主机了,而是表示主机组。所以,db3这个主机组中所包括的主机是RHEL2到RHEL5及RHEL6和RHEL7这6台主机

下面查看每个主机组中有多少主机。首先查看主机组db1中的主机

[root@RHEL ~]# ansible db1 --list-hosts
  hosts (4):
    RHEL2
    RHEL3
    RHEL4
    RHEL5

共4台主机。

查看主机组db2中的主机

[root@RHEL ~]# ansible db2 --list-hosts
  hosts (2):
    RHEL6
    RHEL7

共2台主机。

查看主机组 db3中的主机

[root@RHEL ~]# ansible db3 --list-hosts
  hosts (6):
    RHEL2
    RHEL3
    RHEL4
    RHEL5
    RHEL6
    RHEL7

共6台主机,与分析的是一样的。

还有一个内置主机组叫作all,表示所有主机。

了解了清单文件的写法之后,最终把清单文件写成如下内容。

[root@RHEL ~]# cat hosts
RHEL2
RHEL3

[db]
RHEL2
RHEL4
相关推荐
a266378963 分钟前
解决yum命令报错“Could not resolve host: mirrorlist.centos.org
linux·运维·centos
上海文顺负载箱16 分钟前
如何评估焊机测试负载均衡性能
运维·负载均衡
铁锤妹妹头发多1 小时前
新手用docker真**难受
运维·docker·容器
2739920291 小时前
Ubuntu20.04 安装build-essential问题
linux
超栈1 小时前
HCIP(11)-期中综合实验(BGP、Peer、OSPF、VLAN、IP、Route-Policy)
运维·网络·网络协议·计算机网络·web安全·网络安全·信息与通信
Cachel wood1 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
编程一生1 小时前
回调数据丢了?
运维·服务器·前端
华为云PaaS服务小智2 小时前
华为大咖说 | 浅谈智能运维技术
运维·华为·华为云
zhd15306915625ff4 小时前
化工厂主要涉及的自动化备件有哪些?
运维·自动化·化工厂
Jason-河山4 小时前
利用API返回值实现商品信息自动化更新:技术与实践
运维·自动化