Ansible核心技术

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介:

Ansible简述

Absible 使用 模块(Modules)来定义配置任务。模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等。Ansible 剧本(YAML语言编写)角色映射到 节点/虚拟机上,以对这些节点/虚拟机 进行编排有序的执行。
Ansible 支持 ad-hoc 任务:管理任务(不必幂等)以在多个节点/虚拟机上执行。Ansible具有无代理架构:你不需要在配置的节点/虚拟机上安装Ansible(然而,这些节点必须安装 python 环境),Ansible 通过SSH或者通过 PowerShell(Windows 机器)从单个控制机器上配置管理节点/虚拟机,并且能够支持并行配置多个节点。
Ansible 可以用来配置类 unix 系统或 Windows 节点/虚拟机。
Ansible 使用 Python 语言编写。许可:GNU General Public License.

Ansible playbook 示例:

- name: Install nginx
       yum: name=nginx state=present- name: restart nginx
       service: name=nginx state=restarted enabled=yes

什么是Ansible

Ansible 是 DevOps 项目基础支撑工具之一,是第一款实现读/ 写跨平台 的“ Infrastructure- as- code” 工具,从系统管理者到开发者,都可使用Ansible自动化部署并维护整个应用的生命周期,实现持续交付。

Ansible 软件及公司

在维基百科里列出了二十多个, 其中Puppet、Chef和Salt,以及CFEngine、Vagrant和NixOS,大家都可能耳熟能详 了。不过后起之秀Ansible( http:// www. ansible. com/)的人气更高,已经是当今最常用的管理基础架构的开源管理工具之一。


运维自动化的发展

  • 纯手工阶段
  • 脚本阶段
  • 工具阶段

Ansible:"Ansible is Simple IT Automation"

  • 一款简单的自动化工具
  • 无代理(无需再所要管理的系统上安装任何软件)
  • Github上最热门的开源自动化工具之一,可免费使用

Ansible提供

  • 应用部署
  • 配置管理
  • 任务自动化

目标用户:

  • 运维&开发

为什么选择Ansible

Ansible核心技术

特点

  • 无客户端
  • 简单,易懂
  • 扩展性强,可管理从几十台到数千台节点
  • ssh连接,安全
  • 强大社区,大量module,role拿来即用
  • 幂等性

Ansible工作原理

Ansible核心技术

Ansible核心构成

  • Inventory:定义Ansible被管理主机的清单
  • Modules:包括Ansible自带的核心模块及自定义模块
  • Playbooks:剧本,定义Ansible多任务配置文件,由Ansible自动执行
  • API:python接口,提供二次开发及系统整合能力
  • Plugins:完成模块功能的补充,包括连接插件、邮件插件等

Ansible安装

yum方式

yum install epel-release
yum install ansible -y

apt-get方式

apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible

pip方式

pip install ansible

文件安装

  • 可执行文件:/usr/bin/ansible*
  • 配置文件目录:/etc/ansible/
  • ansible-config
  • hosts
  • roles/
  • Python lib文件:usr/lib/python2.7/site-packages/ansible
  • Help文档

重要

  • 在/etc/ansible/ansible-config里关闭host_key_checking

Inventory

  • Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务,也可以同时使用多个清单文件,甚至可以动态地或者从云资源中拉取清单。

Ansible核心技术

Ansible核心技术

Ansible核心技术

Ansible ad-hoc

  • ad-hoc是什么
    完成实时的。一次性的,简单的工作
  • ad-hoc 语法规则
    Ansible核心技术

常用参数

  • -i 指定inventory文件
  • -m 指定模块
  • -a 参数命令
  • -u 指定访问用户
  • -k 输入密码
  • -K 输入sudo密码
  • -f 指定并行数量(默认5)

Ansible常用模块

  • ping:用于检测远程主机是否存活
  • shell:在远程主机上执行shell命令
  • script:在远端机器执行本地脚本
  • yum/apt:用于安装软件包
  • service:用于管理服务
  • file:用于配置文件属性
  • copy:复制文件到远程主机
  • setup :查看远程主机的基本信息

ping

检查目标主机手否存活

示例:

  • ansible -i yard all -m ping

shell

在目标主机执行shell命令

  • chdir:运行shell之前cd到某个目录

示例:

  • ansible all -m shell -a "cat /etc/centos-release"
  • ansible all -m shell -a "cat centos-release chdir=/etc"

script

在目标机器上执行本地脚本

  • chdir:先进入目标文件夹再执行脚本

示例:

ansible db -m script -a "/tmp/add_env.sh"
ansible db -m script -a "/root/test.py chdir=/var/www/"

apt/yum

apt、yum 模块分别用于管理Ubuntu系列和RedHat系列系统软件包

  • name:软件包名
  • state:软件包的状态(present/installed/absent/removed)

示例

  • 确保httpd包已经安装
    ansible webservers -m apt -a "name=httpd state=present"
  • 确保安装包到一个特定的版本
    ansible webservers -m apt -a "name=httpd-1.5 state=present"
  • 确保一个软件包没有被安装
    ansible webservers -m apt -a "name=httpd state=absent"

service

管理目标机器服务的状态

  • name:必选项,服务名称
  • state:对当前服务执行启动,停止、重启、重新加载等操作
    (started,stopped,restarted,reloaded)
  • enabled:是否开机启动 yes|no
  • runlevel:运行级别
  • arguments:给命令行提供一些选项

示例:

  • ansible test -m service -a "name=httpd state=started enabled=yes"
  • ansible test -m service -a "name=network state=restarted args=eth0"
  • ansible test -m service -a "name=httpd state=stopped"

copy

将文件从ansible管理机拷贝到目标机器

  • src:源文件
  • dest:目标路径
  • backup:覆盖之前,是否备份原文件
  • owner:设定文件/目标的属主
  • group:设定文件/目标的属组
  • mode:设定文件/目标的权限

示例:

  • ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=644"
  • ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"

file

操作目标机器文件属性,新建/删除文件,文件夹及链接文件

  • group:定义文件/目录的属组
  • owner:定义文件/目录的属主
  • mode:定义文件/目录的权限
  • path:必选项,定义文件/目录的路径
  • state:定义文件状态(directory/link/absent/touch/hard)

示例:

  • ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
  • ansible test -m file -a "path=/tmp/ansible mode=755 group=test owner=test"
  • ansible test -m file -a "path=/tmp/test state=directory"

setup

搜集系统信息

  • 搜集主机的所有系统信息
    ansible all -m setup
  • 搜集系统信息并以主机名为文件名分别保存在/tmp/facts 目录
    ansible all -m setup --tree /tmp/facts
  • 搜集和内存相关的信息
    ansible all -m setup -a "filter=ansible_*_mb"
  • 搜集网卡信息
    ansible all -m setup -a "filter=ansible_eth[0-2]"

模块帮助

Playbook

  • YAML文件作为载体
  • 描述多个任务的集合
  • 使目标主机按照既定顺序执行任务以达到期望状态
  • 通过ansible-playbook命令执行

什么是YAML语言

一种人性化的数据格式定义语言

YAML:YAML Ain't a Markup Language

  • 结构感强,可读性好
  • 通用的数据串行化格式

这是一个yaml

---
#一位职工记录
name: David
job: Developer
skill: Elite
employed:True
foods:
    -Apple
    -Orange
Languages:
    ruby:Elite
    python:Elite

语法要求:

  • 以‘---’作为起始句
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,相同层级的元素左侧对齐即可

数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
  • 纯量(scalars):单个的、不可再分的值

对象

name: David
job: Developer

{''name":"David","job":"Developer"}

数组

- apple
- orange

["apple",'orange']

符合结构

students:
    - name: Lucy
        age:15
    - name: Lily
        age: 13

{students:[{"name":"Lucy","age":15,{"name":"Lily","age":13}}]}

布尔值

create_key: yes/no
gather_facts: true/False
sudoer: T/F

再看yaml

Ansible核心技术

YAML语法检查

Pyhton
Python -c 'import yaml,sys;print yaml.load(sys.stdin)'< test.yaml

YAML Lint
http://www.yamllint.com

Ansible命令工具

Ansible-playbook test.yaml --syntax-check

Ansible核心技术

Play

Ansible核心技术

未完待续,持续更新










本文转自 yard521 51CTO博客,原文链接:http://blog.51cto.com/tangyade/2066393,如需转载请自行联系原作者

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:Ansible实战指南
【9月更文挑战第18天】在追求效率和稳定性的今天,自动化运维已成为IT领域的热门话题。本文将引导你通过实际案例学习如何使用Ansible进行自动化配置管理、任务执行和流程编排,从而提升你的工作效率并减少人为错误。我们将从基础概念出发,逐步深入到高级应用,让你能够轻松掌握这一强大的自动化工具。
|
6月前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的协同实战
【5月更文挑战第25天】 在当今快速迭代的软件发布环境中,自动化运维成为确保部署效率和可靠性的关键。本文通过深入分析Ansible和Docker技术,探索它们如何协同工作以构建一个高效的自动化运维体系。文章不仅介绍了Ansible的配置管理功能和Docker容器化的优势,还详细阐述了将两者结合的实践策略,旨在帮助读者理解并实现更智能、更灵活的基础设施管理。
|
2月前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
|
3月前
|
运维 监控 持续交付
构建高效自动化运维体系:Ansible与Docker的协同实践
【7月更文挑战第42天】 在当今快速发展的云计算和微服务架构时代,自动化运维已成为提升效率、确保系统稳定性的关键。本文将探讨如何利用Ansible这一强大的自动化工具与Docker容器技术相结合,搭建一个高效、可靠的自动化运维体系。文章首先简述了自动化运维的必要性和Ansible与Docker的基本概念,随后详细介绍了两者结合的优势,并通过实际案例分析展示了如何实现自动化部署、管理和扩展应用服务。通过阅读本文,读者将获得一套可行的自动化运维解决方案,以应对日益复杂的IT环境挑战。
|
3月前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:Ansible在现代IT架构中的应用与实践
【8月更文挑战第30天】随着信息技术的飞速发展,企业对运维效率和可靠性的要求日益增高。传统的手动运维方式已难以应对复杂多变的IT环境,自动化运维因此成为行业新宠。本文将深入探讨Ansible这一流行的自动化工具,如何通过其简洁的配置管理和强大的多节点部署能力,助力现代IT架构实现高效、可靠的运维管理。我们将从Ansible的核心概念入手,逐步解析其在配置管理、任务执行、应用部署等方面的实战应用,并结合代码示例,展示如何利用Ansible简化日常运维工作,提升运维质量和效率。无论你是运维新手还是资深专家,这篇文章都将为你提供宝贵的洞见和实操技巧。
|
6月前
|
运维 关系型数据库 Shell
运维自动化之 ansible
运维自动化之 ansible
|
6月前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第28天】 在现代IT基础设施管理中,自动化运维已成为提升效率、确保一致性和降低人为错误的关键手段。本文深入探讨了如何利用Ansible这一强大的自动化工具与容器化技术的代表Docker相结合,以打造一个灵活且高效的自动化运维体系。通过分析Ansible的模块化设计、丰富的插件系统以及与Docker的无缝集成,本文旨在为读者提供一个清晰、可行的自动化运维解决方案,同时强调安全性和可扩展性的重要性。
|
负载均衡 关系型数据库 Linux
实战案例——Ansible部署高可用OpenStack平台
实战案例——Ansible部署高可用OpenStack平台
674 0
|
运维 网络安全 API
Ansible 与运维自动化 | 学习笔记
快速学习Ansible 与运维自动化
Ansible 与运维自动化 | 学习笔记
|
运维 Shell 应用服务中间件
下一篇
无影云桌面