Ansible核心技术

简介:

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,如需转载请自行联系原作者

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
12月前
|
Kubernetes 负载均衡 Docker
ansible学习之旅(ansible依托kubeadm安装一个简单的k8s集群)
ansible学习之旅(ansible依托kubeadm安装一个简单的k8s集群)
121 0
|
运维 网络安全 API
Ansible 与运维自动化 | 学习笔记
快速学习Ansible 与运维自动化
Ansible 与运维自动化 | 学习笔记
|
运维 Kubernetes Cloud Native
Ansible-在云原生K8S环境中有多大用处?(翻译)
翻译稿:在云原生K8S环境中Ansible有多大用处? 本文主要讲了Ansible在容器构建,多集群管理,和应用生命周期管理方面的用处
1622 0
|
运维 Shell 应用服务中间件
|
Web App开发 网络协议 网络安全
|
Web App开发 应用服务中间件 Apache
|
Web App开发 运维 关系型数据库
|
应用服务中间件 Shell Linux