Ansible自动化部署

10 篇文章 0 订阅
2 篇文章 0 订阅

AUTHOR:闫小雨
TIME:2024-06-26



一、Ansible简述

Ansible 是一个开源的自动化工具,用于配置管理、应用部署、任务自动化和 IT 编排。它通过无代理(agentless)的方式工作,使用 SSH 连接到目标主机执行命令,并通过简单的 YAML 格式的剧本(playbooks)来定义任务。

1、使用者的四种交互方式

交互方式作用特点
CMDB存储和管理企业架构的配置信息通过CMDB组合Ansible,下发指令调用Ansible工具
publie/private通过API接口与Ansible交互使用编程语言调用Ansible API(如python,php)
Ad_Hoc命令集即时执行单次任务通过命令行直接调用Ansible工具集,适用快速执行任务
playbooks执行预先编排好的任务集使用YAML格式编写playbooks,按序完成复杂任务

2、Ansible工具集

工具描述
Ansible CLI命令行工具
Ansible Playbooks用YAML编写的自动化任务剧本
Ansible Modules执行特定任务的功能模块
Ansible Galaxy角色共享和发现平台
Ansible Tower(AWX)企业级管理和可视化工具

3、作用对象

作用对象描述
服务器Linux和Windows服务器
云实例AWS、Azure、阿里云、 Google Cloud
容器Docker 和 Kubernetes
网络设备路由器、交换机、防火墙
存储设备NAS 和 SAN 系统
应用程序Web 服务器、数据库、消息队列等
安全和合规性安全策略和合规性检查

二、Ansible安装

1、使用yum安装,并安装EPEL仓库
# 安装 EPEL 仓库
sudo yum install epel-release -y

# 安装 Ansible
sudo yum install ansible -y

#验证安装 
ansible --version

2、使用pip源代码安装
#安装python pip
yum install python3 pythom3-pip -y

#下载安装源代码  码云gitee
git clone https://gitee.com/ansible/ansible.git
#或  github
#git clone https://github.com/ansible/ansible.git
#或  gitLub
#git clone https://gitlab.com/ansible/ansible.git

#安装依赖
cd ansible
pip install -r requirements.txt

#使用devel分支 进行版本选择
#切换到稳定的发布分支,这里以 3.5 版本为例
git checkout stable-3.5  

#安装 Ansible
pip install --user .

#验证安装
ansible --version

如果以上方法都不可行,可以尝试从一个已知的备份或镜像站点下载 Ansible 的压缩包
假设从清华大学镜像站下载:wget https://mirrors.tuna.tsinghua.edu.cn/ansible/stable-3.5/ansible-3.5.1.tar.gztar -zxvf ansible-3.5.1.tar.gz

3、使用pip直接安装
#安装python pip
yum install pythom3-pip -y

#安装 Ansible
pip install --user ansible

#验证安装
ansible --version

4、 创建ssh免交互登录

1、生成ssh密钥对

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

以下两个选项可以不用跟;
-b 4096:指定生成 RSA 密钥的位数为 4096 位,比默认的 2048 位更安全
-C "your_email@example.com":通过 -C 选项添加注释,一般标识这个密钥对的用途或所有者的电子邮件地址。

2、复制公钥到远程主机

ssh-copy-id user@hostname

将生成的公钥复制到远程主机的 ~/.ssh/authorized_keys文件中 , 需要输入远程主机的密码进行确认;
如果 ssh-copy-id 命令不可用,可以手动将公钥内容复制粘贴到远程主机的 ~/.ssh/authorized_keys 文件中 ;

3、验证免密登录

ssh user@hostname

三、Ansible配置

Inventory 文件

  • 作用:用于管理和描述要管理的主机和主机组。
  • 格式:文本文件,例如:
[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com
db2.example.com

此处 [webservers] [databases] 是组名,下面列出的是具体的主机名或 IP 地址。可以根据需要组织和分组主机 ;

  • 分组:可以根据需要对主机进行组织和分组。

ansible.cfg 文件

  • 作用:Ansible 的配置文件,包含全局配置选项。
  • 示例
[defaults]
inventory = /path/to/your/inventory/file
remote_user = your_remote_user
private_key_file = /path/to/your/private/key.pem
host_key_checking = False

ansible.cfg 是 Ansible 的配置文件,可以包含全局配置选项,如默认的 Inventory 路径、SSH 连接设置、日志级别等

主要配置项

配置项描述
inventory指定 Inventory 文件的路径
remote_user指定远程主机的用户名
private_key_file指定用于 SSH 连接的私钥文件路径
host_key_checking设置为 False 可以禁用 SSH 主机密钥检查,方便自动化环境下的连接

其他配置方式

1、环境变量
可以使用 ANSIBLE_CONFIG 环境变量指定 ansible.cfg 文件的路径。
2、命令行参数
使用 -i 参数指定特定的 Inventory 文件,使用 -u 参数指定远程用户等。
例如:

#使用 Ansible 运行一个 ping 模块(用于测试主机是否可达)来测试名为 web 的主机组中所有主机的连通性;
ansible -i /etc/ansible/hosts web -m ping

#如果使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件
ansible web -m ping

四、Ansible命令

1、ansible

说明ansible 命令是 Ansible 的主要命令行工具,用于执行 Ad-Hoc 命令和管理远程主机
描述通过 SSH 连接到远程主机,并执行指定的命令或模块

使用模板

ansible <pattern> -i <inventory> -m <module> -a '<module_arguments>' [options]

可选项

选项描述
-i 指定 Inventory 文件的路径
-m 指定要执行的 Ansible 模块
-a ‘<module_arguments>’模块的参数,使用单引号包裹参数
-u <remote_user>指定远程主机的用户名
-b在执行命令时提升为超级用户(sudo)
–private-key=<private_key_file>指定用于 SSH 连接的私钥文件
-e ‘key=value’定义额外的变量,传递给 Ansible playbook

示例

ansible webservers -i /etc/ansible/hosts -m shell -a 'uptime'

解释:上面的命令将连接到名为 webservers 的主机组中的所有主机,执行 shell 模块并运行 uptime 命令,显示每台主机的运行时间。

2、Ansible-doc

说明ansible-doc 命令用于查看 Ansible 模块的文档
描述提供对 Ansible 模块、插件以及其他 Ansible 组件的文档查看功能

使用模板

ansible-doc <module_name>

可选项: 无。
示例

ansible-doc shell

解释:上述命令将显示 shell 模块的文档,包括该模块的用法、参数说明和示例。

3、Ansible-palybook

说明ansible-playbook 命令用于运行 Ansible playbook
描述执行预定义的任务集合,通常用于自动化部署和配置管理

使用模板

ansible-playbook -i <inventory> <playbook.yml> [options]

可选项

** 选项 **** 描述 **
** -i **指定 Inventory 文件的路径
** <playbook.yml> **指定要执行的 Ansible playbook 文件
** -u <remote_user> **指定远程主机的用户名
** -e ‘key=value’ **定义额外的变量,传递给 Ansible playbook
** --private-key=<private_key_file> **指定用于 SSH 连接的私钥文件

示例

ansible-playbook -i /etc/ansible/hosts site.yml

解释:上述命令将执行名为 site.yml 的 Ansible playbook,根据 hosts 文件中的配置管理远程主机。

4、Ansible-console

说明ansible-console 命令启动 Ansible 控制台,提供交互式环境进行 Ansible 命令执行和调试
描述在控制台中执行 Ad-Hoc 命令、查看主机状态和调试任务

使用模板

ansible-console -i <inventory> [options]

可选项和描述

选项描述
-i 指定 Inventory 文件的路径
-u <remote_user>指定远程主机的用户名
–private-key=<private_key_file>指定用于 SSH 连接的私钥文件
-e ‘key=value’定义额外的变量,传递给 Ansible playbook

示例

ansible-console -i /etc/ansible/hosts

解释:上述命令将启动 Ansible 控制台,允许用户在交互式环境中执行 Ansible Ad-Hoc 命令和查看主机状态。

五、Ansible模块

1、command模块

描述: 在目标主机上执行特定的命令。
示例:

- name: Execute a command
  command: ls /path/to/directory    # 执行 ls 命令查看目录内容
可选项描述
chdir在执行命令前切换到的目录。
creates如果文件已存在,则不执行命令。
warn如果命令返回错误,是否警告而不是报错。

2、shell模块

描述: 在目标主机上以 shell 的方式执行命令。
示例:

- name: Execute a shell command
  shell: echo "Hello, World!"    # 执行 echo 命令输出文本
可选项描述
executable指定要使用的 shell 解释器。
creates如果文件已存在,则不执行命令。
warn如果命令返回错误,是否警告而不是报错。

3、copy模块

描述: 将本地文件或目录复制到目标主机。
示例:

- name: Copy a file
  copy:
    src: /path/to/local/file     # 本地文件路径
    dest: /path/on/remote/host   # 目标主机路径
可选项描述
backup是否备份目标文件。
force是否强制覆盖目标文件。
owner设置目标文件的所有者。

4、hostname模块

描述: 设置主机的主机名。
示例:

- name: Set hostname
  hostname:
    name: myserver.example.com    # 设置主机名为 myserver.example.com
可选项描述
name要设置的主机名。
use指定要用于设置主机名的工具(仅限于 Linux)。

5、yum模块

描述: 在 CentOS/RHEL 等基于 yum 的系统上安装、删除和更新软件包。
示例:

- name: Install a package
  yum:
    name: httpd                  # 要安装的软件包名称
    state: present               # 确保软件包处于安装状态
可选项描述
name要操作的软件包名称。
state软件包应该处于的状态(present、absent、latest 等)。
update_cache是否更新缓存。

6、service模块

描述: 控制系统服务的状态(启动、停止、重启)。
示例:

- name: Restart a service
  service:
    name: httpd                  # 服务名称
    state: restarted             # 重启服务
可选项描述
name要操作的服务名称。
state服务应该处于的状态(started、stopped、restarted 等)。

7、user模块

描述: 管理系统用户(创建、删除、修改)。
示例:

- name: Create a user
  user:
    name: johndoe                # 用户名
    state: present               # 确保用户存在
    groups: wheel                # 将用户添加到 wheel 组
可选项描述
name要操作的用户名。
state用户应该处于的状态(present、absent 等)。
groups将用户添加到的组。

六、Playbook配置文件

1、执行配置文件

说明

Ansible Playbook 是用 YAML 格式编写的自动化任务剧本,用于定义一系列任务和配置步骤,以实现系统配置、部署和管理。

描述

Playbook 文件通过定义任务(tasks)、变量(variables)、条件控制和处理机制来描述应用程序的自动化过程。

示例
---
- name: Install and configure Apache
  hosts: webservers
  become: yes
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
      notify: 
        - start apache
    - name: Start Apache
      service:
        name: httpd
        state: started

  handlers:
    - name: start apache
      service:
        name: httpd
        state: started

解释

name:

  • Install and configure Apache:Playbook 的名称,用于描述该 Playbook 的主要任务。

hosts:

  • webservers:指定了在哪些主机上执行任务。在 Ansible 的 Inventory 文件中,通常会定义不同的主机组,这里的 webservers 可以是一个主机组的名称。

become:

  • yes:指定在执行任务时提升权限(类似于 sudo),以便安装软件和启动服务等需要特权的操作。

tasks:

  • 这部分定义了要执行的具体任务列表:
    • Install Apache:使用 yum 模块安装 httpd(Apache HTTP Server)。
      • name: httpd:指定要安装的软件包名称。
      • state: present:指定软件包应该处于的状态,这里是确保安装并存在。
      • notify:当安装成功后,会触发名为 start apache 的处理程序(handler)。
    • Start Apache:使用 service 模块启动 httpd 服务。
      • name: httpd:指定要操作的服务名称。
      • state: started:指定服务应该处于的状态,这里是启动状态。

handlers:

  • 这部分定义了处理程序(handlers),即在任务执行后触发的操作:
    • start apache:这是一个处理程序的名称。
      • service 模块用于启动 httpd 服务。
      • state: started:指定服务应该处于的状态,这里是启动状态。

运行playbooks
ansible-playbook -i /path/to/your/inventory apache.yml

2、触发器

说明

在 Ansible 中,触发器(handlers)用于在任务执行后根据需要触发额外的操作,例如重启服务或执行其他必要的配置更改。

描述

Handlers 被定义在 Playbook 文件的 handlers 部分,并通过 notify 关键字从任务中调用。

示例
---
- name: Install and configure Apache
  hosts: webservers
  become: yes
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
      notify:
        - Restart Apache

  handlers:
    - name: Restart Apache
      service:
        name: httpd
        state: restarted

在上述示例中,Restart Apache 处理程序被定义为一个触发器。当 Install Apache 任务成功完成并且需要重启 Apache 服务时,Ansible 将调用 Restart Apache 处理程序来执行重启操作。

解释

回调函数

  • notify:当安装成功后,会触发名为 Restart Apache 的处理程序(handler)。

handlers:

  • 这部分定义了处理程序(handlers),即在任务执行后触发的操作:
    • Restart Apache:这是一个处理程序的名称。
      • service 模块用于管理系统服务。
      • name: httpd:指定要操作的服务名称。
      • state: restarted:指定服务应该处于的状态,这里是重启状态。

3、角色

说明

角色(Roles)是一种组织和复用 Ansible Playbook 的方法,可以将相关任务和文件结构化为可重复使用的单元。

描述

角色包含了一个或多个相关任务、变量、模板和文件,可以作为独立模块在不同的 Playbook 中引用和调用。

示例

角色的目录结构示例:

myrole/
├── tasks/
│   └── main.yml
├── handlers/
│   └── main.yml
├── templates/
├── files/
├── vars/
│   └── main.yml
├── defaults/
│   └── main.yml
├── meta/
│   └── main.yml
└── README.md

解释

tasks/main.yml:定义角色执行的主要任务。

  • handlers/main.yml:定义角色的处理程序。
  • templates/ 和 files/:存放模板和文件。
  • vars/ 和 defaults/:存放变量定义。
  • meta/main.yml:存放角色的元数据,如依赖和作者信息。

角色使得代码重用和管理变得更加简单和可维护,特别适用于复杂的自动化任务和部署流程。

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Ansible是一种自动化IT工具,可以自动化部署、管理和配置系统。在使用Ansible自动化部署OpenGAS系统时,您需要以下步骤: 1. 配置目标主机:确保目标主机安装了必要的软件和服务,并且可以从Ansible服务器访问。 2. 创建Ansible playbook:使用YAML编写Ansible playbook文件,定义要执行的任务。 3. 配置Ansible inventory:创建Ansible inventory文件,指定要部署OpenGAS系统的主机。 4. 运行Ansible playbook:使用ansible-playbook命令运行playbook,让Ansible自动化地完成部署和配置工作。 以下是具体步骤: 1. 安装Ansible:使用系统包管理器或从官方网站下载安装Ansible。 2. 配置目标主机:确保目标主机上安装了必要的软件和服务,例如Java、Tomcat、MySQL等,并且可以从Ansible服务器访问。 3. 创建playbook文件:使用YAML编写playbook文件。例如,可以创建一个名为opengas.yml的文件,其中包含以下内容: ``` - name: Deploy and configure OpenGAS hosts: opengas_servers become: yes tasks: - name: Install Java apt: name: openjdk-8-jre-headless state: present - name: Install Tomcat apt: name: tomcat8 state: present - name: Deploy OpenGAS WAR file copy: src: /path/to/opengas.war dest: /var/lib/tomcat8/webapps/opengas.war notify: - restart Tomcat - name: Configure OpenGAS database mysql_db: name: opengas state: present - name: Start Tomcat service service: name: tomcat8 state: started handlers: - name: restart Tomcat service: name: tomcat8 state: restarted ``` 在上面的例子中,我们使用apt模块安装Java和Tomcat,使用copy模块将opengas.war文件复制到Tomcat的webapps目录中,使用mysql_db模块创建MySQL数据库,使用service模块启动Tomcat服务。 4. 配置Ansible inventory:创建一个名为inventory的文件,并指定要部署OpenGAS系统的主机。例如: ``` [opengas_servers] opengas.example.com ``` 5. 运行playbook:使用ansible-playbook命令运行playbook。例如: ``` $ ansible-playbook opengas.yml -i inventory ``` 在运行过程中,Ansible将自动连接到目标主机,并执行定义在playbook文件中的任务。完成后,您可以在浏览器中访问OpenGAS系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫叫闫小雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值