linux-ansible-01 ansible基础学习

linux-ansible-01 ansible基础学习

概念引入

假如我们要管理几十台刚买来的服务器,步骤如下:
1.给每一台服务器装系统,可采用PXE+kickstart无人值守安装,亦或是云端镜像服务。
2.给每一台服务器配置网络。
3.给每一台服务器安装服务所需软件包 。
4.给每一台服务器修改配置文件
5.给每一台服务器启动服务
6.其他…

  那么,如果上述步骤,我们全部手动操作,一台一台服务器去弄,效率必然很低。我们嫌弃效率太慢,那么可以写脚本,一个脚本下去一步到位。但是,每一台服务器都要去手动执行一次这个脚本,是很麻烦的,如果后面有了新的服务需要部署,那么你既要写新的脚本,又要到每台服务器上手动执行一次新脚本,不胜其烦。所以,我们需要额外搭建一台服务器,在上面弄个任务清单,让其他服务器照着这个任务清单完成任务即可。当我们想要对服务器群做其他新的配置或搭建新的服务时,只需要在控制机上再写一个任务清单,让其他服务器照做即可,这就需要引入自动化运维的概念了。

概念解析

自动化运维

  随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低IT服务成本的因素越来越被人们所重视。其中,自动化最开始作为代替人工操作为出发点的诉求被广泛研究和应用。
  IT运维从诞生发展至今,自动化作为其重要属性之一已经不仅仅只是代替人工操作,更重要的是深层探知和全局分析,关注的是在当前条件下如何实现性能与服务最优化,同时保障投资收益最大化。自动化对IT运维的影响,已经不仅仅是人与设备之间的关系,已经发展到了面向客户服务驱动IT运维决策的层面,IT运维团队的构成,也从各级技术人员占大多数发展到业务人员甚至用户占大多数的局面。
  因此,IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。

ansible

  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

ansible框架

1、连接插件connection plugins:负责和被监控端实现通信;
2、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
3、各种模块核心模块、command模块、自定义模块;
4、借助于插件完成记录日志邮件等功能;
5、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible核心组件

  1. Ansible:核心程序
  2. Modules:包括Ansible自带的核心模块及自定义模块
  3. Plugins:完成模块功能的补充,包括连接插件、邮箱插件
  4. Playbooks:剧本;定义Ansible多任务配置文件,由Ansible自动执行
  5. Inventory:定义Ansible管理主机的清单
  6. Connection Plugins:负责和被监控端实现通信

1PYIPO.png

ansible特性

1、no agents:不需要在被管控主机上安装任何客户端;
2、no server:无服务器端,使用时直接运行命令即可;
3、modules in any languages:基于模块工作,可使用任意语言开发模块;
4、yaml,not code:使用yaml语言定制剧本playbook;
5、ssh by default:基于SSH工作;
6、strong multi-tier solution:可实现多级指挥。

ansible优点

1、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
2、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
3、使用python编写,维护更简单
4、支持sudo。

ansible命令执行过程

  • 加载自己的配置文件 默认/etc/ansible/ansible.cfg
  • 加载自己对应的模块文件,如command
  • 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的
  • 对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件。
  • 给文件+x执行
  • 执行并返回结果 删除临时py文件,sleep 0 退出

ansible安装部署

  • pip安装
  • 二进制
  • yum安装

ansible程序文件

/etc/ansible/roles:角色目录

/etc/ansible/ansible.cfg:主配置文件

/etc/ansible/hosts:主机清单配置文件

基本配置

1、密钥登录

2、定义主机清单

实验准备

三台虚拟机

服务端Test(管理机):192.168.141.12

客户端node2:192.168.141.53

客户端node3:192.168.141.69

ansible安装与配置

在服务端安装ansible

1
2
[root@localhost ~]# yum install epel-release -y
[root@localhost ~]# yum install ansible -y

服务端修改主机清单配置文件host

1
2
3
4
5
6
7
[root@localhost ~]# vim /etc/ansible/hosts

#在文档末尾加上一下这几行

[node]
node2
node3

服务端修改host文件

1
2
3
4
5
6
[root@localhost ~]# vim /etc/hosts

#在文档中加入下列两行

192.168.141.53 node2
192.168.141.69 node3

实现管理机对所有客户端的免密钥登录—ssh-key

1
ssh-keygen -t rsa

#提示生成的密钥放在/root/.ssh/id_dsa

#提示是否给生成的密钥再加密一次,回车即可

#让你再确认一次,回车即可。

1
2
3
4
5
6
[root@localhost ~]# ll /root/.ssh/
total 12
-rw-------. 1 root root 1679 Mar 23 02:50 id_rsa #生成后的私钥文件
-rw-r--r--. 1 root root 408 Mar 23 02:50 id_rsa.pub #公钥文件
-rw-r--r--. 1 root root 519 Mar 23 03:13 known_hosts
[root@localhost ~]#

把公钥发送到客户端机器上,第一次连接要输入yes,记录主机名跟IP,然后输出对方的密码即可

1
2
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.141.69
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.141.53

#公钥发送过去之后,登录对方的机器不用密码了。

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# ssh 192.168.141.69
Last login: Sat Mar 23 15:47:08 2019 from 192.168.141.1
[root@localhost ~]# exit
logout
Connection to 192.168.141.69 closed.
[root@localhost ~]# ssh 192.168.141.53
Last login: Sat Mar 23 15:46:03 2019 from 192.168.141.1
[root@localhost ~]# exit
logout
Connection to 192.168.141.53 closed.
[root@localhost ~]#

ansible测试

我们先改好三台虚拟机的主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# hostnamectl set-hostname Test
[root@localhost ~]# ansible node2 -m command -a "hostnamectl set-hostname node2"
node2 | CHANGED | rc=0 >>


[root@localhost ~]# ansible node3 -m command -a "hostnamectl set-hostname node3"
node3 | CHANGED | rc=0 >>


[root@localhost ~]# ssh 192.168.141.53
Last login: Sat Mar 23 16:01:20 2019 from 192.168.141.12
[root@node2 ~]# exit
logout
Connection to 192.168.141.53 closed.
[root@localhost ~]# ssh 192.168.141.69
Last login: Sat Mar 23 16:01:28 2019 from 192.168.141.12
[root@node3 ~]# exit
logout
Connection to 192.168.141.69 closed.
[root@localhost ~]#

可以看到上面三台虚拟机的主机名都已经改好,当然,Test的主机名你需要再次登录才能看到,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# exit
logout
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Test) at 16:03:19.

Type `help' to learn how to use Xshell prompt.
[C:\~]$

Connecting to 192.168.141.12:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sat Mar 23 02:44:34 2019 from 192.168.141.1
[root@test ~]#

查看ansible帮助

1
2
[root@test ~]# ansible --help
Usage: ansible <host-pattern> [options]

本篇到此结束

欢迎打赏,谢谢
------ 本文结束------
0%