ansible(一)--基本概念及配置

ansible–基本概念及配置

🚀 欢迎来到Max Li的思考空间

我是一名 SRE 运维工程师,专注于让你的系统保持在稳定的“绿灯”状态,而不是让你陷入一片“红灯”海洋。 我的工作就是确保你的服务器像高铁一样飞速稳定,尽量让你在夜里不必被系统故障的警报声吵醒。

在这里,你可以期待:

  • 运维小妙招:那些让你“哇,这么简单!”的实用技巧。
  • 运维趣事:分享那些让人捧腹的系统崩溃和故障故事。
  • 幽默技术解读:把复杂的运维问题用有趣的方式讲解,让你既能学到东西,又能笑出声。

💡 我的口号是: “让你的系统稳定,让你的生活轻松——我是你的 SRE 超级英雄!”

🎩 所以,如果你想让系统像魔法一样稳定,或者只是想听听一段关于服务器“囧态”的搞笑故事,跟随我,一起在运维的世界里冒险吧!

一、ansible是什么?

Ansible 是一种流行的开源自动化工具,主要用于配置管理、应用程序部署、任务自动化和 IT 编排。

在这里插入图片描述

二、Ansible的基本概念:

  1. 控制节点(Control Node):运行 Ansible 的机器,它发送指令到托管节点(Managed Nodes)。
  2. 托管节点(Managed Nodes):被 Ansible 管理的机器,通常是服务器、虚拟机或容器。
  3. 清单文件(Inventory File):列出所有托管节点的文件,可以是简单的文本文件或动态脚本。
  4. 模块(Modules):Ansible 使用模块执行任务,模块是一些执行特定任务的命令或代码片段。
  5. 剧本(Playbooks):以 YAML 格式编写的文件,描述一系列需要执行的任务。它是 Ansible 自动化的核心。
  6. 角色(Roles):是用于组织 Playbooks 和其他文件的结构化方式,可以更好地重用代码。
  7. 任务(Tasks):Playbooks 中的基本单元,每个任务调用一个模块来执行特定操作。
  8. 变量(Variables):用于在 Playbooks 中自定义任务的行为。
  9. 处理程序(Handlers):在某些条件触发下执行的特殊任务,例如只有在配置文件被更改时才重启服务。

三、安装

安装 Ansible 很简单,取决于你使用的操作系统。以下是如何在不同操作系统上安装 Ansible 的步骤:

1. 在 CentOS/RHEL 上安装 Ansible

  1. 启用 EPEL(Extra Packages for Enterprise Linux)存储库

    sudo yum install epel-release -y
    
  2. 安装 Ansible

    sudo yum install ansible -y
    
  3. 验证安装

    ansible --version
    

2. 在 macOS 上安装 Ansible

  1. 使用 Homebrew 安装 Ansible

    • 如果你还没有安装 Homebrew,可以先安装 Homebrew:

      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      
  2. 安装 Ansible

    brew install ansible
    
  3. 验证安装

    ansible --version
    

3. 在 Windows 上安装 Ansible

Ansible 不直接在 Windows 上运行,但你可以使用 Windows Subsystem for Linux (WSL) 来安装和运行 Ansible。以下是步骤:

  1. 安装 Windows Subsystem for Linux (WSL)

    • 在 PowerShell 中运行以下命令来启用 WSL:

      wsl --install
      
  2. 安装 Ubuntu 或其他 Linux 发行版

    • 通过 Microsoft Store 安装 Ubuntu 或其他受支持的 Linux 发行版。
  3. 在 WSL 上安装 Ansible

    • 打开 Ubuntu 终端,然后按照 Ubuntu 的安装步骤安装 Ansible。、
  4. 验证安装

    ansible --version
    

四、配置文件

Ansible 的主要配置文件用于定义 Ansible 的行为和操作方式。以下是 Ansible 的几个关键配置文件及其用途:

在这里插入图片描述

1. ansible.cfg

  • 位置

    :默认情况下,

    ansible.cfg
    

    文件可以位于以下位置之一(优先级由高到低):

    • 当前目录(当前运行 Ansible 命令的目录)
    • 用户的主目录(~/.ansible.cfg
    • 系统范围的目录(通常是 /etc/ansible/ansible.cfg
  • 用途

    :定义 Ansible 的全局配置选项,包括:

    • 连接设置(如 SSH 密钥、超时、并行度等)
    • 库路径(模块和插件的路径)
    • 日志记录和输出设置
    • 默认行为(如是否检查模式、错误处理等)

2. Inventory 文件

  • 位置:可以是任何用户指定的路径或默认位于 /etc/ansible/hosts
  • 用途:列出托管节点(主机)的信息,可以是一个简单的 INI 格式文件或一个动态生成的脚本。每个条目可以包含主机名、IP 地址、组名等信息。

3. Playbook 文件

  • 位置:用户可以根据项目需要将其存储在任何位置。
  • 格式:YAML 格式文件。
  • 用途:定义要在托管节点上执行的任务集合。Playbooks 是 Ansible 自动化的核心,通常会引用 Inventory 文件和使用模块。

4. Hosts 文件

  • 位置:默认位于 /etc/ansible/hosts
  • 用途:和 Inventory 文件类似,是一个列出所有托管节点的文件。可以定义主机组以及主机的变量。

5. Role 目录结构

  • 位置:在项目目录或 /etc/ansible/roles 下。
  • 用途:Roles 是 Ansible 推荐的组织 Playbooks 和相关文件的方式。每个 Role 目录通常包括任务(tasks)、处理程序(handlers)、变量(vars)、文件(files)、模板(templates)、元数据(meta)等子目录。

6. Group/Host Variables 文件

  • 位置:通常放在 group_vars/host_vars/ 目录下。
  • 用途:为特定的主机组或主机定义变量,通常用来存储特定环境或主机相关的配置信息。

这些配置文件共同作用,定义了 Ansible 如何与托管节点交互、执行任务和管理配置。希望这些信息对你有帮助!如果你需要进一步的解释或演示文稿中的可视化建议,请告诉我。

五、主机配置

在 Ansible 中,主机清单(Inventory) 是一个关键的配置文件,用于定义 Ansible 控制节点可以管理的主机和组。主机清单文件可以是简单的文本文件(通常是 ini 格式),也可以是动态生成的(例如使用脚本或云插件)。通过清单文件,您可以指定主机的组、变量等信息,便于在 Playbooks 中引用。

以下是如何配置 Ansible 主机清单的一些示例和步骤:

1. 使用 INI 格式配置主机清单

/etc/ansible/hosts 或您指定的其他文件中创建或编辑主机清单文件。以下是一个典型的 ini 格式的主机清单示例:

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[loadbalancers]
lb1.example.com

[all:vars]
ansible_user=ansible_user
ansible_ssh_private_key_file=/home/ansible_user/.ssh/id_rsa
解释:
  • [webservers]:定义了一个名为 webservers 的组,包含两个主机 web1.example.comweb2.example.com
  • [dbservers]:定义了一个名为 dbservers 的组,包含两个主机 db1.example.comdb2.example.com
  • [loadbalancers]:定义了一个名为 loadbalancers 的组,包含一个主机 lb1.example.com
  • [all:vars]:定义所有主机的全局变量。在这个例子中,为所有主机指定了默认的 SSH 用户和私钥路径。

2. 使用 YAML 格式配置主机清单

如果您喜欢使用 YAML 格式,Ansible 也支持。以下是一个简单的 YAML 格式的主机清单示例:

all:
  hosts:
    web1.example.com:
      ansible_host: 192.168.1.10
    web2.example.com:
      ansible_host: 192.168.1.11
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db1.example.com:
        db2.example.com:
解释:
  • all:表示所有主机的顶层组。
  • hosts:在 all 组下列出所有的主机,并为每个主机设置 ansible_host 变量。
  • children:定义子组,如 webserversdbservers,并指定属于这些组的主机。

3. 添加主机变量

您可以在清单文件中为特定主机或组定义特定变量。例如:

[webservers]
web1.example.com ansible_user=ubuntu ansible_port=22
web2.example.com ansible_user=ubuntu ansible_port=22
解释:
  • ansible_user:定义 SSH 用户。
  • ansible_port:定义 SSH 连接的端口。

4. 动态主机清单

对于动态或云环境(如 AWS、Azure、GCP),可以使用动态主机清单脚本,自动生成托管节点列表。您可以使用 Ansible 提供的插件或编写自定义脚本来实现这一点。

如何使用主机清单

配置好主机清单文件后,可以在运行 Ansible 命令时指定它:

ansible -i /path/to/your/hosts -m ping all

或者在 Playbook 中引用主机组:

- hosts: webservers
  tasks:
    - name: Ensure Apache is installed
      apt:
        name: apache2
        state: present

通过这种方式,你可以灵活地定义和管理 Ansible 的托管节点。希望这对你有所帮助!如果有其他问题,请告诉我!

六、实践

要在生产环境中成功配置和使用 Ansible,您需要完成几个步骤,包括安装、配置主机清单、创建和运行 Playbook,以及验证主机的连通性。以下是 Ansible 配置的完整过程以及如何验证与托管节点的连接性:

1. 安装 Ansible

根据操作系统不同,安装 Ansible 的步骤会有所差异。以下是安装 Ansible 的一般步骤:

  • 首先创建ansible账号

    useradd ansible
    
  • CentOS/RHEL 上:

    sudo yum install epel-release -y
    sudo yum install ansible -y
    
  • Ubuntu/Debian 上:

    sudo apt update
    sudo apt install software-properties-common -y
    sudo add-apt-repository --yes --update ppa:ansible/ansible
    sudo apt install ansible -y
    
  • macOS 上:

    brew install ansible
    

2. 配置主机清单(Inventory)

Ansible 使用 主机清单文件 来定义和管理需要被管理的托管节点(主机)。这是 Ansible 操作的核心配置文件。创建或编辑 /etc/ansible/hosts 或自定义路径下的主机清单文件。

例如,编辑一个简单的 INI 格式清单文件:

[webservers]
web1.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
web2.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa

[dbservers]
db1.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
解释:
  • [webservers][dbservers]:定义了两个主机组。
  • ansible_user:指定用于连接的 SSH 用户。
  • ansible_ssh_private_key_file:指定用于 SSH 连接的私钥文件路径。

可通过ssh配置服务器之间的公私钥,就无需在host文件写ssh密钥配置信息了

3. 配置 ansible.cfg 文件

  1. ansible.cfg 文件用于定义 Ansible 的全局配置选项,可以放在 /etc/ansible/ansible.cfg 或当前项目目录中。以下是一个示例配置:
[defaults]
inventory = /etc/ansible/hosts
remote_user = ansible
host_key_checking = False
解释:
  • inventory:指定主机清单文件的位置。
  • remote_user:默认的远程连接用户。
  • host_key_checking:禁用 SSH 主机密钥检查(在测试环境中可能有用)。
  1. 命令式生成配置文件 可根据需要自我增删改查~/ansible/ansible.cfg

    ansible-config init --disabled > ~/ansible/ansible.cfg
    

4. 创建 Ansible Playbook

Ansible Playbook 是一个以 YAML 格式编写的文件,定义了一系列要在托管节点上执行的任务。例如,创建一个简单的 Playbook site.yml,用于安装 Apache HTTP 服务器:

---
- hosts: webservers
  become: yes
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present
      when: ansible_os_family == "Debian"

5. 验证与托管节点的连通性

在开始运行 Playbook 之前,您应该验证 Ansible 控制节点与所有托管节点之间的连通性。可以使用 ping 模块来测试连接:

ansible all -m ping
解释:
  • all:指代主机清单中的所有主机。可以替换为特定的主机组(如 webserversdbservers)。
  • -m ping:指定使用 ping 模块,检查与每个托管节点的连接性。

示例输出

web1.example.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web2.example.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

如果返回 SUCCESS"ping": "pong",则表示控制节点和托管节点之间的连接正常。

6. 运行 Ansible Playbook

在验证了连通性之后,可以运行 Ansible Playbook:

ansible-playbook site.yml

示例输出

PLAY [webservers] ****************************************************************

TASK [Gathering Facts] ***********************************************************
ok: [web1.example.com]
ok: [web2.example.com]

TASK [Install Apache] ************************************************************
changed: [web1.example.com]
changed: [web2.example.com]

PLAY RECAP ***********************************************************************
web1.example.com            : ok=2    changed=1    unreachable=0    failed=0
web2.example.com            : ok=2    changed=1    unreachable=0    failed=0

总结

通过这些步骤,你可以成功安装和配置 Ansible,创建主机清单文件,编写 Playbook,验证与托管节点的连通性,并在生产环境中运行自动化任务。如果有任何进一步的问题或需要更多帮助,请告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值