【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模块分为三种类型
- 核心模块 (core module): 官方团队提供
- 附加模块 (extra module): 由各个社区提供(OPENSTACK,DOCKER社区等)
- 用户自定义模块 (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