23、Ansible 用户管理与服务、启动流程管理全解析

Ansible 用户管理与服务、启动流程管理全解析

1. 用户管理基础操作

在进行 Ansible 相关操作时,首先要确保一些基本操作的顺利执行。例如,运行 ansible-playbook exercise134.yaml 时应不会遇到错误。之后,为验证一切正常,可在控制主机上按以下步骤操作:
1. 输入 sudo su - ahmed 切换到用户 ahmed
2. 以用户 ahmed 身份进入 shell 后,输入 ssh ansible2 ,此时 Ansible 应允许用户无需输入密码即可登录。

2. 用户管理技能总结

通过一系列操作,我们掌握了用户管理的多种技能,包括:
- 创建用户和组账户。
- 管理 SSH 授权密钥。
- 处理加密密码。
- 管理相关的 sudo 配置。

3. 考试准备建议

为了更好地备考,有以下几种选择:
- 完成此处的练习。
- 参考相关的最终准备内容。
- 利用配套网站上的考试模拟问题。

4. 关键知识点复习

复习本章的关键知识点,可参考以下表格:
| 关键主题 | 页码 |
| — | — |
| 待补充 | 待补充 |

5. 记忆表格练习

可打印配套网站上的“记忆表格”(附录 D),至少完成本章部分的表格和列表填空,然后用附录 E 中的答案进行核对。

6. 关键术语定义

需要定义以下关键术语,并在词汇表中核对答案:
- authorized_keys
- hash
- hashing algorithm
- PAM
- plug - in
- public key fingerprint
- random salt

7. 复习问题思考

以下是一些复习问题,帮助巩固知识:
1. 哪个模块可用于修改 sudo 配置?
2. 哪个模块可用于扩展标准 Linux 认证程序?
3. 哪个模块可用于管理 SSH 已知主机?
4. 在用户模块中,用哪个参数指定主组 membership?
5. 在用户模块中,用哪个参数管理次要组 membership?
6. 与 authorized_keys 模块常用的用于查找特定文件名的插件名称是什么?
7. 使用 ansible 用户模块创建用户并同时创建 SSH 密钥对时,为确保公钥文件中包含用户名,必须使用哪个额外参数?
8. authorized_keys 模块的主要限制是什么?
9. 有哪两种方法可生成加密密码哈希?
10. 使用 passwd –stdin 方法生成加密密码时,必须使用哪个 Ansible 模块?

8. 实验练习 - 创建用户

在本章的实验中,需要编写一个 playbook 来创建用户,具体要求如下:
- 创建用户 kim christina kelly bill
- 用户 kim kelly 必须是 profs 组的成员;用户 christina bill students 组的成员。
- 创建用户时,将加密密码设置为 “password”。
- 确保 profs 组的成员具有 sudo 权限。

以下是可能的 playbook 示例:

---
- name: Create users
  hosts: all
  tasks:
    - name: Create users
      user:
        name: "{{ item.name }}"
        password: "{{ 'password' | password_hash('sha512') }}"
        groups: "{{ item.groups }}"
        append: yes
      loop:
        - { name: 'kim', groups: 'profs' }
        - { name: 'christina', groups: 'students' }
        - { name: 'kelly', groups: 'profs' }
        - { name: 'bill', groups: 'students' }
    - name: Add sudo privileges to profs group
      lineinfile:
        path: /etc/sudoers
        line: '%profs ALL=(ALL) ALL'
        validate: 'visudo -cf %s'
9. 服务管理概述

服务管理是 Ansible 的重要应用场景,可通过多种方式进行管理,包括:
- 管理 systemd 服务。
- 使用 Linux cron 和 at 管理任务。
- 管理托管系统应启动的所需 systemd 目标。
- 重启运行中的机器。

以下是相关模块的概述表格:
| 模块 | 功能 |
| — | — |
| service | 可管理服务,适用于多种 init 系统(System - V init、Upstart、systemd) |
| systemd | 处理 systemd 特定功能,如 daemon_reload 和 mask |
| cron | 管理 cron 作业 |
| at | 管理一次性任务 |

10. systemd 服务管理
  • 通用服务管理 service 模块可用于管理各种 init 系统下的服务,很多服务相关任务都可使用该模块。
  • systemd 特定管理 :当需要处理 systemd 特定功能时,需使用 systemd 模块。例如, daemon_reload 功能可强制 systemd 守护进程重新读取其配置文件, mask 功能可标记 systemd 服务,使其无法启动。以下是使用 systemd 模块管理服务的示例:
---
- name: using systemd module to manage services
  hosts: ansible2
  tasks:
  - name: enable service httpd and ensure it is not masked
    systemd:
      name: httpd
      enabled: yes
      masked: no
      daemon_reload: yes
11. cron 作业管理

cron 模块可用于管理 cron 作业,它可以通过以下几种方式管理作业:
- 直接将作业写入用户的 crontab。
- 将作业写入 /etc/crontab /etc/cron.d 目录下。
- 将作业传递给 anacron,使其按小时、天、周、月或年运行,而无需具体指定时间。

以下是一个运行 fstrim 命令的 cron 作业示例:

---
- name: run a cron job
  hosts: ansible2
  tasks:
  - name: run a periodic job
    cron:
      name: "run fstrim"
      minute: "5"
      hour: "4,19"
      job: "fstrim"

若要删除 cron 作业,可使用以下示例:

---
- name: run a cron job
  hosts: ansible2
  tasks:
  - name: run a periodic job
    cron:
      name: "run fstrim"
      state: absent
12. at 作业管理

at 模块用于管理一次性任务。使用时,需理解通过 count units 定义任务从现在起多久后执行。例如,若要在 5 分钟后运行任务,可按以下示例操作:

---
- name: run an at task
  hosts: ansible2
  tasks:
    - name: run command and write output to file
      at:
        command: "date > /tmp/my-at-file"
        count: 5
        units: minutes
        unique: yes
        state: present
13. cron 作业管理练习

以下是一个 cron 作业管理的练习流程:
1. 创建 exercise141 - 1.yaml 并添加以下内容:

---
- name: run a cron job
  hosts: ansible2
  tasks:
  - name: run a periodic job
    cron:
      name: "run logger"
      minute: "0"
      hour: "5"
      job: "logger IT IS 5 AM"
  1. 运行 ansible-playbook exercise141 - 1.yaml
  2. 使用 ansible ansible2 -a “crontab -l” 验证 cron 作业是否添加成功。
  3. 创建 exercise141 - 2.yaml 运行新的 cron 作业,但使用相同的名称:
---
- name: run a cron job
  hosts: ansible2
  tasks:
  - name: run a periodic job
    cron:
      name: "run logger"
      minute: "0"
      hour: "6"
      job: "logger IT IS 6 AM"
  1. 运行 ansible-playbook exercise141 - 2.yaml ,注意作业状态会改变。
  2. 再次使用 ansible ansible2 -a “crontab -l” 验证新作业是否覆盖了旧作业。
  3. 编写 exercise141 - 3.yaml 删除刚创建的 cron 作业:
---
- name: run a cron job
  hosts: ansible2
  tasks:
  - name: run logger
    cron:
      name: "run logger"
      state: absent
  1. 运行 ansible-playbook exercise141 - 3.yaml ,然后使用 ansible ansible2 -a “crontab -l” 验证作业是否已删除。
14. 启动流程管理概述

Ansible 在启动流程管理方面没有特定模块,需使用通用模块,如 file 模块管理 systemd 启动目标, lineinfile 模块管理 GRUB 配置。不过,Ansible 提供了 reboot 模块,可重启主机并在重启后继续执行任务。

15. systemd 目标管理

管理主机应启动的默认目标是常见任务,但 systemd 模块没有管理此设置的选项,需使用通用模块。若要管理默认 systemd 目标, /etc/systemd/system/default.target 文件必须是指向所需默认目标的符号链接。以下是管理默认启动目标的示例:

---
- name: set default boot target
  hosts: ansible2
  tasks:
    - name: set boot target to graphical
      file:
        src: /usr/lib/systemd/system/graphical.target
        dest: /etc/systemd/system/default.target
        state: link
16. 托管主机重启管理

当需要在运行 playbook 时重启托管主机,可使用 reboot 模块。该模块使用多个参数重启托管节点,为验证主机重启后是否可用,需指定 test_command 参数。同时,还有四个与超时相关的参数:
- connect_timeout :成功连接前的最大等待秒数。
- post_reboot_delay :重启命令发出后等待验证主机可用的秒数。
- pre_reboot_delay :实际发出重启命令前的等待秒数。
- reboot_timeout :等待重启机器响应测试命令的最大秒数。

以下是重启托管主机的示例:

---
- name: reboot all hosts
  hosts: all
  gather_facts: no
  tasks:
  - name: reboot hosts
    reboot:
      msg: reboot initiated by Ansible
      test_command: whoami
  - name: print message to show host is back
    debug:
      msg: successfully rebooted
17. 启动状态管理练习

以下是启动状态管理的练习步骤:
1. 准备工作:使用 ansible ansible2 -m file -a “state=link src=/usr/lib/systemd/system/graphical.target dest=/etc/systemd/system/default.target” 更改托管主机的默认启动目标。
2. 创建 exercise142.yaml 并编写以下 playbook 头:

---
- name: set default boot target and reboot
  hosts: ansible2
  tasks:
  1. 设置默认启动目标为 multi - user.target
- name: set default boot target
  file:
    src: /usr/lib/systemd/system/multi - user.target
    dest: /etc/systemd/system/default.target
    state: link
  1. 完成 playbook 以重启托管主机:
- name: reboot hosts
  reboot:
    msg: reboot initiated by Ansible
    test_command: whoami
- name: print message to show host is back
  debug:
    msg: successfully rebooted
  1. 运行 ansible-playbook exercise142.yaml
  2. 使用 ansible ansible2 -a “systemctl get - default” 测试重启是否成功。
18. 启动流程和服务高级练习

本次高级练习相对简单,将引导创建一个 playbook,在重启前运行命令,在下次重启时安排 cron 作业,并确保重启后使用特定命令。以下是具体步骤:
1. 创建 exercise143.yaml 并编写 playbook 头:

---
- name: exercise143
  hosts: ansible2
  tasks:
  1. 编写第一个任务,使用 lineinfile 模块在 /tmp/rebooted 文件末尾添加一行:
- name: add a line to file before rebooting
  lineinfile:
    create: true
    state: present
    path: /tmp/rebooted
    insertafter: EOF
    line: rebooted at {{ ansible_facts['date_time']['time'] }}:{{ ansible_facts['date_time']['second'] }}
  1. 添加一个在重启时运行的 cron 作业:
- name: add cron job at reboot
  cron:
    name: "add message after reboot"
    special_time: reboot
    job: "echo $(date) >> /tmp/rebooted"

通过以上内容,我们全面了解了 Ansible 在用户管理、服务管理以及启动流程管理方面的操作和应用,希望这些内容能帮助你更好地掌握 Ansible 的相关技能。

Ansible 用户管理与服务、启动流程管理全解析

19. 服务管理模块对比

为了更清晰地了解不同服务管理模块的特点,我们对 service 模块和 systemd 模块进行详细对比,如下表所示:
| 功能 | service 模块 | systemd 模块 |
| — | — | — |
| 适用 init 系统 | System - V init、Upstart、systemd | 仅针对 systemd |
| 服务启用/禁用 | 支持 | 支持 |
| 服务启动/停止 | 支持 | 支持 |
| daemon_reload 功能 | 不支持 | 支持 |
| mask 功能 | 不支持 | 支持 |

从表格中可以看出, service 模块通用性强,适用于多种 init 系统;而 systemd 模块则专注于 systemd 特定功能。

20. 作业管理模块总结

对于作业管理, cron 模块和 at 模块各有其适用场景,我们可以通过以下 mermaid 流程图来直观展示:

graph LR
    A[需要管理作业] --> B{作业类型}
    B -->|周期性作业| C[cron 模块]
    B -->|一次性作业| D[at 模块]
    C --> E[写入用户 crontab]
    C --> F[写入 /etc/crontab 或 /etc/cron.d]
    C --> G[传递给 anacron]
    D --> H[通过 count 和 units 定义执行时间]

从流程图可以清晰地看到,根据作业是周期性还是一次性的,我们可以选择合适的模块进行管理。

21. 启动流程管理模块依赖

在启动流程管理中,不同模块之间存在一定的依赖关系,我们可以通过以下表格来梳理:
| 管理任务 | 依赖模块 |
| — | — |
| 管理 systemd 启动目标 | file 模块 |
| 管理 GRUB 配置 | lineinfile 模块 |
| 重启主机并继续任务 | reboot 模块 |

这表明在启动流程管理中,我们需要根据不同的任务选择合适的通用模块。

22. 综合案例分析

假设我们需要完成一个综合任务:创建用户、管理服务、设置启动目标并重启主机。以下是一个完整的 playbook 示例:

---
- name: Comprehensive task
  hosts: ansible2
  tasks:
    - name: Create users
      user:
        name: "{{ item.name }}"
        password: "{{ 'password' | password_hash('sha512') }}"
        groups: "{{ item.groups }}"
        append: yes
      loop:
        - { name: 'kim', groups: 'profs' }
        - { name: 'christina', groups: 'students' }
        - { name: 'kelly', groups: 'profs' }
        - { name: 'bill', groups: 'students' }
    - name: Add sudo privileges to profs group
      lineinfile:
        path: /etc/sudoers
        line: '%profs ALL=(ALL) ALL'
        validate: 'visudo -cf %s'
    - name: Enable service httpd and ensure it is not masked
      systemd:
        name: httpd
        enabled: yes
        masked: no
        daemon_reload: yes
    - name: Set default boot target to multi - user.target
      file:
        src: /usr/lib/systemd/system/multi - user.target
        dest: /etc/systemd/system/default.target
        state: link
    - name: Reboot hosts
      reboot:
        msg: reboot initiated by Ansible
        test_command: whoami
    - name: Print message to show host is back
      debug:
        msg: successfully rebooted

这个 playbook 涵盖了用户创建、sudo 权限设置、服务管理、启动目标设置和主机重启等多个任务,展示了 Ansible 的强大功能。

23. 常见问题及解决方法

在使用 Ansible 进行用户管理、服务管理和启动流程管理过程中,可能会遇到一些常见问题,以下是一些问题及解决方法:
1. 问题 :运行 ansible-playbook 时出现错误。
- 解决方法 :检查 playbook 文件的语法是否正确,可使用 ansible-playbook --syntax-check 进行语法检查。
2. 问题 :使用 systemd 模块的 daemon_reload 功能后服务未重新加载配置。
- 解决方法 :确保服务文件目录的权限和配置正确,可手动使用 systemctl daemon-reload 进行验证。
3. 问题 :使用 cron 模块添加的作业未按预期执行。
- 解决方法 :检查作业的时间设置是否正确,以及作业命令是否可正常执行。

24. 最佳实践建议

为了更高效地使用 Ansible 进行管理,以下是一些最佳实践建议:
- 模块化设计 :将不同功能的任务封装成独立的模块,提高 playbook 的可维护性和复用性。
- 错误处理 :在 playbook 中添加错误处理机制,如使用 ignore_errors failed_when 等参数,确保任务在出现错误时能有合适的处理方式。
- 日志记录 :在关键任务中添加日志记录,方便后续排查问题和监控任务执行情况。

25. 未来拓展方向

随着技术的不断发展,Ansible 在用户管理、服务管理和启动流程管理方面还有很多可以拓展的方向:
- 自动化部署 :结合容器技术,实现应用的自动化部署和管理。
- 与云平台集成 :与各大云平台集成,实现云资源的自动化管理。
- 智能监控 :结合监控工具,实现对系统状态的实时监控和自动调整。

通过以上内容,我们对 Ansible 在用户管理、服务管理和启动流程管理方面有了更深入的理解和掌握。希望这些知识能帮助你在实际工作中更好地运用 Ansible 进行系统管理。

先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值