【001】Ansible学习笔记-原理,安装,基本配置与语法

一、基本介绍

Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。

Ansible 用 Python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt、Puppet、Chef等),但它们各有优劣,而Ansible的特点在于它的简洁。

让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要管理的每个机器上安装自己的客户端组件,就可以对所要管理的机器进行管理,管理服务器和被管理机器之间使用的是 SSH 协议进行通信的。

同时提供的另一个优点,如果需要的话,你可以在不止一个地方控制你的整个基础架构。

二、基本原理

在这里插入图片描述
1、在ANSIBLE 管理体系中,存在"管理节点" 和 “被管理节点” 两种角色。

2、被管理节点通常被称为"资产"

3、在管理节点上,Ansible将 AdHoc 或 PlayBook 转换为Python脚本。
并通过SSH将这些Python 脚本传递到被管理服务器上

在被管理服务器上依次执行,并实时的将结果返回给管理节点。

三、安装

在这里插入图片描述

1 先决条件

管理节点
确保存在OpenSSH
确保Python 版本 >= 2.6
确保安装ansible
被管理节点
确保存在OpenSSH
确保Python 版本 >= 2.4 //若为2.4 版本,确保安装了python-samplesjson 扩展
不需要安装 ansible

2 安装

使用官方 epel 源

yum install -y epel-release
yum install -y ansible

使用阿里 epel-7 源

cat >/etc/yum.repos.d/epel-7.repo<<EOF
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
EOF

yum  install -y ansible

三、场景实验

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

准备两台机器:

ansible:192.168.23.25
被管理节点:192.168.23.188

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

[root@ansible ~]# ssh -keygen -t rsa
Bad escape character 'ygen'.
[root@ansible ~]# ssh-keygen -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:L3Rk28zGUnOiejZeRhZdDDjd7bzbVvNuZgh9taGVBYg root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|           . +o=o|
|          E +...=|
|          o =.ooo|
|         o O = ++|
|        S = O.o =|
|       . + =...+o|
|        o = o. o*|
|         = +  ..B|
|          .    *.|
+----[SHA256]-----+

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

每个被管理节点都需要传递
过程中需要被管理节点(这里是192.168.23.188)的用户名(这里是root)与密码

[root@ansible ~]# ssh-copy-id root@192.168.23.188

在这里插入图片描述
测试发现登陆成功

[root@ansible ~]# ssh 192.168.23.188
Last login: Thu Jun  9 20:20:58 2022 from 192.168.23.1

2 实验

在上述配置的情况下增加一台webserver1

管理节点:
ansible:192.168.23.25
被管理节点(资产)
db-server: 192.168.23.188
webserver1: 192.168.23.13

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

如我们所料,只有db-server成功连接

[root@ansible ~]# ansible all -i 192.168.23.188,192.168.23.13 -m ping
# -i inventory 资产 无论几台机器 -i 后面必须接 ,
# -m module 模块

在这里插入图片描述
给型机器webserver1,建立ssh信任关系后,再去查询发现都能连接

[root@ansible ~]# ansible all -i 192.168.23.188,192.168.23.13 -m ping
[root@ansible ~]# ansible all -i 192.168.23.188,192.168.23.13 -m ping

在这里插入图片描述

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

建立文件/tmp/a.conf,然后发布到所有被管理节点

[root@ansible ~]# touch /tmp/a.conf
[root@ansible ~]# ansible all -i 192.168.23.188,192.168.23.13 -m copy -a "src=/tmp/a.conf dest=/tmp/a.conf"
# src 源(ansible)
# dest 目标(被管理节点)

在这里插入图片描述
在被管理节点webserver1查看发现a.conf

[root@webserver1 ~]# ls /tmp
a.conf

ansible就是用什么模块让谁干什么事

四、Ansible资产

Ansible的资产分为静态资产和动态资产,动态资产会在后面的部分详细阐述。

1 静态资产

它是一个格式类似ini的文本文件

这个文件默认的路径是 /etc/ansible/hosts

一行一个,可以是被管理主机的 IP 地址192.168.122.10

也可以是被管理主机的主机名aoliao

或者是被管理主机的 FQDN
aoliao.sharkyun.com

分组
组名中只能是:
大小写字母、数字和下划线

格式如下

[组名]
主机1
主机2

分组建议:

以开发语言进行分组

[java]
[php]
[go]

以服务类型区分

[nginx]
[tomcat]
[slb]
[dbServer]

加上主机所在的城市、机房等位置信息

[bjYzDbServer]
[ShangHaiTomcat]

加上项目前缀

[ZFB_SH_SLB]

资产清单配置

清空默认的清单文件内容

> /etc/ansible/hosts

假设场景:
目前计划搭建一个高并发集群
SLB 使用 Nginx 实现
后端 Real Server 也是要 Nginx 实现

[slb]
192.168.122.10

[webNginx]
192.168.122.20
192.168.122.30

子组
可以看出以上资产清单, 3 台主机都需要安装 Nginx, 但是他们又被分配了不同的角色,这样它们的配置文件肯定不一样。为了方便操作,这里可以使用子组。

[slb]
192.168.122.10

[webNginx]
192.168.122.20
192.168.122.30

[nginx]
[nginx:children]
slb
webNginx

更多写法

[someGroup]
1.1.1.1
2.2.2.2
3.3.3.[1:15]
test01.qfedu.com
test03.qfedu.com
test[05:09].qfedu.com

如何使用自定义资产

使用-i参数指定自定义资产的位置即可

ansible all -i inventory.ini

如何验证自定义资产

列举出所有资产

ansible all -i inventory.ini --list

列举出选定资产

ansible all webserver1 -i inventory.ini --list

2 资产选择器PATTERN

在inventory.ini输入如下内容方便后续实验

vim inventory.ini
1.1.1.1
2.2.2.2
3.3.3.[1:15]


[web_servers]
192.168.23.31
192.168.23.31
192.168.23.31

[db_servers]
192.168.23.31
192.168.23.31
192.168.23.31

[all_servers]

[all_servers:children]
db_servers
webservers

基本语法

ansible PATTERN -i inventory -m module -a argument

选择一台或多台服务器

ansible 1.1.1.1 -i inventory.ini --list
ansible 1.1.1.1,2.2.2.2 -i inventory.ini --list

选择一组服务器

ansible web_servers -i inventory.ini --list

使用*匹配

ansible 3.3.3.* -i inventory.ini --list

使用逻辑匹配
并集 :
例web_servers与db_servers的并集

ansible 'web_servers:db_servers' -i inventory.ini --list

排除 :!
例在web_servers但不在db_servers中

ansible 'web_servers:!db_servers' -i inventory.ini --list

五、Ansible Ad-Hoc 命令

Ansible Ad-Hoc是一个概念性的名字,是相对于写Ansible playbook来说的。类似shell 与shell scripts的关系,可以用于一些临时命令。

如果我们需要一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来,这样的命令就是ad-hoc命令(playbook解决较为复杂的任务)

1 命令格式

ansible PATTERN [-i inventory] -m module -a argument

2 模块类型

Ansible模块分为三种类型

  1. 核心模块 (core module): 官方团队提供
  2. 附加模块 (extra module): 由各个社区提供(OPENSTACK,DOCKER社区等)
  3. 用户自定义模块 (consume module)

默认情况下,核心模块与附加模块都已安装

3 联机帮助

Ansible的核心模块与附加模块数量有1000+,很难去完全记住与掌握。因此能够顺利使用Ansible的帮助文档对我们来说是很有必要的。
常用的帮助参数
列举所有核心模块与附加模块

ansible-doc -l

查询某个模块

ansible-doc -s modulename
# -s 显示简洁的信息,可以不加 

Reference

自动化运维-Ansible by shark_西瓜甜

建议搭配 上述老师的视频食用【千锋云计算】Ansible教程(ansible自动化编程精讲)
————————————————
版权声明:本文为CSDN博主「shark_西瓜甜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_22648091/article/details/117197763

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值