1-ansible基本概念
ansible相关概念
1.ansible是什么?
- ansible是自动化运维工具
2.ansible能做什么?
- ansible可以实现批量系统配置
- ansible可以实现批量程序部署
- ansible可以实现批量运行命令
- …
- ansible可以实现运维的自动化,在一台主机上同时管理配置多台主机。
3.ansible简介
- ansible基于Python开发的
- ansible是基于模块工作的
- ansible本身没有批量部署的能力,真正具有部署能力的是ansible所运行的模块。
- ansible只是提供一种框架,
-
架构图如下:
-
①连接插件connect plugins
- 复制和监控端实现通信
-
②host inventory
- 指定被操作的主机,是一个配置文件中定义的监控主机
-
③各种模块
- command模块、shell模块、service模块等等
-
④借助于插件完成记录日志邮件等功能
-
⑤playbook
- 编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
-
⑥Roles
- 用于层次性、结构化地组织playbook。
-
4.ansible的特点
- 模块化:调用特定的模块,完成特定任务
- Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
- 支持自定义模块
- 基于Python语言实现
- 部署简单,基于python和SSH(默认已安装),agentless
- 安全,基于OpenSSH
- 支持playbook编排任务
- 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
- 无需代理不依赖PKI(无需ssl)
- 可使用任何编程语言写模块
- YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案
5.ansible的主要组成成分
- ANSIBLE PLAYBOOKS:
- 任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
- INVENTORY:
- Ansible管理主机的清单/etc/anaible/hosts
- MODULES:
- Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
- PLUGINS:
- 模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
- API:
- 供第三方程序调用的应用程序编程接口
- ANSIBLE:
- 组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
6.ansible的优点
- (1)轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- (2)批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
- (3)使用python编写,维护更简单,ruby语法过于复杂;
- (4)支持sudo。
ansible的软件相关
1.ansible的安装
- rpm包安装: EPEL源
- yum install ansible
- 编译安装:
- yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
- tar xf ansible-1.5.4.tar.gz
- cd ansible-1.5.4
- python setup.py build
- python setup.py install
- mkdir /etc/ansible
- cp -r examples/* /etc/ansible
- pip安装:pip是安装Python包的管理器,类似yum
- yum install python-pip python-devel
- yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
- pip install --upgrade pip
- pip install ansible --upgrade
2.ansible的相关程序
程序 | 功能 |
---|---|
/usr/bin/ansible | 主程序,临时命令执行工具 |
/usr/bin/ansible-doc | 查看配置文档,模块功能查看工具 |
/usr/bin/ansible-galaxy | 下载/上传优秀代码或Roles模块的官网平台 |
/usr/bin/ansible-playbook | 定制自动化任务,编排剧本工具 |
/usr/bin/ansible-pull | 远程执行命令的工具 |
/usr/bin/ansible-vault | 文件加密工具 |
/usr/bin/ansible-console | 基于Console界面与用户交互的执行工具 |
3.Ansible系列命令
-
Ansible命令执行来源:
- USER,普通用户,即SYSTEM ADMINISTRATOR
- CMDB(配置管理数据库)API调用
- PUBLIC/PRIVATE CLOUD API调用
- USER-> Ansible Playbook -> Ansibile
-
利用ansible实现管理的方式:
- Ad-Hoc 即ansible命令,主要用于临时命令使用场景
- Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前期 的规划过程
-
Ansible主要操作对象
- HOSTS主机
- NETWORKING网络设备
-
注意事项
- 执行ansible的主机一般称为主控端,中控,master或堡垒机
- 主控端Python版本需要2.6或以上
- 被控端Python版本小于2.4需要安装python-simplejson
- 被控端如开启SELinux需要安装libselinux-python
- windows不能做为主控端
4.ansible的配置文件
配置文件 | 描述 |
---|---|
/etc/ansible/ansible.cfg | 主配置文件,配置ansible工作特性 |
/etc/ansible/hosts | 主机清单 |
/etc/ansible/roles/ | 存放角色的目录 |
5.Ansible 主配置文件
-
主配置文件:/etc/ansible/ansible.cfg(一般保持默认)
/etc/ansible/ansible.cfg 说明 [defaults] 模块 #some basic default values… #inventory =/etc/ansible/hosts #主机列表配置文件 #library =/usr/share/my_modules/ #库文件存放目录 #module_utils =/usr/share/my_module_utils/ - #remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录 #local_tmp = ~/.ansible/tmp #本机的临时命令执行目录 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml - #forks = 5 #默认并发数 #poll_interval =15 #默认sudo 用户 #sudo_user =root #ask_sudo_pass =True #ask_pass =True #transport =smart #remote_port =22 #module_lang =C #module_set_locale = False #host_key_checking =False #检查对应服务器的host_key,建议取消注释 #log_path= /var/log/ansible.log #日志文件 #module_name = command #默认模块 …
[colors] 模块 #highlight = white 强调白色 #verbose = blue 详情蓝色 #warn = bright purple 警告紫色 #error = red 错误红色 #debug = dark gray #deprecate = purple #skip = cyan 跳过青色 #unreachable = red #ok = green 成功绿色 #changed = yellow 变化黄色 #diff_add = green #diff_remove = red #diff_lines = cyan -
根据命令执行输出的颜色不同可直观的反应命令的执行的状态
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且对目标主机做变更
- 红色:执行失败
6.主机清单inventory
-
Inventory 主机清单
- ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以 在inventory file中将其分组命名
-
默认的inventory file为/etc/ansible/hosts
-
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
-
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机 同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明。
-
/etc/ansible/hosts文件格式
单台主机
green.example.com > FQDN
192.168.100.10 > IP地址
192.168.100.11:2222 > 非标准SSH端口[webservers] > 定义了一个组名
alpha.example.org > 组内的单台主机
192.168.100.10[dbservers]
192.168.100.10 > 一台主机可以是不同的组,这台主机同时属于[webservers][group:children] > 组嵌套组,group为自定义的组名,children是关键字,固定语法,必须填写。
dns > group组内包含的其他组名
db > group组内包含的其他组名[webservers]
www[001:003].hunk.tech > 有规律的名称列表,
这里表示相当于:
www001.hunk.tech
www002.hunk.tech
www003.hunk.tech[databases]
db-[a:c].example.com > 定义字母范围的简写模式,
这里表示相当于:
db-a.example.com
db-b.example.com
db-c.example.com以下这2条定义了一台主机的连接方式,而不是读取默认的配置设定
localhost ansible_connection=local
www.163.com ansible_connection=ssh ansible_ssh_user=hunk最后还有一个隐藏的分组,那就是all,代表全部主机,这个是隐式的,不需要写出来的。
-
Inventory 参数说明
-
ansible_ssh_host
- 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
-
ansible_ssh_port
- ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口 192.168.1.100:2222
-
ansible_ssh_user
- 默认的 ssh 用户名
-
ansible_ssh_pass
- ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
-
ansible_sudo_pass
- sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
-
ansible_sudo_exe (new in version 1.8)
- sudo 命令路径(适用于1.8及以上版本)
*ansible_connection
+ 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 ‘smart’,‘smart’ 方式会根据是否支持 ControlPersist, 来判断’ssh’ 方式是否可行.-
ansible_ssh_private_key_file
- ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
-
ansible_shell_type
- 目标系统的shell类型.默认情况下,命令的执行使用 ‘sh’ 语法,可设置为 ‘csh’ 或 ‘fish’.
-
ansible_python_interpreter
-
目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如\*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.
我们不使用 “/usr/bin/env” 机制,因为这要求远程用户的路径设置正确,且要求 “python” 可执行程序名不可为 python以外的名字(实际有可能名为python26). -
与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径…
-
-
7.ansible命令执行过程
-
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
-
- 加载自己对应的模块文件,如command
-
- 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
-
- 给文件+x执行
-
- 执行并返回结果
-
- 删除临时py文件,退出
ansible实现管理多台主机实验
【1.实验准备】
- 中控主机:192.168.38.17 安装ansible(yum安装)
- 中控主机与个被管理主机之间实现基于ssh key验证
- 所以主机版本:CentOS Linux release 7.6.1810 (Core)
【2.实验规划】
- 中控主机:192.168.38.17
- [webserver]
- 192.168.38.27
- 192.168.38.37
- [dbserver]
- 192.168.38.37
- 192.168.38.47