searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一篇文章入门Ansible,体验自动化运维的力量

2023-05-25 09:20:26
68
0

1. Ansible是什么

Ansible是一个用于配置管理、应用部署、任务调度的开源工具。Ansible使用简单,易于上手,无需安装客户端,只需要在管理节点上安装即可。同时支持多种操作系统和云平台,使得它成为了一个非常通用的自动化工具。此外,Ansible还具有高度可扩展性和灵活性,可以根据需要自定义模块和插件,满足不同的自动化运维需求。总之,Ansible是一个非常强大的自动化运维工具,可以大大提高运维效率和稳定性,为企业的IT运维工作提供有力的支持。
Ansible主要包含以下基本组件:
1. Inventory:主机清单,包含要管理的主机和主机分组信息。
2. Playbooks:任务剧本,由一个或多个play组成,详细定义任务过程和要执行的步骤。
3. Plays:一个play代表playbook中的一组任务,在指定的主机组上执行。
4. Tasks:一个task代表一个操作步骤,任务由ansible模块和参数执行。
5. Modules:ansible模块,代表一类操作,如服务管理、软件包管理、文件管理等,task由模块驱动。
6. Variables:变量,用于替换模板和配置的值。可以使用inventory中的变量、playbook中的变量或命令行变量。
7. Templates:模板,由变量替换生成文件。
 
Ansible的工作流为:Inventory -> Playbook -> Module -> Hosts,Ansible的工作原理如下所示:
1. 通过SSH连接远程服务器,通过Python运行在远程主机上的Ansible模块来执行管理任务。
2. Ansible模块会收集主机信息,并在不充分信息的情况下尝试猜测(比如主机名)。如果不能自动获取信息,则会提示用户输入。
3. Ansible会根据inventory里主机和组的信息来决定哪些远程主机需要执行playbook中的任务。
4. 每个play中会执行多个task,一个task由一个Ansible模块驱动来完成。
5. 若task执行失败,则会停止整个play的执行过程。可以使用ignore_errors跳过task错误。
6. Ansible模块会产生“变更(changed)”、“失败(failed)”或“未变更(ok)”等信息反馈,ansbile会根据此信息生成playbook执行报告。
 

2. Ansible软件安装

Ansible的安装方式有多种,这里提供两种常用的安装示例:
1. 使用pip进行安装如果您的控制节点(执行ansible命令的机器)上已安装Python,可以使用pip进行快速安装。
# Install ansible 
pip install ansible 
# Check ansible version
ansible --version
2. 使用yum在CentOS上安装如果您的控制节点是CentOS系统,可以使用yum进行安装。
# Install ansible 
yum install ansible 
# Check ansible version 
ansible --version
 
Ansible安装后,典型目录结构如下:
- /etc/ansible/           # Ansible配置目录
- ├── ansible.cfg        # Ansible主配置文件
- ├── hosts              # inventory主机文件
- /usr/bin/ansible        # Ansible执行命令
- /usr/bin/ansible-playbook # Ansible playbook执行命令
- /usr/lib/python2.7/site-packages/ansible/ # Ansible代码目录
- ├── __init__.py       
- ├── modules            # Ansible模块目录
- ├── inventory          # inventory解析目录
- └── ...
- /yourprojects/           # 项目目录
- ├── prod.yml            # 生产环境playbook 
- ├── dev.yml             # 开发环境playbook
- ├── roles/              # 角色目录
- │   └── webserver/      # webserver角色
- │       └── tasks/
- │           main.yml   # webserver角色任务清单       
- ├── group_vars/         # 主机组变量目录
- │   └── webservers      # webservers组变量
- └── host_vars/          # 主机变量目录 
└── node1                 # node1主机变量

3. inventory简介

Ansible是一种自动化工具,可以帮助管理多台主机。为了使Ansible知道要管理哪些主机和主机组,需要使用inventory文件进行定义。inventory文件可以定义主机和主机组的变量和其他配置。在下边例子中,包含了webservers和dbservers的主机组变量目录和主机变量目录。了解inventory的格式和选项可以更好地管理和配置主机和主机组,并且能够更有效地使用Ansible进行自动化管理。
[webservers]
web1 ansible_host=xxxx ansible_user=root ansible_ssh_pass=xxxx
web2 ansible_host=xxxx ansible_user=root ansible_ssh_pass=xxxx

[webservers:vars] 
http_port=80

[dbservers]
db1 ansible_host=xxxx
db2 ansible_host=db2.example.com

[dbservers:vars]
db_port=3306  

4. Ansible模块

Ansible 有很多模块可以用于实现对主机的操作。例如file 模块可以用于管理文件和目录,service 模块可以用于管理系统服务,user 模块可以用于管理用户和用户组等等。这些模块可以帮助管理员轻松地管理大量的主机,提高管理效率。同时,Ansible 也支持自定义模块,这意味着管理员可以根据自己的需求编写自己的模块,以满足特定的操作要求。总的来说,Ansible 的模块化架构为管理员提供了非常便利的工具,使得系统管理变得更加高效和可靠。下边给出部分模块的示例,详细请参考ansible的官网文档。
1. yum模块:用于管理RPM包,安装/移除RPM软件包和更新包。语法:
- name: Install httpd 
  yum: 
    name: httpd
    state: present
参数:
- name: 指定要安装的软件包名称

- state: present表示安装,absent表示删除,latest表示更新到最新版

- update_cache: 强制更新yum包缓存,yes或no,默认no

- install_weak_dependencies: 尝试安装软件包的推荐或可选依赖,yes或no,默认no
2. service模块:用于管理服务的启动、停止和重启。语法:
- name: Start service httpd
  service: 
    name: httpd 
    state: started
参数:
- name: 指定服务名称

- state: started表示启动,stopped表示停止,restarted表示重启, reloaded表示重载

- enabled: 是否在启动后启用服务,yes或no
 
 
3. file模块:用于设置文件属性,创建/删除文件和目录。语法:
- name: Set permission for file 
  file:
    path: /etc/foo.conf
    mode: 0644
参数:
- path: 目标文件的路径

- state: touch表示创建文件,directory表示创建目录,absent表示删除文件或目录

- mode: 设置文件的权限,如0644

- owner: 更改文件所有者

- group: 更改文件所属组
 
4. copy模块:用于将文件或者目录复制到远程主机。语法:
- name: Copy file to remote
  copy:
    src: /etc/foo.conf
    dest: /tmp/foo.conf
参数:
- src: 源文件路径

- dest: 目标路径

- owner: 目标路径所有者

- group: 目标路径所属组 

- mode: 目标路径权限

5. playbook的编写

Playbook是Ansible中的一个重要概念,它是一个用于定义自动化任务的文件。通过Playbook,用户可以描述一系列任务,以及如何执行这些任务。Playbook通常包含主机列表、变量、任务列表和处理结果的处理器。使用Playbook可以简化复杂的部署和管理任务,提高工作效率。主要组成如下所示:
1. Hosts:目标主机列表,可指定具体主机、IP、主机组等。
2. Tasks:任务列表,用于定义在hosts上执行的操作。每个task通常会对应ansible的一个模块。
3. Variables:变量,用于定义playbook中的可变参数。变量可以在playbook中定义,也可以在外部文件中定义。
4. Handlers:处理器,用于处理异步事件。当某个任务通过notify触发一个处理器,该处理器会在所有任务完成后执行。
5. Templates:模板,用于定义模板文件,可与变量一起使用。模板引擎通常使用Jinja2。
 
 
以下是一个简单的playbook示例,该playbook会在webservers主机组中的服务器上执行,设置变量http_port=80和max_clients=200,使用root用户登录远程主机,确保httpd是最新版本。使用模板文件/srv/httpd.j2生成/etc/httpd.conf文件,启动httpd服务 ,如果模板文件更改,会重新启动httpd服务(通过handler)。
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service:
      name: httpd
      state: started
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

6. Ansible的role

通过将任务和配置分组到单独的角色中,Ansible role 可以使管理和维护 Ansible playbook 更加容易。角色可以被多个 playbook 共享和重复使用,从而提高了代码的可维护性和可重用性。此外,角色还可以使 playbook 更加模块化,使得在一个 playbook 中处理多个主机或环境变得更加简单和灵活。在使用 Ansible 进行自动化管理时,角色是一个非常有用的工具,可以大大减少工作量并提高效率。一个role可包含变量文件、任务文件、处理器文件、模板文件等。role的主要优点有:
1. 复用性:一个role可以在多个playbook中使用,实现代码复用。
2. 抽象:role抽象出某一类型的服务或功能,更适合角色职责划分。
3. 封装:role封装了某一服务或功能实现的所有内容,对外提供一个抽象层。
4. 依赖管理:一个role可以依赖其他role,便于管理依赖关系。
一个role的目录结构一般如下:
roles/
   common/
     tasks/
       main.yml
     handlers/
       main.yml
     files/
     templates/
     vars/
       main.yml
     defaults/
       main.yml
     meta/
       main.yml
   adsql/
     tasks/
       main.yml
     files/  
   httpd/
     tasks/
       main.yml
     files/  
     templates/
     vars/
       main.yml
     defaults/
       main.yml
     meta/
       main.yml
role的使用步骤:
1. 在playbook中使用include指令导入role,或将role列表添加到roles关键字例如:
yaml # site.yml - hosts: webservers   roles:     - common     - adsql     - httpd
2. 在hosts主机清单中为服务器指定角色
3. 可在playbook级变量和role级变量文件中定义变量
4. 在role内组织任务、处理器、模板、文件等
 
通过对上述知识的学习,可以快速了解ansible的基本概念和各个模块的使用方法,感兴趣的同学,可以随时找我沟通~
0条评论
0 / 1000
李****明
5文章数
0粉丝数
李****明
5 文章 | 0 粉丝
原创

一篇文章入门Ansible,体验自动化运维的力量

2023-05-25 09:20:26
68
0

1. Ansible是什么

Ansible是一个用于配置管理、应用部署、任务调度的开源工具。Ansible使用简单,易于上手,无需安装客户端,只需要在管理节点上安装即可。同时支持多种操作系统和云平台,使得它成为了一个非常通用的自动化工具。此外,Ansible还具有高度可扩展性和灵活性,可以根据需要自定义模块和插件,满足不同的自动化运维需求。总之,Ansible是一个非常强大的自动化运维工具,可以大大提高运维效率和稳定性,为企业的IT运维工作提供有力的支持。
Ansible主要包含以下基本组件:
1. Inventory:主机清单,包含要管理的主机和主机分组信息。
2. Playbooks:任务剧本,由一个或多个play组成,详细定义任务过程和要执行的步骤。
3. Plays:一个play代表playbook中的一组任务,在指定的主机组上执行。
4. Tasks:一个task代表一个操作步骤,任务由ansible模块和参数执行。
5. Modules:ansible模块,代表一类操作,如服务管理、软件包管理、文件管理等,task由模块驱动。
6. Variables:变量,用于替换模板和配置的值。可以使用inventory中的变量、playbook中的变量或命令行变量。
7. Templates:模板,由变量替换生成文件。
 
Ansible的工作流为:Inventory -> Playbook -> Module -> Hosts,Ansible的工作原理如下所示:
1. 通过SSH连接远程服务器,通过Python运行在远程主机上的Ansible模块来执行管理任务。
2. Ansible模块会收集主机信息,并在不充分信息的情况下尝试猜测(比如主机名)。如果不能自动获取信息,则会提示用户输入。
3. Ansible会根据inventory里主机和组的信息来决定哪些远程主机需要执行playbook中的任务。
4. 每个play中会执行多个task,一个task由一个Ansible模块驱动来完成。
5. 若task执行失败,则会停止整个play的执行过程。可以使用ignore_errors跳过task错误。
6. Ansible模块会产生“变更(changed)”、“失败(failed)”或“未变更(ok)”等信息反馈,ansbile会根据此信息生成playbook执行报告。
 

2. Ansible软件安装

Ansible的安装方式有多种,这里提供两种常用的安装示例:
1. 使用pip进行安装如果您的控制节点(执行ansible命令的机器)上已安装Python,可以使用pip进行快速安装。
# Install ansible 
pip install ansible 
# Check ansible version
ansible --version
2. 使用yum在CentOS上安装如果您的控制节点是CentOS系统,可以使用yum进行安装。
# Install ansible 
yum install ansible 
# Check ansible version 
ansible --version
 
Ansible安装后,典型目录结构如下:
- /etc/ansible/           # Ansible配置目录
- ├── ansible.cfg        # Ansible主配置文件
- ├── hosts              # inventory主机文件
- /usr/bin/ansible        # Ansible执行命令
- /usr/bin/ansible-playbook # Ansible playbook执行命令
- /usr/lib/python2.7/site-packages/ansible/ # Ansible代码目录
- ├── __init__.py       
- ├── modules            # Ansible模块目录
- ├── inventory          # inventory解析目录
- └── ...
- /yourprojects/           # 项目目录
- ├── prod.yml            # 生产环境playbook 
- ├── dev.yml             # 开发环境playbook
- ├── roles/              # 角色目录
- │   └── webserver/      # webserver角色
- │       └── tasks/
- │           main.yml   # webserver角色任务清单       
- ├── group_vars/         # 主机组变量目录
- │   └── webservers      # webservers组变量
- └── host_vars/          # 主机变量目录 
└── node1                 # node1主机变量

3. inventory简介

Ansible是一种自动化工具,可以帮助管理多台主机。为了使Ansible知道要管理哪些主机和主机组,需要使用inventory文件进行定义。inventory文件可以定义主机和主机组的变量和其他配置。在下边例子中,包含了webservers和dbservers的主机组变量目录和主机变量目录。了解inventory的格式和选项可以更好地管理和配置主机和主机组,并且能够更有效地使用Ansible进行自动化管理。
[webservers]
web1 ansible_host=xxxx ansible_user=root ansible_ssh_pass=xxxx
web2 ansible_host=xxxx ansible_user=root ansible_ssh_pass=xxxx

[webservers:vars] 
http_port=80

[dbservers]
db1 ansible_host=xxxx
db2 ansible_host=db2.example.com

[dbservers:vars]
db_port=3306  

4. Ansible模块

Ansible 有很多模块可以用于实现对主机的操作。例如file 模块可以用于管理文件和目录,service 模块可以用于管理系统服务,user 模块可以用于管理用户和用户组等等。这些模块可以帮助管理员轻松地管理大量的主机,提高管理效率。同时,Ansible 也支持自定义模块,这意味着管理员可以根据自己的需求编写自己的模块,以满足特定的操作要求。总的来说,Ansible 的模块化架构为管理员提供了非常便利的工具,使得系统管理变得更加高效和可靠。下边给出部分模块的示例,详细请参考ansible的官网文档。
1. yum模块:用于管理RPM包,安装/移除RPM软件包和更新包。语法:
- name: Install httpd 
  yum: 
    name: httpd
    state: present
参数:
- name: 指定要安装的软件包名称

- state: present表示安装,absent表示删除,latest表示更新到最新版

- update_cache: 强制更新yum包缓存,yes或no,默认no

- install_weak_dependencies: 尝试安装软件包的推荐或可选依赖,yes或no,默认no
2. service模块:用于管理服务的启动、停止和重启。语法:
- name: Start service httpd
  service: 
    name: httpd 
    state: started
参数:
- name: 指定服务名称

- state: started表示启动,stopped表示停止,restarted表示重启, reloaded表示重载

- enabled: 是否在启动后启用服务,yes或no
 
 
3. file模块:用于设置文件属性,创建/删除文件和目录。语法:
- name: Set permission for file 
  file:
    path: /etc/foo.conf
    mode: 0644
参数:
- path: 目标文件的路径

- state: touch表示创建文件,directory表示创建目录,absent表示删除文件或目录

- mode: 设置文件的权限,如0644

- owner: 更改文件所有者

- group: 更改文件所属组
 
4. copy模块:用于将文件或者目录复制到远程主机。语法:
- name: Copy file to remote
  copy:
    src: /etc/foo.conf
    dest: /tmp/foo.conf
参数:
- src: 源文件路径

- dest: 目标路径

- owner: 目标路径所有者

- group: 目标路径所属组 

- mode: 目标路径权限

5. playbook的编写

Playbook是Ansible中的一个重要概念,它是一个用于定义自动化任务的文件。通过Playbook,用户可以描述一系列任务,以及如何执行这些任务。Playbook通常包含主机列表、变量、任务列表和处理结果的处理器。使用Playbook可以简化复杂的部署和管理任务,提高工作效率。主要组成如下所示:
1. Hosts:目标主机列表,可指定具体主机、IP、主机组等。
2. Tasks:任务列表,用于定义在hosts上执行的操作。每个task通常会对应ansible的一个模块。
3. Variables:变量,用于定义playbook中的可变参数。变量可以在playbook中定义,也可以在外部文件中定义。
4. Handlers:处理器,用于处理异步事件。当某个任务通过notify触发一个处理器,该处理器会在所有任务完成后执行。
5. Templates:模板,用于定义模板文件,可与变量一起使用。模板引擎通常使用Jinja2。
 
 
以下是一个简单的playbook示例,该playbook会在webservers主机组中的服务器上执行,设置变量http_port=80和max_clients=200,使用root用户登录远程主机,确保httpd是最新版本。使用模板文件/srv/httpd.j2生成/etc/httpd.conf文件,启动httpd服务 ,如果模板文件更改,会重新启动httpd服务(通过handler)。
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service:
      name: httpd
      state: started
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

6. Ansible的role

通过将任务和配置分组到单独的角色中,Ansible role 可以使管理和维护 Ansible playbook 更加容易。角色可以被多个 playbook 共享和重复使用,从而提高了代码的可维护性和可重用性。此外,角色还可以使 playbook 更加模块化,使得在一个 playbook 中处理多个主机或环境变得更加简单和灵活。在使用 Ansible 进行自动化管理时,角色是一个非常有用的工具,可以大大减少工作量并提高效率。一个role可包含变量文件、任务文件、处理器文件、模板文件等。role的主要优点有:
1. 复用性:一个role可以在多个playbook中使用,实现代码复用。
2. 抽象:role抽象出某一类型的服务或功能,更适合角色职责划分。
3. 封装:role封装了某一服务或功能实现的所有内容,对外提供一个抽象层。
4. 依赖管理:一个role可以依赖其他role,便于管理依赖关系。
一个role的目录结构一般如下:
roles/
   common/
     tasks/
       main.yml
     handlers/
       main.yml
     files/
     templates/
     vars/
       main.yml
     defaults/
       main.yml
     meta/
       main.yml
   adsql/
     tasks/
       main.yml
     files/  
   httpd/
     tasks/
       main.yml
     files/  
     templates/
     vars/
       main.yml
     defaults/
       main.yml
     meta/
       main.yml
role的使用步骤:
1. 在playbook中使用include指令导入role,或将role列表添加到roles关键字例如:
yaml # site.yml - hosts: webservers   roles:     - common     - adsql     - httpd
2. 在hosts主机清单中为服务器指定角色
3. 可在playbook级变量和role级变量文件中定义变量
4. 在role内组织任务、处理器、模板、文件等
 
通过对上述知识的学习,可以快速了解ansible的基本概念和各个模块的使用方法,感兴趣的同学,可以随时找我沟通~
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
1
0