ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

    • Linux基础

    • Linux服务

    • Windows Server笔记

    • Shell笔记

    • Ansible笔记

      • Ansible介绍与部署
        • Ansible批量管理服务介绍
          • 简介
          • 功能
          • 特点
        • Ansible服务部署
          • 1. 关闭SeLinux
          • 2. 安装部署软件
          • 3. 编写主机清单文件
          • 4. 测试是否可以管理多个主机
          • 5. SSH公钥分发
        • Ansible服务架构
        • Ansible配置目录
        • Ansible命令说明
        • Ansible主机清单配置
          • 1. 主机分组配置
          • 2. 符号匹配配置
          • 3. 主机名解析配置
          • 4. 指定主机SSH连接端口配置
          • 5. 添加主机变量配置
          • 6. 主机IP命名配置
          • 7. 嵌入式配置
      • Ansible常用模块
      • Ansible剧本编写
  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 操作系统
  • Ansible笔记
Hoshinozora
2023-03-14
目录

Ansible介绍与部署

# Ansible批量管理服务介绍

# 简介

是基于Python语言开发的自动化软件工具,是基于SSH服务实现远程主机批量管理。运用得当可以很好的提高运维人员的工作效率、准确度等,减少对主机维护成本与一些重复性的工作。

# 功能

  • 可以实现批量系统操作配置。
  • 可以实现批量软件服务部署。
  • 可以实现批量文件数据分发。
  • 可以实现批量主机信息收集。

# 特点

  • 管理端不需要启动服务程序。
  • 管理端不必要编写配置文件。
  • 受控端不需要安装软件程序。
  • 受控端不需要启动服务程序。
  • 服务程序管理操作模块众多。
  • 利用剧本编写来实现自动化。

# Ansible服务部署

# 1. 关闭SeLinux

  • 如果不想关闭selinux,可以安装libselinux-python软件。

# 2. 安装部署软件

  • yum install -y ansible

注意:yum安装ansible需要epel源。

# 3. 编写主机清单文件

  • /etc/ansible/hosts,主机清单文件用于定义被管理主机的信息。
  • 添加被管理的主机IP地址到其中,可以使用内网地址也可以使用外网地址。另外需要提取分发公钥给被控制端。

# 4. 测试是否可以管理多个主机

  • ansible [主机] -a "[命令]"
    • 主机IP处填all则表示管理所有主机。
    • -a 执行命令动作,不指定模块默认是command模块。

# 5. SSH公钥分发

  • 由于ansible是基于SSH服务进行远程管理的,所以需要分发SSH公钥(推荐),或在主机清单中配置账号密码登录。
  1. # 生成密钥对
    • 执行 ssh-keygen -t [指定加密方式] 命令,生成ssh密钥对。

    • SSH1只支持RSA加密方式,SSH2支持所以加密方式,加密方式一般使用rsa即可。

    • 执行后会提示输入密钥保存位置和密钥密码,回车默认即可。

  2. # 分发公钥
    1. 执行 ssh-copy-id -i [公钥路径.pub] [远程主机用户名]@[远程主机IP] 命令,分发公钥给被控制端
    2. 如 ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.6
    3. 密钥路径在~/.ssh/目录下
  3. # 编写批量分发脚本
    1. 使用vim编写一个远程主机IP的文本(用作for循环的迭代对象),将远程主机IP一行一行写入。

      • 如 vim ~/hostip.txt

        10.0.0.6
        10.0.0.7
        ...
        
        1
        2
        3
    2. 执行 yum install -y sshpass 命令,安装sshpass软件 (用于标准输入密码)

    3. 编写脚本文件

      • vim ~/distr_pubkey.sh

        #!/bin/bash
        # this is script for distribute the public key.
        
         # 远程主机的密码
         REMOTE_PASSWD=123456
         
         for IP in `cat ~/hostip.txt`
         do
          # "StrictHostKeyChecking=no" 使第一次SSH连接不用输yes/no
          sshpass -p $REMOTE_PASSWD ssh-copy-id -i ~/.ssh/id_rsa.pub root@$IP -o "StrictHostKeyChecking=no"
         done
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
      • 可以自己再写一些提示信息。

# Ansible服务架构

image-20230314085755437

  • Public/Private - 公钥和私钥,不使用密钥则需要主机清单中配置密码登录,但还是建议使用密钥进行认证。
  • Host Inventory - 主机清单,定义需要管理的主机。
  • Playbooks - 剧本,将多个模块的命令整合成一个剧本。
  • Core Modules - 核心模块
  • Custom Modules - 自定义模块
  • Plugins - 插件
  • Connection Plugins - 连接插件,需要关闭SeLinux。

# Ansible配置目录

  • /etc/ansible/hosts - 主机清单文件。
  • /etc/ansible/roles - 角色目录,用来分角色编写剧本。
  • /etc/ansible/ansible.cfg - 配置文件。

# Ansible命令说明

  • ansible [主机] -m [模块名称] -a [动作]
    • [主机] - all/主机名称/主机组名称/主机IP地址
    • -m - 指定应用的模块信息
    • -a - 指定批量执行的操作动作
  • ansible提示颜色说明
    • 绿色信息 - 查看主机信息 / 对主机未做改动。
    • 黄色信息 - 对主机数据信息做了修改。
    • 红色信息 - 命令执行发生错误。
    • 粉色信息 - 警告信息。
    • 蓝色信息 - 显示ansible命令执行的过程。

# Ansible主机清单配置

# 1. 主机分组配置

  • 执行命令或编写剧本时,可直接使用组名来指定一组主机。

    [组名]
    主机IP地址
    主机IP地址
    ... ...
    
    1
    2
    3
    4

# 2. 符号匹配配置

  • 在指定主机地址时,我们还可以通过[n,m]来指定地址是连续的主机。

    # 匹配域名
    web[01:03].com
    # 同等于
    web01.com
    web02.com
    web03.com
    
    # 匹配1-10主机IP
    192.168.0.[1:10]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

# 3. 主机名解析配置

  • 使用主机名配置主机,执行命令时可以更直观的定位到具体的主机。在/etc/hosts中可以配置本地的主机名解析。
  • 例如:web01、web[01:03]。

# 4. 指定主机SSH连接端口配置

  • 在主机后加上端口号即可,格式:[主机]:[端口]。
  • 例如:10.0.0.41:520 、web01:520。

# 5. 添加主机变量配置

  • ansible_ssh_user=[用户名] # 指定登录用户
  • ansible_ssh_pass=[用户密码] # 登录用户密码
  • 例如:10.0.0.41 ansible_user=root ansible_pass=123456

# 6. 主机IP命名配置

  • 实现自定义主机名和主机IP的映射,配置格式:[主机命名] ansible_host=[主机IP]
  • 主机名规范:城市-机房位置-机房编号-主机名。

# 7. 嵌入式配置

  • # 嵌入分组

    • 将多个分组合并为一个大组。

      # 格式
      [父组名:children]
      下级子组名
      ... ...
      
      # 例子
      [web:children]
      web_group_01
      web_group_02
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
  • # 嵌入变量

    • 批量给指定组添加变量,设置的变量会应用到对应组的主机。

      # 格式
      [组名:vars]
      如: ansible_port=......
      其他变量......
      
      [组名]
      主机信息
      ......
      
      # 例子
      [web:vars]
      ansible_port=3443
      
      [web]
      10.0.0.1
      10.0.0.2
      10.0.0.3
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
#Linux#主机编排#Ansible#主机清单
Shell脚本常见应用
Ansible常用模块

← Shell脚本常见应用 Ansible常用模块→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式