安装ansible

1.ansible是如何工作的

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

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

安装ansible_第1张图片

        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

你可能感兴趣的:(linux,运维,ansible)