RHCE考试笔记

注意:要运行playbook前,要登录镜像仓库!!

ansible-config init --disabled | less 是一个用于查看 Ansible 配置文件(ansible.cfg)所有可用选项的命令,各部分作用如下:

命令解析

  • ansible-config init:生成 Ansible 配置文件的模板(ansible.cfg

  • --disabled:所有配置项默认以注释(#)形式呈现(不启用),仅作为参考

  • | less:将输出通过管道传递给 less 分页器,方便逐页查看(按 Space 翻页,q 退出)

输出内容

执行后会显示 ansible.cfg 中所有可用的配置选项,包括:

  • [defaults]:核心默认配置(如 inventory 文件路径、远程用户、超时时间等)

  • [privilege_escalation]:权限提升配置(如 become 相关设置)

  • [ssh_connection]:SSH 连接配置(如控制持久化、超时设置等)

  • [selinux]:SELinux 相关配置

  • 其他模块特定的配置段

每个配置项都包含注释说明,例如:

# [defaults]
# inventory      = /etc/ansible/hosts  # 定义inventory文件路径
# remote_user    = root                # 默认远程登录用户
# timeout        = 10                  # 连接超时时间(秒)
# ...

1、ansible的安装与配置

1. 建立anisble工作目录

[devops@workstation ~]$ mkdir -p /home/devops/ansible/

[devops@workstation ~]$ mkdir -p /home/devops/ansible/mycollection

[devops@workstation ~]$ mkdir -p /home/devops/ansible/roles

2. 设置vim工作模式(可选)

[devops@workstation ansible]$ vim ~/.vimrc

autocmd FileType yaml setlocal ai ts=2 sw=2 et

###############################

setlocal ##设定当前文件

ai ##自动退格对齐 auto indent

ts ##tab建长度为2空格 tabstop=2

sw ##缩进长度为2 shiftwidth=2

et ##tab键变成空格 expandtab

###############################

3. 安装ansible所需软件

[devops@workstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y

4. 登录容器镜像仓库

[devops@workstation ansible]$ podman login utility.lab.example.com

5. 设置ansible-navigator运行环境

[devops@workstation ~]$ cd /home/devops/ansible
[devops@workstation ansible]$ vim ansible-navigator.yml

---
ansible-navigator:
        ansible:
                config:
                        path: ./ansible.cfg
        color:
                osc4: false
        execution-environment:
                image: utility.lab.example.com/ee-supported-rhel8:latest

上面的模板可以在root用户中使用cat ansible-navigator.yml命令获取模板。

6. 查看ansible是否可以运行正常

[devops@workstation ansible]$ ansible-navigator images

7. 配置ansible,编写ansible配置文件

#查看ansible配置模板

[devops@workstation ansible]$ ansible-config init --disabled | less

#根据模板内容生成配置文件

[devops@workstation ansible]$ vim ansible.cfg

[defaults]         #ansible基本信息
remote_user=devops
inventory=/home/devops/ansible/inventory
collections_path=/home/devops/ansible/mycollections
#roles_path=roles:/home/devops/ansible/roles

[privilege_escalation]         #ansible提权信息
become=yes
become_ask_pass=False
become_method=sudo
become_user=root

#编写工作清单

[devops@workstation ansible]$ vim inventory
[dev]
servera

[test]
serverb

[balancers]
serverb

[prod]
serverc
serverd

[webservers:children]
prod

补充:如果使用 ansible all -m shell -a "whoami"命令的时候需要输入密码,说明ssh登录有点问题,需要使用这条命令scp  root@172.25.250.250:/root/.ssh/id_rsa  ~/.ssh/id_rsa,将远程主机的 id_rsa 私钥复制到本地后,本地主机可以直接通过该私钥登录远程主机(无需输入密码),避免问题出现。

#查看清单信息

[devops@workstation ansible]$ ansible-navigator inventory -m stdout --graph
。。。 省略 。。。
@all:
  |--@balancers:
  |  |--serverb
  |--@dev:
  |  |--servera
  |--@test:
  |  |--serverb
  |--@ungrouped:
  |--@webservers:
  |  |--@prod:
  |  |  |--serverc
  |  |  |--serverd

 实操图片:

首先登录到workstation主机

然后创建相应的题目中需要创建的目录

搜索软件包

安装需要的软件包

设置ansible-navigator的运行环境

登录容器镜像仓库

查看与 Ansible 执行环境相关的容器镜像,查看ansible是否可以运行正常

编写主机清单文件

下图是/home/devops/ansible/ansible.cfg的配置

跟上面的补充说明的情况一样,所以执行这条命令,这条命令复制出来可能会让命令中的空格被编码为不可见字符(\302\240),导致命令出现错误,所以这条命令要手动打字。

此 scp 命令用于将远程主机 172.25.250.250 上 root 用户的 SSH 私钥(/root/.ssh/id_rsa)复制到本地当前用户的 .ssh 目录下,并重命名为 id_rsa

主机清单inventory和配置文件ansible.cfg都配置完成后进行测试,发现配置生效即可。

查看清单信息

2、创建 yum 仓库

ansible中的模板相当于shell中的命令,ansible中的playbook相当于shell中的脚本。

作为系统管理员,需在受管节点上安装软件。

• 创建 playbook /home/devops/ansible/yum_repo.yml,该 playbook 将在各个受管节点上

• 创建以下 yum 仓库:

– 仓库 1:

• 仓库的名称为 RH294_BASE

• 描述为 RH294 base software

• BaseURL 为:

    http://content.example.com/rhel9.0/x86_64/dvd/BaseOS

• GPG 签名检查为启用状态

• GPG 密钥 URL 为:

    http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release

• 仓库为启用状态


– 仓库 2:

• 仓库的名称为 RH294_STREAM

• 描述为 RH294 stream software

• BaseURL 为:

    http://content.example.com/rhel9.0/x86_64/dvd/AppStream

• GPG 签名检查为启用状态

• GPG 密钥 URL 为:

    http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPGKEY-redhat-release

• 仓库为启用状态

2.1 编写yml文件

2.2 运行yml脚本

3.3 测试软件仓库能否使用

[devops@workstation ansible]$ ansible all -m shell -a 'cat  /etc/yum.repos.d/rhel.repo'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf clean all'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf makecache'
[devops@workstation ansible]$ ansible all -m shell -a 'yum repolist'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf install httpd -y'

3、安装 Collections

以 devops 身份,将以下 collections 从资源连接目录中安装到workstation.lab.example.com  

• redhat-rhel_system_roles-1.16.2.tar.gz 

• ansible-posix-1.4.0.tar.gz 

• community-general-4.3.0.tar.gz 

• 资源连接:

    http://materials.example.com/tools

集合应安装到默认集合目录 /home/devops/ansible/mycollection

3.1 下载资源

3.2 安装collections

3.3 查看collections

4.安装软件包

1.编写packages.yml

通过命令查看示例,来帮助我们改写yml文件

2. 运行packages.yml这个playbook

3. 测试

5.使用角色

检查:

6.使用 Ansible Galaxy 安装角色

通过 ansible-galaxy 从 requirements.yml 文件安装指定的 Ansible 角色,以下是详细说明:

1. requirements.yml 文件解析

该文件用于定义需要安装的 Ansible 角色信息,你的配置中包含两个角色:

- src: http://materials.example.com/tools/haproxy.tar  # 角色的来源(远程tar包)
  name: balancer  # 为该角色指定本地名称(安装后会以balancer命名)

- src: http://materials.example.com/tools/phpinfo.tar  # 第二个角色的来源
  name: phpinfo  # 第二个角色的本地名称
  • src:指定角色的获取路径(这里是远程服务器上的 tar 包,也可以是 Git 仓库地址、本地路径等)。

  • name:自定义角色的本地名称,方便在 Playbook 中引用(如 roles: - balancer)。

2. 安装命令解析

ansible-galaxy install -r roles/requirements.yml -p roles/

ansible-galaxy install -r roles/requirements.yaml -p ./roles 是用于从指定的 requirements 文件安装 Ansible 角色的命令,各参数含义和作用如下:

命令解析

  • ansible-galaxy install:Ansible 的角色安装工具,用于从 Ansible Galaxy 仓库或其他源下载角色。

  • -r roles/requirements.yaml-r 表示指定一个 ** requirements 文件 **(此处为 roles/requirements.yaml),该文件中定义了需要安装的角色列表(名称、版本、来源等)。

  • -p ./roles-p 指定角色的安装路径(此处为当前目录下的 roles 文件夹),默认路径是 /etc/ansible/roles,使用 -p 可自定义到项目本地,方便项目隔离管理。

3. 执行结果与后续使用

  • 执行成功后,两个角色会被解压并安装到 roles/balancer/ 和 roles/phpinfo/ 目录。

  • 在 Playbook 中可以直接引用这些角色:

    - hosts: webservers
      roles:
        - balancer  # 引用安装的balancer角色
        - phpinfo   # 引用安装的phpinfo角色

    检查:

    7.创建和使用角色

    上图和下图都是用于创建apache角色的命令,只是一个指定了路径来进行安装,而另一个是进入要安装的路径目录后才在当前目录执行安装命令。

    ansible-galaxy init apache --init-path roles/ 命令用于在指定目录下初始化一个名为 apache 的 Ansible 角色(Role),各部分含义如下:

    命令解析

    • ansible-galaxy init:Ansible 用于创建新角色骨架的命令。
    • apache:指定要创建的角色名称(该名称将作为角色的目录名)。
    • --init-path roles/:指定角色的创建路径为当前目录下的 roles/ 文件夹(若该目录不存在,会自动创建)。

    执行后生成的角色结构

    执行命令后,会在 roles/apache/ 目录下生成标准的 Ansible 角色目录结构,包含以下文件和文件夹:

    roles/apache/
    ├── defaults/           # 角色的默认变量(优先级最低)
    │   └── main.yml
    ├── files/              # 存放需要复制到目标主机的静态文件(如配置模板源文件)
    ├── handlers/           # 定义 handlers(通常用于任务触发的操作,如重启服务)
    │   └── main.yml
    ├── meta/               # 角色的元数据(如作者、依赖关系等)
    │   └── main.yml
    ├── README.md           # 角色的说明文档
    ├── tasks/              # 角色的核心任务(主逻辑)
    │   └── main.yml
    ├── templates/          # 存放 Jinja2 模板文件(动态配置文件)
    ├── tests/              # 角色的测试相关文件
    │   ├── inventory
    │   └── test.yml
    └── vars/               # 角色的变量(优先级较高,通常不建议修改)
        └── main.yml
    

    各目录用途

    • tasks/main.yml:最核心的文件,定义角色要执行的任务(如安装 Apache、配置服务等)。
    • templates/:存放带变量的配置模板(如 httpd.conf.j2),部署时会渲染为实际配置文件。
    • handlers/main.yml:定义任务执行后需要触发的操作(如 restart apache)。
    • defaults/main.yml:定义角色的默认变量(可被外部变量覆盖)。

    编写的 index.html.j2 模板要在新建的 apache 角色下的 templates 目录里。

    在 tasks 目录里面编写这个角色安装httpd软件等等操作的 main.yml 文件

    然后再ansible目录中编写newrole.yml文件,使用apache这个角色

    运行newrole.yml

    测试:能看到以下信息就说明成功了

    8.从 Ansible Galaxy 使用角色

    balancers组多一个配置 Firewalld 防火墙以允许 HTTP 服务通过的任务,因为上一题中phpinfo已经配置过火墙了,所以这里就不在配置任务,不然会报错。

    phpinfo的执行要在balancer之前,不然也有可能会报错。

    测试:可以看到实现了web的负载均衡,而且也能访问hello.php文件。

    9.创建和使用分区

    可以看到创建1500MiB的分区建立不了,所以建立了800MiB的分区

    测试:如下图则成功。

    10.生成主机文件

    测试:发现dev组里面的主机servera生成了/etc/myhosts文件,且内容如下则说明成功。

    11. 修改文件内容

    创建名为 issue.yml 的 playbook,要求如下: 

    – 此 playbook 运行到所有受控节点

    • 此 playbook 覆盖/etc/issue 文件中的内容:

    • 在 dev 主机组的主机中,内容是:Development 在 test 主机组的主机中,内容是:Test 

    • 在 prod 主机组的主机中,内容是:Production

    这里编写yml文件使用的是copy模块,查找一下copy模块的示例

    找到下图的示例,content表示直接指定要写入文件的内容(字符串形式);dest表示目标文件的路径(/etc/mine.conf),若文件不存在,会自动创建;若已存在,会覆盖原有内容。

    12.创建 Web 内容目录

    按照下方所述,创建名为 webcontent.yml 的 playbook:

    – 该 playbook 在 dev 主机组中的受管节点上运行

    – 创建目录 /webdev 所有者为 webdev 组

    – 具有常规权限:owner=read+write+execute,

        group=read+write+execute,other=read+execute 

    – 具有特殊权限:set group ID 

    – 用软链接将 /var/www/html/webdev 链接到 /webdev 

    – 创建文件 /webdev/index.html,内容为:Red Hat Ansible 

    – 在 dev 主机组中主机上浏览此目录(例如

        http://servera.lab.example.com/webdev/index.html )将生成以下输出:

        Red Hat Ansible

    测试:

    以下是本次用到的模块:

    [devops@workstation ansible]$ ansible-doc user
    [devops@workstation ansible]$ ansible-doc dnf
    [devops@workstation ansible]$ ansible-doc service
    [devops@workstation ansible]$ ansible-doc file
    [devops@workstation ansible]$ ansible-doc copy
    [devops@workstation ansible]$ ansible-doc firewalld

    13.生成硬件报告

    lineinfile 模块用于在文件中确保特定行存在、替换行、删除行或插入行,适用于修改配置文件(如 /etc/hosts/etc/sysconfig/network 等),避免直接覆盖整个文件。

    测试:

    14.创建 password vault

    检查:

    15.创建用户帐户

    16.更新 Ansible 库的密钥

    检查:输入修改后的密钥看密钥是否更新成功

    17.配置 cron 作业

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值