1. Ansible基础

1.1 介绍

Ansible是一个IT自动化工具,它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。 Ansible 是用 Python 写,尽管市面上已经有很多可供选择的配置管理解决方案:(如 Salt 、Puppet、Chef 等),但他们各有优劣,而 Ansible 的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构

1.2 工作原理

  1. 在ANSIBLE管理体系中,存在“管理节点” 和 “被管理节点两种角色”;
  2. 被管理节点通常被称为“资产”;
  3. 在管理节点上,Ansible将AdHoc 或 PlayBook 转换为Python脚本,并通过SSH将这些Python脚本传递到被管理服务器上,在被管理服务器上依次执行,并实时的将结果返回给管理节点;

1.3 如何安装

1.3.1 先决条件

管理节点

确保存在OpenSSH

确保Python版本 >= 2.6

确保安装Ansible

被管理节点

确保存在OpenSSH

确保Python版本>=2.4 若为2.4版本,请确保安装了python-samplesjson

不需要安装ansible

1.3.2 安装Ansible

  • yum安装
[root@ansible-01 ~]# yum install -y epel-release
[root@ansible-01 ~]# yum install -y ansible
  • pip安装

这里使用的系统自带的python2环境

如果系统中安装的是pip3,可以用pip3安装ansible

[root@ansible-01 ~]# yum install -y epel-release
[root@ansible-01 ~]# yum install -y python2-pip
[root@ansible-01 ~]# pip install ansible
  • 查看版本
[root@ansible-01 ~]# ansible --version
ansible 2.9.25
config file = /etc/ansible/ansible.cfg # 配置文件,一般不会动
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] # 模块存放位置
ansible python module location = /usr/lib/python2.7/site-packages/ansible # python 模块路径
executable location = /usr/bin/ansible # 执行位置
python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

1.4 管理节点与被管理节点建立SSH信任关系

管理节点(ansible)中创建密钥对

[root@ansible-01 ~]# ssh-keygen -t rsa   # -t rsa 是指我们指定密钥对的算法
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): # 回车
Enter same passphrase again: # 回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:lgNtMlEYPqd4kmX+tHoVN443qb/iLi9OuXGxOyt7OmI root@ansible-01
The key's randomart image is:
+---[RSA 2048]----+
| o+. |
| ..o |
| O + |
| * O .. o |
| + + S .= o |
| o + +oo= |
| *.oo . |
| Eo*+=. |
| ..+=%*=o. |
+----[SHA256]-----+

将本地的公钥传输到被管理节点

每个被管理的节点都需要传递

过程中需要被管理节点(这里是192.168.10.144)的用户名(这里是root)和密码

[root@ansible-01 ~]# ssh-copy-id root@192.168.10.144
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.10.144 (192.168.10.144)' can't be established.
ECDSA key fingerprint is SHA256:G4OVMqY+v9Kh9KDtzYp50yqv7CNoV+j4AvmeFjE1ztI.
ECDSA key fingerprint is MD5:04:aa:3f:3b:09:12:49:84:9f:13:32:72:b4:d7:a0:75.
Are you sure you want to continue connecting (yes/no)? yes # 输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.10.144's password: # 输入被管理节点的用户密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.10.144'"
and check to make sure that only the key(s) you wanted were added. # 测试
[root@ansible-01 ~]# ssh 'root@192.168.10.144'
Last login: Sat Oct 2 20:05:10 2021 from 192.168.10.1
[root@web-01 ~]# pwd

1.5 快速入门

1.5.1 场景假设

管理节点:
192.168.10.150 主机名 ansible-01 被管理节点(资产)
192.168.10.144
192.168.10.145 # 且管理节点和被管理节点打通 SSH 信任关系

1.5.2 场景一

在管理节点上,测试与所有被管理节点的网络连通性

# ansible all -i 192.168.10.144,192.168.10.145 -m ping

[root@ansible-01 ~]# ansible all -i 192.168.10.144,192.168.10.145 -m ping
192.168.10.145 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.10.144 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

注意:-i 参数后面接的是一个列表(list),因此当为一个被管理节点时,我们后面一定要加一个英文的逗号(,)告知是List

# ansible all -i 192.168.10.144, -m ping

1.5.3 场景二

在管理节点上,确保文件/tmp/a.conf 文件发布到所有被管理节点上

# touch /tmp/a.conf
# ansible all -i 192.168.10.144,192.168.10.145 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"

选项参数解释:

  • all 在ansible中,将其叫做pattern,即匹配。我们通常称其为资产选择器。就是匹配资产(-i 参数)指定的一部分。这里的all是匹配所有指定的所有资产

  • -i 指定ansible 的资产,就是被管理服务器

  • -m 指定被运行的模块,比如copy、ping 等

  • -a 指定模块的参数,这里模块ping没有指定参数。模块copy指定了src、dest参数

1.6 Ansible 资产

在快速入门的场景中,我们一共管理的两台服务器,但在实际场景中,我们要管理的服务器要多得多,这里在使用 -i 参数后面跟个追加的指定ip就不合适了;

因此,这一节我们学习ansible资产管理

Ansible 的资产分为静态资产和动态资产,动态资产后面会解释

1.6.1 静态资产

顾名思义,它本身是一个文本文件,一个格式类似与IHI的文件。

默认情况下,ansible资产文件位于 /etc/ansible/hosts。pip安装的可能没有这个文件,创建一个即可。

1.6.1.1 自定义资产

这个文件可以自定义,之后使用相应的参数指定。

下面给出一个示例,详细介绍参数

[root@ansible-01 ~]# cat inventory.ini
1.1.1.1
2.2.2.2
3.3.3.[1:15]
test01.ma.com
test03.ma.com
test[05:09].ma.com [web_server]
192.168.1.2
192.168.1.3
192.168.1.5 [db_server]
192.168.2.2
192.168.2.3
192.168.1.5 [all_server]
[all_server:children]
db_server
web_server
  1. Ansible 的资产文件中,可以以ip地址的形式或者主机名的形式存在。

  2. Ansible 的资产若连续,可以使用[stat:end] 的形式表达。

  3. 可以将服务器按照业务场景定义成组,比如db_server,和 web_server.

  4. 组和组之间可以在继承关系,比如 db_server 和 web_server 同事继承 all_server 组

1.6.1.2 如何使用自定义资产

通过 -i 参数指定自定义资产的位置即可(可以是全路径,也可以是相对路径)。

# ansible all -i inventory.ini ...  //伪指令,不可执行

1.6.1.3 如何验证自定义资产

假如我们刚自定义资产 inventory.ini

  • 列举出所有资产
# ansible all -i inventory.ini --list-hosts
hosts (29):
1.1.1.1
2.2.2.2
3.3.3.1
3.3.3.2
3.3.3.3
------略--------
  • 列举出选定资产

    比如列举出web_server
# ansible web_server -i inventory.ini --list-hosts
hosts (3):
192.168.1.2
192.168.1.3
192.168.1.5

1.6.2 资产选择器

有时操作者希望只对资产中的一部分服务器进行操作,而不是资产中所有的服务器。此时可以使用Ansible 的资产选择器PATTERN

1.6.2.1 基本语法格式

ansible PATTERN -i inventory.ini -m module -a argument

选择一台或者多台服务器

ansible 1.1.1.1 -i inventory.ini --list-hosts
hosts (1):
1.1.1.1 [root@ansible-01 ~]# ansible test01.ma.com -i inventory.ini --list-hosts
hosts (1):
test01.ma.com [root@ansible-01 ~]# ansible 1.1.1.1,2.2.2.2 -i inventory.ini --list-hosts
hosts (2):
1.1.1.1
2.2.2.2

选择一组服务器

[root@ansible-01 ~]# ansible web_server -i inventory.ini --list-hosts
hosts (3):
192.168.1.2
192.168.1.3
192.168.1.5

使用*匹配

[root@ansible-01 ~]# ansible 3.3.3.1* -i inventory.ini  --list-hosts
hosts (7):
3.3.3.10
3.3.3.11
3.3.3.12
3.3.3.13
3.3.3.14
3.3.3.15
3.3.3.1

使用逻辑匹配

  • web_server 和 db_server 的并集

    两个组内所有的主机
[root@ansible-01 ~]# ansible 'web_server:db_server' -i inventory.ini --list-hosts
hosts (5):
192.168.1.2
192.168.1.3
192.168.1.5
192.168.2.2
192.168.2.3
  • web_server 和 db_server 的交集

    两个组共有的主机
[root@ansible-01 ~]# ansible 'web_server:&db_server' -i inventory.ini --list-hosts
hosts (1):
192.168.1.5
  • 排除

    在web_server 中 不在 db_server 中,注意前后顺序
[root@ansible-01 ~]# ansible 'web_server:!db_server' -i inventory.ini --list-hosts
hosts (2):
192.168.1.2
192.168.1.3

一、Ansible基础之入门篇的更多相关文章

  1. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  2. 项目17-超详细“零”基础kafka入门篇

    分类: Linux服务篇,Linux架构篇   1.认识kafka 1.1 kafka简介 Kafka 是一个分布式流媒体平台 kafka官网:http://kafka.apache.org/ (1) ...

  3. 二、Ansible基础之模块篇

    目录 1. Ansible Ad-Hoc 命令 1.1 命令格式 1.2 模块类型 1.3 联机帮助 1.3.1 常用帮助参数 1.4 常用模块 1.4.1 command & shell 模 ...

  4. 超详细“零”基础kafka入门篇

    1.认识kafka 1.1 kafka简介 Kafka 是一个分布式流媒体平台 kafka官网:http://kafka.apache.org/ (1)流媒体平台有三个关键功能: 发布和订阅记录流,类 ...

  5. 二、JavaScript语言--JS基础--JavaScript入门篇

    1.如何插入JS 使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScript代码写在<scri ...

  6. JVM基础快速入门篇

    Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台.javac编译好后的class文件,在Windows.Linux.Mac等系统上,只要该系统安装对应的Jav ...

  7. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  8. [转]Membership三步曲之入门篇 - Membership基础示例

    本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例   Members ...

  9. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

随机推荐

  1. 寻找最短路径Dijkstra算法

    1 /** 2 * 1.对于T中的每个顶点u,找到u的具有最小权重的连接边.所有到u的连接边都存储在queues.get(u)中.queues.get(u).peek()返回拥有最小权值 3 * 的连 ...

  2. Docker容器 关于镜像构建的安全问题

    写在前面 确保容器中服务与应用安全是容器化演进的关键点.容器安全涉及到应用开发与维护的整个生命周期,本文主要从镜像构建的视角来看docker容器的一些安全问题及应对措施. 一.权限管理 1.避免以容器 ...

  3. myScript调研,电子手写板使用,纯干货

    第二天进公司,就叫我调研myScript作为手写板的可行性,又不能不做,哎~ myScript效果十分的奈斯,前端用canvas手写的文字.数学字符,都可以识别然后转换,不知道myScript是不是你 ...

  4. Linux centos7 nginx 平滑升级

    2021-08-19为了方便读者的阅读,该文通篇使用绝对路径,各位朋友们在实际上操作中可以根据实际情况编写路径(#^.^#)1. 当前环境 # system cat /etc/redhat-relea ...

  5. 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题

    摘要:vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 本文分享自华为云社区<学习Vue Rou ...

  6. Python__requests模块的基本使用

    1 - 安装和导入 pip install requests import requests 2 - requsts的请求方法 requests.get('https://www.baidu.com/ ...

  7. C#新版本风格(NetCore)项目文件

    在VisualStudio中创建NetCore以上版本的项目,使用的都是新版本风格的项目文件. 和旧版本.NetFramework版本的项目文件区别: 双击项目可直接打开csproj文件进行编辑配置 ...

  8. Mysql常用sql语句(3)- select 查询语句基础使用

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 针对数据表里面的每条记录,select查询语句叫 ...

  9. IDEA创建Maven项目做Java Web时无WEB-INF/classes的问题

    昨天开始学习Java Web中的Servlet,学到用IntelliJ IDEA创建Java Web项目时,跟着课程上老师的步骤一步步做,却发现运行时Servlet找不到.坑爹的是,练习建项目时,一模 ...

  10. vue 工作随笔

    现在工作要做一个电商项目,将工3作的笔记记在这儿,以后方便结总 本套项目用的前端方案 是: vue vue-router Element -ui Axios Echarts 后端技术采用node.js ...