第二十八章 ansible的使用

本文详细介绍了如何在RHEL系统中安装和配置Ansible,包括设置epel源、安装Python3.9、解决依赖问题,以及编写ansible.cfg和清单文件,展示了基本的用法和模块应用。

目录

一、理论讲解

本实验的拓扑图

二、安装ansible

三、编写ansible.cfg和清单文件

四、ansible的基本用法


一、理论讲解

  • 如果管理的服务器很多,如几十台甚至几百台,那么就需要一个自动化管理工具了,ansible就是这样的一种自动化管理工具。
  • ansible是通过ssh连接到被管理主机,然后执行相关操作的,如下图。

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

本实验的拓扑图

  • 这里server是 ansible主机,以lduan用户登录。server2和server3是被管理主机,在这两台主机上创建lduan 用户并配置好sudo,使得这两台主机上的lduan用户通过sudo-i可以无密码切换到root,下面开始配置。

二、安装ansible

(1)先使用root用户登录server,在其上配置epel源,命令如下。

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

(2)挂载镜像和配置本地yum源。

操作:略

(3)安装开发工具。

[root@rhel1 ~]# yum -y groupinstall 开发工具
  • RHEL8默认的Python版本为3.6,不符合项目的需求。现在升级到3.9

(4)下载Python3.9.5,有安装包可以用安装包就不用下载了。

[root@rhel1 ~]# wget https://www.python.org/ftp/python/3.9.5/Python‐3.9.5.tgz

(5)解压Python-3.11.7.tgz解压包。

[root@rhel1 ~]# tar zxvf Python-3.11.7.tgz

(6)安装Python。

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

(7)删除原先的Python3和pip3。

[root@rhel1 ~]# rm -rf /usr/bin/python3
[root@rhel1 ~]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3
[root@rhel1 ~]# rm -rf /usr/bin/pip3
[root@rhel1 ~]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

(8)安装ansible。

[root@rhel1 ~]# 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 需要

(9)需要解决依赖包问题。

[root@rhel1 ~]# yum -y install python3-cryptography               本地yum源安装
[root@rhel1 ~]# yum -y install python3-jinja2                     本地yum源安装
[root@rhel1 ~]# rpm -ivh sshpass-1.06-3.el8ae.x86_64.rpm          软件包安装

(10)再次安装ansible。

[root@rhel1 ~]# rpm -ivh ansible-2.9.11-1.el8ae.noarch.rpm

(11)使用命令检查ansible的安装结果。

[root@rhel1 ~]# ansible --version
[root@rhel1 ~]# pip3 --version

(12)确保ansible主机能够解析所有的被管理机器,这里通过配置/etc/hosts 来实现。

[root@rhel1 ~]# vim /etc/hosts                在下面添加IP地址和主机名

192.168.112.70  rhel8  server1
192.168.112.71  rhel8  server2
192.168.112.72  rhel8  server3

(13)在server2和 server3两台机器创建bdqn用户,然后配置好sudo,命令如下。

[root@rhel8 ~]# useradd bdqn                    创建bdqn用户
[root@rhel8 ~]# passwd bdqn                     设置密码
[root@rhel8 ~]# vim /etc/sudoers.d/bdqn         

bdqn ALL=(root) NOPASSWD: ALL

(14)配置免密登录,在server主机上生成密钥。

[bdqn@rhel1 ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ""          生成密钥
[bdqn@rhel1 ~]$ ssh-copy-id bdqn@192.168.112.71            把密钥发给71主机
[bdqn@rhel1 ~]$ ssh-copy-id bdqn@192.168.112.72            把密钥发给71主机
[bdqn@rhel1 ~]$ ssh server2                                登录测试

三、编写ansible.cfg和清单文件

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

(1)下面的操作都是server上的blab用户操作的,先在家目录下创建ansible.cfg。

[bdqn@rhel1 ~]$ vim ansible.cfg                添加一下内容

[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root
  • 这里在[defaults]字段下只添加了一句inventory = ./hosts,表示把当前目录下名称为hosts的文件当作清单文件
  • become=True:登录到被管理主机时要切换到其他用户。
  • become_method=sudo:以 sudo的方式切换。
  • become_user=root:切换到root用户。

(2)所有的被管理机器都要写入清单文件中。了解清单的写法。

[bdqn@rhel1 ~]$ vim hosts
server2
server3
server[10:15]

[db1]
server2
server3

[db2]
server6
server7

[db3:children]
db1
db2
  • server[10:15]:表示server10到server15。
  • 这里定义了两个主机组db1和db2,db1组中包括的主机有server2到server3,db2组中包括的主机有server6和 server7。
  • 这里定义了一个主机组db3,但是后面加了“:children",则这个主机组下面的db1和db2就不再表示主机了,而是表示主机组。

(3)下面查看每个主机组中有多少主机。

[bdqn@rhel1 ~]$ ansible db1 --list-hosts            查看组db1
  hosts (2):
    server2
    server3
[bdqn@rhel1 ~]$ ansible db2 --list-hosts            查看组db2
  hosts (2):
    server6
    server7
[bdqn@rhel1 ~]$ ansible db3 --list-hosts            查看组db3
  hosts (4):
    server2
    server3
    server6
    server7

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

[bdqn@rhel1 ~]$ vim hosts
server2
server3

[db]
server1
server2

四、ansible的基本用法

(1)ansible的基本格式如下。

ansible 主机名 -m 模块x -a "模块的参数"

(2)在server2上执行hostname命令。

[bdqn@rhel1 ~]$ ansible server2 -m shell -a "hostname"
server2 | CHANGED | rc=0 >>
rhel8
  • shell模块用于执行操作系统命令,执行的命令就作为shell模块的参数,这里在-a中写要执行的系统命令。所以,上面的命令就是在server2上执行hostname命令,显示的结果是server2.rhce.cc。
(3)查看所有的模块。
[root@rhel1 ~]# ansible-doc -l
### Ansible 使用教程 Ansible 是一种简单而强大的自动化工具,可以用于配置管理、应用部署任务编排。以下是关于 Ansible使用方法及其核心功能的详细说明。 #### 1. 配置文件设置 Ansible 的配置文件通常位于 `/etc/ansible/ansible.cfg`。可以通过修改该文件来定义主机清单文件的位置以及其他全局设置。例如,以下是一个典型的配置文件内容[^2]: ```ini [defaults] inventory = /etc/ansible/hosts host_key_checking = False ``` - `inventory` 指定了主机清单文件的位置。 - `host_key_checking = False` 禁用了 SSH 主机密钥检查,适用于需要快速测试的环境。 #### 2. 主机清单文件 主机清单文件通常位于 `/etc/ansible/hosts`,用于定义目标主机及其分组。例如,以下是一个示例主机清单文件的内容[^2]: ```ini [web] web1 web2 [db] db[1:2] [other] cache ``` - `[web]` `[db]` 是分组名称,分别包含 `web1`, `web2` `db1`, `db2`。 - `db[1:2]` 表示范围扩展,等同于 `db1` `db2`。 - `[other]` 分组中包含一个主机 `cache`。 #### 3. 基本命令 Ansible 提供了多种命令行工具来执行任务。以下是一些常用命令: - **ping 测试**:验证目标主机是否可以被 Ansible 正常访问。 ```bash ansible all -m ping ``` - **创建用户**:通过 `user` 模块创建用户并设置密码。 ```bash ansible all -i /etc/ansible/hosts -m user -a "name=foo password=${pass}" ``` 其中 `${pass}` 是加密后的密码字符串[^3]。 - **设置密码**:如果需要更改用户的密码,可以结合变量传递的方式实现。 ```bash ansible all -i /etc/ansible/hosts -m user -a "name=Dragon password=${pass} ssh_key_type=ecdsa" ``` #### 4. Playbook 的使用 Playbook 是 Ansible 的核心功能之一,用于定义复杂的任务序列。以下是一个简单的 Playbook 示例[^1]: ```yaml --- - name: Example playbook to manage variables hosts: all tasks: - name: Include vars from var.yml include_vars: var.yml - name: Run playbook with extra-vars command: ansible-playbook var2.yml -e "username=user2 groupname=group2" ``` - `include_vars` 模块用于加载外部变量文件。 - `-e` 参数允许在运行时传递额外的变量。 #### 5. 变量的使用 Ansible 支持多种变量类型,包括主机变量、组变量外部变量。例如,可以通过主机清单文件定义变量: ```ini [web] web1 ansible_user=root web2 ansible_user=admin ``` 或者在 Playbook 中直接定义变量: ```yaml vars: username: foo groupname: bar ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值