目录

一、YUM 仓库配置任务故障排查

1. 任务核心代码与执行流程

2. 核心故障:GPG 认证错误

故障表现

排查与解决方法

3. 其他常见问题

二、多用户创建任务故障排查

1. 任务核心代码与执行流程

2. 核心故障排查

(1)变量引用错误

(2)用户组创建失败

3. 验证任务结果

三、LVM 存储配置任务故障排查

1. 任务核心代码与执行流程

2. 核心故障排查

(1)磁盘 /dev/vdb 不存在

(2)存储角色依赖缺失

(3)挂载点目录不存在

3. 检查模式验证配置

四、Cron 定时任务配置故障排查

1. 任务核心代码与执行流程

2. 核心故障排查

(1)devops 用户不存在

(2)cron 任务执行权限不足

(3)cron 语法错误

3. 验证 cron 任务

五、网络接口配置任务故障排查

1. 任务核心代码与执行流程

2. 核心故障排查

(1)网卡名称 eth1 不存在

(2)IP 地址冲突

(3)网络角色参数不完整

3. 验证网络配置

六、核心总结

一、YUM 仓库配置任务故障排查

该任务核心是配置自定义 YUM 仓库、安装 GPG 密钥并部署 rhelver 包,最常见故障为 GPG 密钥认证失败,导致仓库配置或包安装失败。

1. 任务核心代码与执行流程

# repo_playbook.yml 核心内容
- name: Repository Configuration
  hosts: webservers

  tasks:
    - name: Ensure Example Repo exists
      ansible.builtin.yum_repository:
        name: example-internal
        description: Example Inc. Internal YUM repo
        file: example
        baseurl: http://materials.example.com/yum/repository/
        gpgcheck: yes

    - name: Ensure Repo RPM Key is Installed
      ansible.builtin.rpm_key:
        key: http://materials.example.com/yum/repository/RPM-GPG-KEY-example
        state: present

    - name: Install rhelver package
      ansible.builtin.dnf:
        name: rhelver
        state: present

执行命令:

ansible-navigator run -m stdout repo_playbook.yml

2. 核心故障:GPG 认证错误

故障表现

执行时提示 GPG key retrieval failedpackage rhelver is not signed,任务失败。

排查与解决方法

(1)验证 GPG 密钥地址可达性通过临时命令测试受管主机能否访问密钥地址:

ansible webservers -m ansible.builtin.uri -a 'url=http://materials.example.com/yum/repository/RPM-GPG-KEY-example return_content=yes'

若返回 404 / 超时,说明密钥地址错误或网络不通,需修正 rpm_key 模块的 key 参数。

(2)检查 GPG 密钥完整性手动下载密钥并验证指纹,确保密钥未被篡改:

# 控制节点下载密钥
curl http://materials.example.com/yum/repository/RPM-GPG-KEY-example -o /tmp/example.key
# 受管主机导入并验证
ansible webservers -m ansible.builtin.copy -a 'src=/tmp/example.key dest=/tmp/example.key'
ansible webservers -m ansible.builtin.command -a 'rpm --import /tmp/example.key && rpm -q gpg-pubkey --qf "%{name}-%{version}-%{release} -> %{summary}\n"'

(3)临时关闭 GPG 检查(测试用)若仅需验证仓库可用性,可临时将 yum_repository 模块的 gpgcheck 设为 no,排除密钥干扰:

- name: Ensure Example Repo exists
  ansible.builtin.yum_repository:
    name: example-internal
    description: Example Inc. Internal YUM repo
    file: example
    baseurl: http://materials.example.com/yum/repository/
    gpgcheck: no  # 临时关闭,测试仓库是否可用

3. 其他常见问题

  • 仓库 baseurl 不可达:用 uri 模块测试 baseurl 是否能访问,确认受管主机网络策略允许访问该地址;
  • dnf 模块依赖缺失:受管主机需安装 dnf 工具,确保 ansible_python_interpreter 指向的 Python 环境能调用 dnf

二、多用户创建任务故障排查

该任务通过变量文件定义用户信息,批量创建用户和用户组,常见故障为变量引用错误、用户组权限问题

1. 任务核心代码与执行流程

# vars/users_vars.yml 变量文件
users:
  - username: ops1
    groups: webadmin
  - username: ops2
    groups: webadmin

# users.yml Playbook
- name: Create multiple local users
  hosts: webservers
  vars_files:
    - vars/users_vars.yml

  tasks:
    - name: Add webadmin group
      ansible.builtin.group:
        name: webadmin
        state: present

    - name: Create user accounts
      ansible.builtin.user:
        name: "{{ item['username'] }}"
        groups: webadmin
      loop: "{{ users }}"

执行命令:

ansible-navigator run -m stdout users.yml

2. 核心故障排查

(1)变量引用错误
  • 故障表现:提示 'users' is undefineditem['username'] 不存在;
  • 排查方法:
    1. 检查 vars_files 路径是否正确(相对路径基于 Playbook 所在目录);
    2. debug 模块验证变量加载:

    - name: 验证 users 变量
      ansible.builtin.debug:
        var: users
        verbosity: 1
    
    1. 确认变量文件语法正确(YAML 缩进为 2 个空格,无语法错误)。
(2)用户组创建失败
  • 故障表现:提示 groupadd: permission denied
  • 解决方法:开启特权升级,确保 Play 有足够权限创建用户组:
    - name: Create multiple local users
      hosts: webservers
      vars_files:
        - vars/users_vars.yml
      become: yes  # 开启 sudo 提权
      become_user: root  # 以 root 执行
    
    tasks:
      - name: Add webadmin group
        ansible.builtin.group:
          name: webadmin
          state: present
    

3. 验证任务结果

执行后用临时命令验证用户和组是否创建成功:

# 检查 webadmin 组是否存在
ansible webservers -m ansible.builtin.command -a 'getent group webadmin'
# 检查 ops1 用户是否在 webadmin 组中
ansible webservers -m ansible.builtin.command -a 'id ops1'

三、LVM 存储配置任务故障排查

该任务通过 rhel_system_roles.storage 角色配置 LVM 存储池和逻辑卷,常见故障为磁盘不存在、角色依赖缺失、权限不足

1. 任务核心代码与执行流程

# group_vars/webservers/storage_vars.yml 存储变量
storage_pools:
  - name: apache-vg
    type: lvm
    disks:
      - /dev/vdb
    volumes:
      - name: content-lv
        size: 64m
        mount_point: "/var/www"
        fs_type: xfs
        state: present
      - name: logs-lv
        size: 128m
        mount_point: "/var/log/httpd"
        fs_type: xfs
        state: present

# storage.yml Playbook
- name: Configure storage on webservers
  hosts: webservers
  roles:
    - name: redhat.rhel_system_roles.storage

执行命令:

# 先安装存储角色
ansible-galaxy collection install ./redhat-rhel_system_roles-1.19.3.tar.gz -p collections
# 执行 Playbook
ansible-navigator run -m stdout storage.yml

2. 核心故障排查

(1)磁盘 /dev/vdb 不存在
  • 故障表现:提示 No such device /dev/vdb
  • 排查方法:
    1. 用临时命令检查受管主机磁盘列表:
      ansible webservers -m ansible.builtin.command -a 'lsblk'
      
    2. 修正 storage_vars.yml 中的 disks 参数,指向实际存在的磁盘(如 /dev/vdc);
    3. 若磁盘未初始化,先执行磁盘格式化(需特权):

      yaml

      - name: 初始化磁盘
        ansible.builtin.command:
          cmd: parted /dev/vdb mklabel gpt
          creates: /dev/vdb1  # 仅当磁盘未分区时执行
        become: yes
      
(2)存储角色依赖缺失
  • 故障表现:提示 role redhat.rhel_system_roles.storage not found
  • 解决方法:
    1. 确认角色安装路径正确(collections 目录需与 Playbook 同层级);
    2. 检查 ansible.cfgcollections_paths 配置,确保包含角色安装路径:
      [defaults]
      collections_paths = ./collections:/usr/share/ansible/collections
      
(3)挂载点目录不存在
  • 故障表现:提示 mount point /var/www does not exist
  • 解决方法:在角色执行前创建挂载点目录:
    - name: 创建挂载点目录
      ansible.builtin.file:
        path: "{{ item.mount_point }}"
        state: directory
        mode: '0755'
      loop: "{{ storage_pools[0].volumes }}"
      become: yes
    

3. 检查模式验证配置

执行前用检查模式测试配置是否合法,避免实际执行时损坏数据:

ansible-navigator run -m stdout storage.yml --check

四、Cron 定时任务配置故障排查

该任务创建周期性磁盘使用率记录的 cron 任务,常见故障为用户不存在、权限不足、cron 语法错误

1. 任务核心代码与执行流程

# create_crontab_file.yml
- name: Recurring cron job
  hosts: webservers

  tasks:
    - name: Crontab file exists
      ansible.builtin.cron:
        name: Add date and time to a file
        minute: "*/2"
        hour: 9-16
        weekday: 1-5
        user: devops
        job: df >> /home/devops/disk_usage
        cron_file: disk_usage
        state: present

执行命令:

ansible-navigator run -m stdout create_crontab_file.yml

2. 核心故障排查

(1)devops 用户不存在
  • 故障表现:提示 user devops does not exist
  • 解决方法:先创建 devops 用户,或修改 user 参数为存在的用户:
    - name: 创建 devops 用户(前置任务)
      ansible.builtin.user:
        name: devops
        state: present
      become: yes
    
    - name: Crontab file exists
      ansible.builtin.cron:
        name: Add date and time to a file
        minute: "*/2"
        hour: 9-16
        weekday: 1-5
        user: devops
        job: df >> /home/devops/disk_usage
        cron_file: disk_usage
        state: present
      become: yes
    
(2)cron 任务执行权限不足
  • 故障表现:cron 任务已创建,但 /home/devops/disk_usage 无内容;
  • 排查方法:
    1. 检查 devops 用户对 /home/devops 目录的写入权限;
    2. 查看 cron 日志(/var/log/cron),确认任务执行错误:
      ansible webservers -m ansible.builtin.command -a 'grep devops /var/log/cron'
      
    3. 修正 job 命令的路径,使用绝对路径执行 df
      job: /bin/df >> /home/devops/disk_usage  # 用绝对路径避免环境变量问题
      
(3)cron 语法错误
  • 故障表现:提示 invalid cron syntax
  • 解决方法:验证 cron 时间参数格式:
    • minute: "*/2":每 2 分钟执行(合法);
    • hour: 9-16:9 点到 16 点(合法);
    • weekday: 1-5:周一到周五(合法,1 = 周一,7 = 周日)。

3. 验证 cron 任务

执行后检查 cron 配置文件和任务状态:

# 查看 devops 用户的 cron 任务
ansible webservers -m ansible.builtin.command -a 'crontab -l -u devops'
# 检查 cron 配置文件是否生成
ansible webservers -m ansible.builtin.stat -a 'path=/etc/cron.d/disk_usage'

五、网络接口配置任务故障排查

该任务通过 rhel_system_roles.network 角色配置网卡 IP,常见故障为网卡名称错误、IP 地址冲突、角色参数错误

1. 任务核心代码与执行流程

# group_vars/webservers/network.yml 网络变量
network_connections:
  - name: eth1
    type: ethernet
    ip:
      address:
        - 172.25.250.40/24

# network_playbook.yml Playbook
- name: NIC Configuration
  hosts: webservers
  roles:
    - redhat.rhel_system_roles.network

执行命令:

ansible-navigator run -m stdout network_playbook.yml

2. 核心故障排查

(1)网卡名称 eth1 不存在
  • 故障表现:提示 Connection eth1 not found
  • 排查方法:
    1. 用临时命令查看受管主机实际网卡名称:
      ansible webservers -m ansible.builtin.command -a 'nmcli device status'
      
    2. 修正 network.yml 中的 name 参数,指向实际网卡(如 ens33enp0s3):
      network_connections:
        - name: ens33  # 替换为实际网卡名称
          type: ethernet
          ip:
            address:
              - 172.25.250.40/24
      
(2)IP 地址冲突
  • 故障表现:任务执行成功,但网卡无法启用;
  • 排查方法:
    1. 测试 IP 地址是否被占用:
      ansible webservers -m ansible.builtin.command -a 'ping -c 1 172.25.250.40'
      
    2. 更换未被占用的 IP 地址(如 172.25.250.41/24)。
(3)网络角色参数不完整
  • 故障表现:IP 配置未生效,提示 missing required parameters
  • 解决方法:补充网络连接的必要参数(如启用连接、设置网关):
    network_connections:
      - name: ens33
        type: ethernet
        state: up  # 启用连接
        ip:
          address:
            - 172.25.250.40/24
          gateway4: 172.25.250.1  # 配置网关(可选)
          dns:
            - 8.8.8.8
            - 8.8.4.4
    

3. 验证网络配置

执行后检查网卡 IP 和连接状态:

# 查看网卡 IP 配置
ansible webservers -m ansible.builtin.command -a 'ip addr show ens33'
# 检查网络连接状态
ansible webservers -m ansible.builtin.command -a 'nmcli connection show ens33'

六、核心总结

  1. 仓库配置:重点排查 GPG 密钥可达性 / 完整性、baseurl 网络连通性,临时关闭 GPG 检查可快速定位问题;
  2. 用户创建:确保变量加载正确、开启特权升级,用 debug 模块验证变量,用 id 命令验证结果;
  3. 存储配置:先确认磁盘存在且未被占用,检查角色安装路径,用检查模式测试配置合法性;
  4. Cron 任务:保证用户存在、命令使用绝对路径,查看 cron 日志定位执行错误;
  5. 网络配置:匹配实际网卡名称,补充必要的网络参数(如 state: up),避免 IP 地址冲突。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐