运维自动化 Ansible基础入门
1.什么是Ansible官方网站:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.htmlAnsible是一个配置管理和配置工具,类似于Chef,Puppet或Salt。这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务,服务器上不用安装任何多余的软件,只需要开
1.什么是Ansible
官方网站:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
Ansible是一个配置管理和配置工具,类似于Chef,Puppet或Salt。这是一款很简单也很容易入门的部署工具,它使用SSH连接到服务器并运行配置好的任务,服务器上不用安装任何多余的软件,只需要开启ssh,所有工作都交给client端的ansible负责。
1.1Ansible的特性
模块化:调用特定的模块,完成特定任务 有Paramiko, PyYAML, Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装), agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
1.2 安装ansible (基于centos8)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SScm2ooL-1626425801671)(en-resource://database/689:1)]](https://i-blog.csdnimg.cn/blog_migrate/a5df92a620113470d400afeb279d8dd9.png)
1.3 配置ansible
ansible 的主配置文件路径:vim /etc/ansible/ansible.cfg
ansible 的主机清单文件路径:/etc/ansible/hosts
在这里我们 将以下2台机子加入清单,也就说ansible要管理这2台受控机。 可以支持多种方式把不同的主机加入到不同的组里。
[dbserver]
192.168.89.129
[webserver]
192.168.89.130
1.4 ansbile的命令执行过程
1.加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程
服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
给文件+x执行
执行并返回结果
删除临时py文件, sleep 0退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
利用ansible实现管理的方式:
1.Ad-Hoc 即ansible命令,主要用于临时命令使用场景
2.Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划
1.5 ansible的帮助手册
ansible发展到今天有很多模块,可以通过使用 ansible 模块名 来查看帮助文档 或者 通过ansible -s 模块名来查看最精简的使用方式
2.ansible的使用示例 (ad-hoc)
在使用ansbile之前需要将安装ansible的机器和要被操控的机器之间进行认证,有 密钥和用户名密码2种方式。但是主要是采用密钥方式。
ansible的默认模块是 command ,command模块使用时候有一些限制,所以我们一般将默认的模块变为 shell 模块。更方便我们执行命令
1.使用command模块
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzQ7K9tN-1626425801675)(en-resource://database/695:1)]](https://i-blog.csdnimg.cn/blog_migrate/036b518410b954e83b2a826bb23fc9eb.png)
2.使用shell模块
因为我们将默认的模块在配置文件里更改成了shell,所以在执行shell模块的命令时候可以不使用 -m 参数![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gN8LI6rs-1626425801676)(en-resource://database/697:1)]](https://i-blog.csdnimg.cn/blog_migrate/ccc031cd73989cfd1e62b57128d9deb1.png)
3.copy模块 拷贝文件到受控端
ansible all -m copy -a “src=/data/ansible/test.txt dest=/data/test.txt”![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttk4OP4H-1626425801677)(en-resource://database/699:1)]](https://i-blog.csdnimg.cn/blog_migrate/0342e907420f2e89f2ae30c4548030d8.png)
4.fetch模块 从受控端拉取文件到管理端
ansible webserver -m fetch -a “src=/data/test.txt dest=/data/test.txt”![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fh2dIg0S-1626425801678)(en-resource://database/701:1)]](https://i-blog.csdnimg.cn/blog_migrate/c87daddfde203b853e92e2513eb2003a.png)
5.service 模块 管理服务

6.yum模块 管理包
ansible dbserver -m yum -a “name=sl”
3.ansible的使用示例(playbook)
1.创建mysql 账户和mysql 组的 playbook
---
#create mysql user and group
- hosts: all
remote_user: root
tasks:
- name: create group
group: name=mysql system=yes gid=306
- name: create user
user: name=mysql system=yes group=mysql shell=/sbin/nologin create_home=no home=/data/mysql uid=306
2.安装httpd 的playbook
- hosts: webserver
remote_user: root
gather_facts: no
# 取消收集设备信息
tasks:
- name: install httpd
yum: name=httpd state=present
- name: install configure file
copy: src=files/httpd.conf dest=/etc/httpd/conf/
tags: conf
- name: web html
copy: src=files/index.html dest=/var/www/html
- name: start service
tags: service
service: name=httpd state=started enabled=yes
3.安装nginx的playbook
---
#install nginx
- hosts: webserver
remote_user: root
gather_facts: no
tasks:
- name: add group nginx
group: name=nginx state=present
- name: add user nginx
user: name=nginx state=present group=nginx
- name: install nginx
yum: name=nginx state=present
- name: start nginx
service: name=nginx state=started enabled=yes
4. playbook的语法检查
playbook的语法是用yaml写的,yaml是缩进敏感,格式比较严格的一个语法,所以在执行playbook前可以使用-C 来检查 playbook语法是否正确
ansible-playbook -C install_httpd.yml![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x82mkHTz-1626425801679)(en-resource://database/707:1)]](https://i-blog.csdnimg.cn/blog_migrate/b2d4022c469cc6c4e3479cda706e4e5d.png)
4. ansible的高级用法-roles
4.1 roles介绍
ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。 roles
能够根据层次型结构自动装载变量文件、 tasks以及handlers等。要使用roles只需
要在playbook中使用include指令即可。简单来讲, roles就是通过分别将变量、
文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一
种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程
等场景中
4.2 roles目录层级介绍
/roles/project/ :项目名称,有以下子目录
files/ :存放由copy或script模块等调用的文件
templates/: template模块查找所需要模板文件的目录
tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;
其它的文件需要在此文件中通过include进行包含
handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此
文件中通过include进行包含
vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要
在此文件中通过include进行包含
meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为
main.yml的文件,其它文件需在此文件中通过include进行包含
default/:设定默认变量时使用此目录中的main.yml文件

4.3 roles实战一 httpd的安装
1.roles有推荐存放的目录在配置文件里可以看到

2.在写完roles后我们只需要写调用roles的playbook即可。但是要保证对应的yml 要和roles在同一层级
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ry3o4uEm-1626425801681)(en-resource://database/715:1)]](https://i-blog.csdnimg.cn/blog_migrate/2b1a532c0eecaec65e3c3802efecdf5d.png)
3. 在tasks目录下必须有main.yml 文件,里面讲对应的子yml 通过include引入,来保证任务的顺序。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2LQ0wtPg-1626425801681)(en-resource://database/717:1)]](https://i-blog.csdnimg.cn/blog_migrate/0102fd0429a8964a075d4dd754cfbc95.png)
5.ansible中的ansible-galaxy
官方地址:https://galaxy.ansible.com/
“Ansible Galaxy” 指的是一个网站共享和下载 Ansible 角色,也可以是者是帮助 roles 更好的工作的命令行工具。 可以使用别人写好的一些roles。
更多推荐




所有评论(0)