百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Ansible的原理与配置(ansible 使用教程)

toqiye 2024-09-04 20:04 12 浏览 0 评论

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

[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 用户配置免密sudovim /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 ansibleansible 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

相关推荐

Star 17.3k!给它一张屏幕截图,即可一键克隆网页!

本文为大家分享一款本周爆火的GPT开源项目。前言你敢信,只凭借着一张屏幕截图即可转换生成HTML/TailwindCSS代码。可以算得上是前端工程师的福音。它就是screenshot-to-...

AI从截图直接生成代码、前端程序员的福利!

简介项目可以将任何屏幕截图或设计转换为干净的代码(支持大多数框架)。来自领先公司的开发人员和设计师使用的排名第一的工具。完全开源,在GitHub上拥有超过35,000颗星。非常受欢迎。各位小伙...

一款高颜值、跨平台、自托管的免费开源CRM项目——Twenty

前言大家好,这里是可爱的Cherry。作为一个“甲方”,Cherry其实挺知道客户管理的重要的。但是对于客户管理怎么做,以及CRM的作用,我却是一无所知。之前有朋友在评论区留言,说有没有开源的CRM系...

解放双手,前端界面再也不用自己写了?

随着AI技术的发展,现在有越来越多的尝试将AI应用于UI设计和开发中,以期提高效率和降低成本。今天就给大家介绍一个开源的AI网页生成工具:OpenUIOpenUIOpenUI是一个创...

代码调试,教给你(代码调试是什么意思)

昨天我和一些朋友一起调试代码,他们做程序员这一行都不太久,我向他们展示了一些代码调试技巧。今天早上我在想,我应该如何教授他们学习代码调试?我在Twitter上发了一条推文说,我从来没有见过任何好的调试...

Screenshot-to-code:用屏幕截图生成代码

Screenshot-to-code是一个简单的工具,可使用AI将屏幕截图、模型和Figma设计转换为干净、实用的代码。现在支持ClaudeSonnet3.5和GPT-4o!Scre...

next实现原理(next method)

Next.js是一个基于React的服务器端渲染(SSR)和静态生成(SSG)框架,它的实现原理涉及多个关键技术点,包括服务端渲染(SSR)、静态生成(SSG)、客户端渲染(CSR)、...

可逐步操作的具体流程(可逐步操作的具体流程包括)

假设你是一个单人开发者,使用主流技术栈(React+Node.js+MySQL),以下是详细步骤:---###**一、需求分析与原型设计**1.**核心功能清单**-用户能添加、删除、...

截图转代码只需1步!你离高效开发只差这款神器

引言在现代前端开发中,将设计稿转换为代码是一个既重要又耗时的环节。手动编写HTML结构、调试CSS样式、调整布局对齐,不仅耗费时间,还容易出错。而Screenshot-to-Code这款革...

web开发 前端 后端(web开发前端后端)

区别:1、前端是指用户可见的界面,而后端是指用户看不到的东西,考虑底层业务逻辑的实现,平台的稳定性、性能等。2、前端开发用到的技术有HTML5、CSS3、JS、jQuery、Bootstrap、Nod...

手把手教你Dify私有化部署,打造专属AI平台

一、Dify是什么?Dify是一款极具创新性的开源LLM应用开发平台,它就像是一把万能钥匙,为开发者们打开了通往生成式AI应用开发新世界的大门。其融合了后端即服务(BackendasS...

前后端分离架构设计:提升开发效率与业务支撑力的密钥

前后端分离架构设计解析一、定义与核心思想前后端分离是一种将用户界面(前端)与业务逻辑(后端)解耦的架构模式,通过RESTfulAPI或GraphQL实现数据交互。前端专注于视图渲染与交互逻辑...

Kubernetes最小部署单元Pod(kubernetes最小部署单元)

一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

【程序员必藏!零基础本地部署DeepSeek大模型保姆级教程】

为什么选择本地部署?数据安全:敏感代码/业务数据永不外传闪电响应:局域网推理延迟<100ms,告别云端排队深度定制:自由修改模型代码,打造专属AI助手准备工具(5分钟搞定)1核心工具下载...

【Python程序开发系列】使用Flask实现前后端分离(案例)

这是我的第398篇原创文章。一、引言随着web开发的不断发展,前后端分离已成为越来越流行的架构设计。Flask是一个轻量级的Pythonweb框架,非常适合用于构建API,然后配合前端框...

取消回复欢迎 发表评论: