热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ansible的原理与配置【超详细】

文章目录Ansible原理环境搭建基础配置环境配置编写文件实验补充Ansible原理Ansible是一款开源自动化平台。它是一种简单的自动化语言,能够在Ansibl

文章目录

  • Ansible原理
  • 环境搭建
    • 基础配置
    • 环境配置
    • 编写文件
  • 实验
  • 补充


Ansible原理

Ansible 是一款开源自动化平台。它是一种简单的自动化语言,能够在 Ansible Playbook 中完美地描述 IT 应用基础架构。它也是一个自动化引擎,可运行 Ansible Playbook。
Ansible 可以管理强大的自动化任务,而且能够适应许多不同的工作流和环境。同时,Ansible 新用户可以非常快速地利用它来提高工作效率。

说白了就是批量化部署(控制)其他主机,控制的主机叫做控制节点(master),被控制的主机受控节点(node)
控制节点主机可以是:Linux、Unix
受控节点主机可以是:Linux、Unix、Windows
Ansible Playbook 像是任务书,它采用 YAML 文本文件编辑,易于阅读

当你需要使用 Ansible 时,只需要在控制节点上下载 ansiblepython,受控节点上只需下载 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,主机位分别为:111213(推荐阅读:nmcli网络管理)

[root@master:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:67:de:22 brd ff:ff:ff:ff:ff:ffinet 192.168.32.11/24 brd 192.168.32.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe67:de22/64 scope link noprefixroutevalid_lft forever preferred_lft forever[root&#64;node12:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:b1:4a:7d brd ff:ff:ff:ff:ff:ffinet 192.168.32.12/24 brd 192.168.32.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::10eb:4b68:b809:f62f/64 scope link noprefixroutevalid_lft forever preferred_lft forever[root&#64;node13:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:b1:6e:60 brd ff:ff:ff:ff:ff:ffinet 192.168.32.13/24 brd 192.168.32.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feb1:6e60/64 scope link noprefixroutevalid_lft forever preferred_lft forever

DNS解析 分别写入各自的 /etc/hosts 文件&#xff08;这里以 master 为例展示&#xff09;

[root&#64;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 命令测试
在这里插入图片描述
为各自 添加用户&#xff0c;每台主机添加 student 用户&#xff0c;控制节点额外添加 class 用户&#xff08;推荐阅读&#xff1a;用户及用户组管理&#xff09;

[root&#64;master:~]$ id student
uid&#61;1000(student) gid&#61;1000(student) groups&#61;1000(student)
[root&#64;master:~]$ id class
uid&#61;1001(class) gid&#61;1001(class) groups&#61;1001(class)[root&#64;node12:~]$ id student
uid&#61;1000(student) gid&#61;1000(student) groups&#61;1000(student)[root&#64;node13:~]$ id student
uid&#61;1000(student) gid&#61;1000(student) groups&#61;1000(student)

为每个 student 用户配置免密 sudo &#xff1a;vim /etc/sudoers
在这里插入图片描述
SSH&#xff1a;控制节点生成公私钥&#xff0c;将公钥传给受控节点的 student 用户

##用class用户生成
# 生成密钥
ssh-keygen
# 传公钥
ssh-copy-id student&#64;master
ssh-copy-id student&#64;node12
ssh-copy-id student&#64;node13

在这里插入图片描述
查看各自家目录

[class&#64;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&#64;master:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:58 authorized_keys[root&#64;node12:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys[root&#64;node13:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys

环境配置

环境配置主要是软件包的下载

三台主机我们统一下载 python36&#xff1a;yum install pyton36 / yum module install python36
在这里插入图片描述
接下来就是控制节点 安装 Ansible
在安装之前&#xff0c;我们需要写 yum 源&#xff1a;vim /etc/yum.repos.d/epel.repo

[epel]
name&#61;epel
baseurl&#61;https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
gpgcheck&#61;0

在这里插入图片描述
接下来安装&#xff1a;yum install ansible -y
在这里插入图片描述
查看版本&#xff1a;ansible --version

[root&#64;master:~]$ ansible --version
ansible 2.9.27config file &#61; /etc/ansible/ansible.cfgconfigured module search path &#61; [&#39;/root/.ansible/plugins/modules&#39;, &#39;/usr/share/ansible/plugins/modules&#39;]ansible python module location &#61; /usr/lib/python3.6/site-packages/ansibleexecutable location &#61; /usr/bin/ansiblepython version &#61; 3.6.8 (default, Nov 9 2021, 14:44:26) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]

编写文件

我们一共需要编写两个文件&#xff08;不包括 Ansible Playbook&#xff09;&#xff1a;清单、配置文件
配置文件一共有三类&#xff1a;

./ansible.cfg # 优先级最高&#xff0c;在工作目录下
~/.ansible.cfg # 优先级第二&#xff0c;在家目录下&#xff0c;是个隐藏文件
/etc/ansible/ansible.cfg # 优先级最低

那么我们就新建一个目录为工作目录&#xff0c;在其下编写配置文件并执行 Ansible 命令
在哪里使用 ansible 命令&#xff0c;那里就是工作目录

# 如下则为配置文件的内容
[defaults]
inventory &#61; ./inventory ; 指定了清单的路径
remote_user &#61; student ; 指定远程控制哪个用户
ask_pass &#61; false ; 设置为不需要密码的登录
# 上面的等号两边要有空格&#xff0c;且下面留出空行[privilege_escalation]
become&#61;true ; 登录到受控主机后是否变为其他用户
become_method&#61;sudo ;sudo 方式变为其他用户&#xff08;sudo、su&#xff09;
become_user&#61;root ; 变为 root 用户
become_ask_pass&#61;false ; sudo 时无需密码

在这里插入图片描述
在工作目录下编写清单&#xff1a;vim ./work/inventory
清单的默认路径在 /etc/ansible/hosts&#xff0c;但是我们一般不使用它

node12
node13# 以下为分组
[webservers]
master
node12[dbservers]
node12
node13# 这个写法是将两个组和为一个组
[servers:children]
webservers
dbservers

在这里插入图片描述
测试&#xff1a;ansible 组名或主机名 --list-hosts[ -vvv]
必须在工作目录下执行&#xff0c;否则就会按照优先级加载配置文件&#xff1b;我们可以在后面跟上选项-v&#xff0c;它会根据 v 的个数给出逐渐详细的过程
在这里插入图片描述

实验
  1. all 主机组为目标执行 id 命令
  2. 使用 copy模块 修改所有主机上的 /etc/motd 文件内容为 welcome to ansible
  3. 使用 command模块 查看 /etc/motd 文件的内容
  4. 使用 user模块 创建用户 xiaoming&#xff0c;uid2000


先创建一个工作目录&#xff0c;并在其下编辑清单和配置文件
在这里插入图片描述

  1. all 主机组为目标执行 id 命令&#xff1a;ansible all -m command -a id
    在这里插入图片描述
  2. 使用 copy模块 修改所有主机上的 /etc/motd 文件内容为 welcome to ansible&#xff1a;ansible sons -m copy -a &#39;content&#61;"welcome to ansible\n" dest&#61;/etc/motd&#39;
    在这里插入图片描述
  3. 使用 command模块 查看 /etc/motd 文件的内容&#xff1a;ansible sons -m command -a &#39;cat /etc/motd&#39;
    在这里插入图片描述
  4. 使用 user模块 创建用户 xiaoming&#xff0c;uid2000&#xff1a;ansible sons -m user -a &#39;name&#61;xiaoming uid&#61;2000 state&#61;present&#39;
    在这里插入图片描述

补充

Ansible 的用法是&#xff1a;ansible host-pattern -m module [-a &#39;module arguments&#39;] [-i inventory]
这是它的临时命令&#xff0c;通常我们将这些指令写在 Ansible Playbook 中
它的返回值有三种&#xff0c;一种是上面出现的 CHANGED&#xff0c;表示执行成功并且已做出改变&#xff1b;还有一种就是 SUCCESS&#xff0c;表示执行成功&#xff0c;检查到已经是该状态故没有做出改变&#xff1b;最后一种就是 FAILED&#xff0c;就是执行错误。相应的&#xff0c;他们的颜色也有所不同
在这里插入图片描述


推荐阅读
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 这篇文章将为大家详细讲解有关C#开发技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。C#开发技 ... [详细]
  • [ipsec][strongswan]strongswan源码分析(五)plugin的配置文件的添加方法与管理架构解析
    我们知道,strongswan是基于插件式管理的。不同的插件有不同的配置文件,在这下面,我们以netlink的插件为例:etcstrongswan.dcharonkernel-ne ... [详细]
  • 一、域名解析记录说明记录类型A:用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP ... [详细]
  • 102安装Linux系统
    安装Linux系统 安装CentOS系统准备系统光盘插入CentOS7光盘,引导安装程序设置主机,将光盘作为第一-引导设备从CentOS7光盘启动主机检测安装光盘的完整性从ISO镜 ... [详细]
  • hadoop完全分布式搭建
    原文链接:hadoop完全分布式搭建主机分配以及地址要求:角色主机名IP地址Namenodemaster192.168.222.201Datanodeslave ... [详细]
  • 零入门kubernetes网络实战15>基于golang编程实现给ns网络命名空间添加额外的网卡
    《零入门kubernetes网络实战》视频专栏地址https:www.ixigua.com7193641905282875942本篇文章视频地址(稍后上传)本篇文章主要是想通过g ... [详细]
  • Vue项目结构分析-项目结构重点在src文件夹:assets——静态资源,如css,jscomponents——公共组件router——路由文件(vuecli3.x没有自 ... [详细]
  • etc杂七杂八的配置文件etc不是什么缩写,是andsoon(等等)的意思来源于法语的etcetera翻译成中文就是等等的意思.至于为什么在etc下面存放配置文件& ... [详细]
  • 贴图的支持及设置:关于贴图分辨率的支持及设置的用户指南
    http:hi.baidu.comdbfr2011818itemeef1eac8df31a2d69744520b贴图分辨率虚幻引擎3支持的贴图分辨率是从1x1到4096x4096 ... [详细]
  • centosFedoraRHEL•整改方法:•验证检查:1、查看etclogin.defs,访谈询问当前所设置的密码长度及更换周期 ... [详细]
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 先下载linuxhttp:cdimage.ubuntu.comreleases14.04release我下载的是ubuntu-14.04.3-desktop-amd64mac.is ... [详细]
  • Linux是一套免费使用和***传播的类UNIX操作系统,主要用于基于Intel x86系列CPU的计算机上。Linux系统是由全世界各地的成千上万的程序员合适的方式定制自己的Li ... [详细]
  • 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序
    1.首先下载vs2015withupdate32.然后下载VisualCforLinuxDevelopment3.在centos7上yuminstallopenssh-server ... [详细]
author-avatar
昵称这种东西真的好难取好吗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有