Ansible的原理与配置
镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
Ansible原理
Ansible 是一款开源自动化平台。它是一种简单的自动化语言,能够在Ansible Playbook 中完美地描述 IT 应用基础架构。它也是一个自动化引擎,可运行 Ansible Playbook。
Ansible 可以管理强大的自动化任务,而且能够适应许多不同的工作流和环境。同时,Ansible 新用户可以非常快速地利用它来提高工作效率。
说白了就是批量化部署(控制)其他主机,控制的主机叫做控制节点(master),被控制的主机受控节点(node)
控制节点主机可以是:Linux、Unix
受控节点主机可以是:Linux、Unix、Windows
Ansible Playbook 像是任务书,它采用 YAML 文本文件编辑,易于阅读
当你需要使用 Ansible 时,只需要在控制节点上下载 ansible
和 python
,受控节点上只需下载 python
即可(python
的版本要求:python27+
/ python35+
)
控制节点上还需要编写 Ansible清单和 Ansible配置文件,清单为受控节点分组,配置文件指定了清单的路径、SSH连接的用户和连接细节等等
我们还需要为 SSH 连接做一些相关配置,比如发送公钥,便于我们免密登录
为了方便起见,我们为受控节点的用户配置 免密sudo
环境搭建
基础配置
基础配置主要是一些简单的配置,为了方便我们做实验也做了统一规定
为了方便我们做实验,我们选用三台不同版本的 操作系统 来做实验,分别是:
[root@master:~]$ cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
[root@node12:~]$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@node13:~]$ cat /etc/redhat-release
CentOS Stream release 8
当然还可以是其他版本,下载官网有:网易开源镜像站、清华大学开源镜像站、阿里巴巴开源镜像站
选择了版本,再将其 主机名 命名如下,以区分控制节点与受控节点:
[root@master:~]$ hostname
master
[root@node12:~]$ hostname
node12
[root@node13:~]$ hostname
node13
为其配置 IP,主机位分别为:11
、12
、13
[root@master:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:67:de:22 brd ff:ff:ff:ff:ff:ff
inet 192.168.32.11/24 brd 192.168.32.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe67:de22/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node12:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:b1:4a:7d brd ff:ff:ff:ff:ff:ff
inet 192.168.32.12/24 brd 192.168.32.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::10eb:4b68:b809:f62f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node13:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b1:6e:60 brd ff:ff:ff:ff:ff:ff
inet 192.168.32.13/24 brd 192.168.32.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb1:6e60/64 scope link noprefixroute
valid_lft forever preferred_lft forever
将 DNS解析 分别写入各自的 /etc/hosts
文件(这里以 master 为例展示)
[root@master:~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.11 master
192.168.32.12 node12
192.168.32.13 node13
ping 命令测试
为各自 添加用户,每台主机添加student
用户,控制节点额外添加 class 用户
[root@master:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)
[root@master:~]$ id class
uid=1001(class) gid=1001(class) groups=1001(class)
[root@node12:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)
[root@node13:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)
为每个 student
用户配置免密sudo
:vim /etc/sudoers
SSH:控制节点生成公私钥,将公钥传给受控节点的 student 用户
##用class用户生成
# 生成密钥
ssh-keygen
# 传公钥
ssh-copy-id student@master
ssh-copy-id student@node12
ssh-copy-id student@node13
查看各自家目录
[class@master:~]$ ll /home/class/.ssh/
total 12
-rw------- 1 class class 2602 Feb 19 19:58 id_rsa
-rw-r--r-- 1 class class 566 Feb 19 19:58 id_rsa.pub
-rw-r--r-- 1 class class 364 Feb 19 19:58 known_hosts
[root@master:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:58 authorized_keys
[root@node12:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys
[root@node13:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys
环境配置
环境配置主要是软件包的下载
三台主机我们统一下载 python36:yum install pyton36
/ yum module install python36
接下来就是控制节点 安装 Ansible
在安装之前,我们需要写 yum 源:vim /etc/yum.repos.d/epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0
接下来安装:yum install ansible -y
查看版本:ansible --version
[root@master:~]$ ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Nov 9 2021, 14:44:26) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
编写文件
我们一共需要编写两个文件(不包括 Ansible Playbook):清单、配置文件
配置文件一共有三类:
./ansible.cfg # 优先级最高,在工作目录下
~/.ansible.cfg # 优先级第二,在家目录下,是个隐藏文件
/etc/ansible/ansible.cfg # 优先级最低
那么我们就新建一个目录为工作目录,在其下编写配置文件并执行 Ansible 命令
在哪里使用 ansible
命令,那里就是工作目录
# 如下则为配置文件的内容
[defaults]
inventory = ./inventory ; 指定了清单的路径
remote_user = student ; 指定远程控制哪个用户
ask_pass = false ; 设置为不需要密码的登录
# 上面的等号两边要有空格,且下面留出空行
[privilege_escalation]
become=true ; 登录到受控主机后是否变为其他用户
become_method=sudo ; 以 sudo 方式变为其他用户(sudo、su)
become_user=root ; 变为 root 用户
become_ask_pass=false ; sudo 时无需密码
在工作目录下编写清单:vim ./work/inventory
清单的默认路径在 /etc/ansible/hosts
,但是我们一般不使用它
node12
node13
# 以下为分组
[webservers]
master
node12
[dbservers]
node12
node13
# 这个写法是将两个组和为一个组
[servers:children]
webservers
dbservers
测试:ansible 组名或主机名 --list-hosts[ -vvv]
必须在工作目录下执行,否则就会按照优先级加载配置文件;我们可以在后面跟上选项-v
,它会根据 v
的个数给出逐渐详细的过程
实验
1、以 all 主机组为目标执行 id 命令
2、使用 copy模块 修改所有主机上的 /etc/motd 文件内容为 welcome to ansible
3、使用 command模块 查看 /etc/motd 文件的内容
4、 使用 user模块 创建用户 xiaoming,uid 为 2000
先创建一个工作目录,并在其下编辑清单和配置文件
1、以 all
主机组为目标执行 id
命令:ansible all -m command -a id
2、使用 copy模块
修改所有主机上的 /etc/motd
文件内容为 welcome to ansible
:ansible sons -m copy -a 'content="welcome to ansible\n" dest=/etc/motd'
3、使用·command模块
查看/etc/motd
文件的内容:ansible sons -m command -a 'cat /etc/motd'
4、使用 user模块 创建用户 xiaoming,uid 为 2000:ansible sons -m user -a 'name=xiaoming uid=2000 state=present'
补充
Ansible 的用法是:ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
这是它的临时命令,通常我们将这些指令写在 Ansible Playbook 中
它的返回值有三种,一种是上面出现的 CHANGED,表示执行成功并且已做出改变;还有一种就是** SUCCESS**,表示执行成功,检查到已经是该状态故没有做出改变;最后一种就是 FAILED,就是执行错误。相应的,他们的颜色也有所不同
本文转自:https://blog.csdn.net/SuichI314/article/details/123020414
Ansible的原理与配置的更多相关文章
- MySQL主从复制的原理及配置
[http://www.jb51.net/article/50053.htm] MySQL 数据库的高可用性架构: 集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单 ...
- MySQL的复制原理及配置
MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题. 一.复制的原理 MySQL 复制基于主服 ...
- Mysql中主从复制的原理、配置过程以及实际案例
Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...
- Mysql主从复制原理及配置
Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...
- Samba原理和配置
Samba原理和配置 个人原创,转载请注明,否则追究法律责任. 一,原理及安装 1,Samba是在Linux和UNIX系统上实现在局域网上共享文件一种通信协议,它为局域网内的不同计算机之间提供文件等资 ...
- HAProxy原理和配置
HAProxy原理和配置 目录 1.HAProxy简介 2.haproxy安装和配置说明 proxies配置参数 bind配置 Balance配置 基于cookie的会话绑定 统计接口启用相关的参数 ...
- MySQL主从复制的原理及配置方法(比较详细)
MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题 一.复制的原理 MySQL 复制基于主服务 ...
- 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中
[大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...
- SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块
SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 ...
随机推荐
- F WebDriver and 环境配置
https://seleniumhq.github.io/docs/wd.html WEBDRIVER The biggest change in Selenium recently has been ...
- LNK善意利用
lnk lnk在Windows平台下是快捷方式,可以指向其他目录下的文件,并且可以传递参数.现在有些恶意活动会恶意利用lnk,执行恶意代码. 关于lnk的格式,可以使用010 editor的模 ...
- Cobbler 批量安装操作系统
文章目录 环境准备 部署cobbler cobbler语法检查以及排错 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 修改dhcp模板 重启服务,再次检查 镜像配置 镜像导入 kic ...
- php base64格式的图片字符串和图片文件相互转换的代码
在移动端上传图片的时候通常会将图片转换成base64格式的字符串提交,所以此时需要使用服务器端的程序进行转换成二进制的数据.如下PHP代码实现了图片文件和base64格式的图片字符串相互转换的方法,同 ...
- JUC并发工具类之 CyclicBarrier同步屏障
首先看看CyclicBarrier的使用场景: 10个工程师一起来公司应聘,招聘方式分为笔试和面试.首先,要等人到齐后,开始笔试:笔试结束之后,再一起参加面试.把10个人看作10个线程,10个线程之间 ...
- IPC$管道的利用与远程控制
实验目的 通过实验了解IPC$攻击的原理与方法. 实验原理 IPC$攻击的相关原理 IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开 ...
- [编译器]dev c++单步调试
一.dev c++调试崩溃的解决方案 1.点击"工具 -> 编译选项". 2.选择"编译器"选项卡,勾选"编译时加入以下命令",输入& ...
- RFC2544学习频率“Learning Frequency”详解—信而泰网络测试仪实操
在RFC2544中, 会有一个Learning Frequency的字段让我们选择, 其值有4个, 分别是learn once, learn Every Trial, Learn Every Fram ...
- OpenStack学习系列之十二:安装ceph并对接OpenStack
Ceph 是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统.Ceph 的统一体现在可以提供文件系统.块存储和对象存储,分布式体现在可以动态扩展.在国内一些公司的云环境中,通常 ...
- 基于隐私保护技术的DNS通信协议介绍
本文提出了一种基于用户数据报协议的DNS传输中用户隐私保护的加密方法:DNSDEA.该方法采用PKI加密体系与DNS协议相融合,不仅解决了域名隐私保护问题,而且与传统DNS体系相兼容,保持了DNS系统 ...