Ansible自动化运维介绍与安装

Ansible 的介绍与安装

一、自动化与 Linux 系统管理(为什么要学习自动化运维)

大多数系统管理和基础架构管理任务依赖于通过图形界面或命令行手动执行。系统管理员通常依赖检查清单、文档或记忆中的流程来执行标准任务,这种方式容易出错,例如遗漏步骤或执行错误操作,并且对执行结果的验证通常有限。

自动化可以有效避免手动管理带来的问题。作为系统管理员,我们可以利用自动化工具确保系统快速、准确地完成部署与配置,自动执行日常重复性任务,从而节省时间,专注于更重要的运维工作。

二、什么是 Ansible?

Ansible 是一款基于 Python 开发的自动化运维工具,集成了众多运维工具的优良特性,支持批量系统配置、程序部署和运行命令等功能。

Ansible 是一个开源的自动化平台,它既是一种简洁的自动化语言,能够通过 Ansible Playbook 清晰描述 IT 应用架构,也是一个运行这些剧本的自动化引擎。其功能强大,可用于应用部署、配置管理、工作流自动化及网络自动化,甚至协调整个应用生命周期。

Ansible 采用无代理架构,通常通过 OpenSSH 或 WinRM 连接被管理主机,并通过推送小型模块程序来执行任务,使系统达到预期状态。任务完成后,这些模块会自动删除。

Ansible 基于 paramiko 开发,以模块化方式工作,本身不具备批量部署能力,实际部署功能由其所运行的模块提供。它无需在远程主机安装客户端(代理),直接通过 SSH 进行通信。目前,Ansible 已被红帽(Red Hat)官方收购。

三、Ansible 的优点

  1. 跨平台支持:支持 Linux、Windows、Unix 及网络设备,无代理管理,适用于物理机、虚拟机、云环境和容器。
  2. 人类可读的自动化:Playbook 采用 YAML 格式编写,易于阅读和理解。
  3. 完美描述应用:可通过 Playbook 完成每一次变更,清晰记录应用环境的各个方面。
  4. 易于版本控制:Playbook 和项目文件为纯文本,可纳入现有版本控制系统(如 Git)进行管理。
  5. 支持动态清单:可从外部来源动态更新管理主机列表,实时获取准确清单,不受基础架构或位置的影响。
  6. 强大的编排与集成能力:可与现有系统(如 HP SA、Puppet、Jenkins、红帽卫星等)轻松集成,并且集成到您的ansible工作中。

四、Ansible 的管理方式

Ansible 是一个模型驱动的配置管理工具,支持多节点发布和远程任务执行。默认使用 SSH 进行远程连接,无需在被管节点安装额外软件,并支持多种编程语言扩展。

Ansible 管理系统由控制主机和一组被管节点组成。控制主机通过 SSH 直接管理被管节点,并通过资源清单(inventory)对主机进行分组管理。

五、Ansible 系统架构

控制主机通过 Host Inventory(主机清单)识别和管理网络中的主机。

这就需要一个Host Inventory(主机清单),用于记录ansible可以控制网络中的哪些主机。另外,要配置和管理这些主机,可以采用两种方式,一种是单一的命令实现,另外一种也可以使用palybook实现。单一的命令模式是采用不同的模块进行管理,一个模块类似于一些管理的命令,如top,ls,ping等等,适用于临时性的操作任务。如果需要执行一些例行性或经常性的操作,则需要采用playbook的方式,playbook类似于一个脚本,将多个模块按一定的逻辑关系进行组合,然后执行。ansible还支持一些插件,如邮件、日志等,在和远程主机通信时,也会采用类似的连接插件,这里使用则是SSH协议的插件进行通信。

Ansible 的核心组成包括:

  • Core Modules:自带模块
  • Custom Modules:用户自定义扩展模块
  • Plugins:支持日志、邮件等扩展功能
  • Playbooks:剧本,YAML 格式任务定义文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
  • Connection Plugins:ansible基于连接插件连接到各个主机上,默认使用 SSH 连接主机
  • Host Inventory:记录Ansible管理主机的信息(如 IP、端口、密码等)

六、Ansible 任务执行模式

Ansible 支持两种任务执行模式:

  • ad-hoc 模式(点对点模式) :使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。(快速执行单条命令,适合临时操作)
  • playbook 模式(剧本模式) :是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。(通过组合多个任务完成复杂操作,是 Ansible 的核心管理方式)

七、Ansible 工作流程

八、Ansible 部署步骤

  1. 安装 RHEL 9 虚拟机,配置 IP 信息。

  2. 配置本地 yum 源:

    bash 复制代码
    mount /dev/cdrom /mnt
    vim /etc/yum.repos.d/server.repo

    写入以下内容:

    text 复制代码
    [aa]
    name=aa1
    baseurl=file:///mnt/BaseOS
    enabled=1
    gpgcheck=0
    
    [bb]
    name=bb1
    baseurl=file:///mnt/AppStream
    enabled=1
    gpgcheck=0
  3. 安装虚拟化软件包组:

    shell 复制代码
    yum group install "Virtualization Client" "Virtualization Hypervisor" "Virtualization Tools" -y
  4. 重启并启用 libvirtd 服务:

    shell 复制代码
    systemctl restart libvirtd
    systemctl enable libvirtd
  5. 上传 RHEL 9.2 镜像至虚拟机。

  6. 使用 virt-manager虚拟监视器 安装系统。

  7. 克隆 5 台主机,共 6 台,IP 规划如下:

    text 复制代码
    192.168.122.100 master.example.com
    192.168.122.10 node1.example.com
    192.168.122.20 node2.example.com
    192.168.122.30 node3.example.com
    192.168.122.40 node4.example.com
    192.168.122.50 node5.example.com
  8. 所有主机需删除网卡配置文件中的 UUID。

  9. 所有主机编辑 /etc/hosts,添加如下内容:

    text 复制代码
    192.168.122.1 ansible.example.com ansible
    192.168.122.100 master.example.com master
    192.168.122.10 node1.example.com node1
    192.168.122.20 node2.example.com node2
    192.168.122.30 node3.example.com node3
    192.168.122.40 node4.example.com node4
    192.168.122.50 node5.example.com node5
  10. 配置 master 主机的 SSH 免密登录(root 和 student 用户均需配置)使用su - student进入student用户:

    shell 复制代码
    ssh-keygen
    for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i; done
    for i in node{1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub student@$i; done
  11. 在宿主机(ansible)中配置 HTTP 本地 yum 仓库,安装 httpd,上传包文件至 /var/www/html/,重启 httpd,关闭防火墙和 SELinux。

  12. 在 master 主机中配置 yum 仓库:

    shell 复制代码
    vim /etc/yum.repos.d/server.repo

    写入以下内容:

    text 复制代码
    [aa]
    name=aa1
    baseurl=http://ansible.example.com/rhel9/BaseOS
    enabled=1
    gpgcheck=0
    
    [cc]
    name=cc1
    baseurl=http://ansible.example.com/rhel9/AppStream
    enabled=1
    gpgcheck=0
    
    [dd]
    name=dd1
    baseurl=http://ansible.example.com/ansible-automation-platform
    enabled=1
    gpgcheck=0

    测试安装:yum -y install vim

  13. 为 student 用户配置提权:

    shell 复制代码
    echo "student ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/student
    for i in node{1..5}; do scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/; done
  14. 安装 Ansible(使用 student 用户):

    shell 复制代码
    su - student
    sudo yum -y install ansible-core ansible-navigator
  15. 配置 Ansible:

    • 创建 ansible 目录:mkdir /home/student/ansible

    • 创建主机清单 inventory:

      text 复制代码
      [test01]
      node1
      
      [test02]
      node2
      
      [web]
      node3
      node4
      
      [test05]
      node5
      
      [webtest:children]
      web
    • 创建 roles 和 collections 目录:mkdir roles collections

    • 生成并修改 ansible.cfg:

      shell 复制代码
      ansible-config init --disabled > ansible.cfg
      vim ansible.cfg

      修改为以下内容(注意将 alice 替换为 student):

      text 复制代码
      [defaults]
      inventory = /home/student/ansible/inventory
      remote_user = student
      roles_path = /home/student/ansible/roles
      host_key_checking = False
      collections_path = /home/student/ansible/collections
      
      [privilege_escalation]
      become = True
      become_ask_pass = False
      become_method = sudo
      become_user = root
    • 测试连接:ansible all -m ping成功如图

相关推荐
云动雨颤19 分钟前
Linux下PXE服务器搭建
linux·运维·服务器
wanhengidc42 分钟前
云手机会占用本地手机内存吗?
运维·服务器·网络·安全·智能手机
blasit1 小时前
Ubuntu 20.04.6交叉编译得到Ubuntu 16.04.6的可执行文件
linux·运维·ubuntu
徐sir(徐慧阳)2 小时前
国产存储分布式raid更换故障硬盘
运维·服务器
Jayyih3 小时前
嵌入式系统学习Day23(进程)
linux·运维·服务器
小王努力学编程4 小时前
从零开始的 Docker 之旅
linux·运维·服务器·docker·容器·容器编排·镜像制作
東雪蓮☆5 小时前
深入理解 iptables:Linux 防火墙从入门到精通
linux·运维·网络
努力学习的小廉5 小时前
深入了解linux系统—— 线程互斥
linux·运维·服务器
JioJio~z6 小时前
PLC通讯中遇到的实际场景
运维·服务器·网络