1

Ansible 快速入门到放弃 - 涛姐涛哥

 1 year ago
source link: https://www.cnblogs.com/taojietaoge/p/17142009.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Ansible 快速入门到放弃

    最是人间留不住,朱颜辞镜花辞树。

1-Ansible 简介

  • Ansible是一个配置管理和配置工具,它使用SSH 连接到服务器并运行配置好的任务,服务器上只需要开启ssh,所有工作都交给client 端的ansible 负责。
  • 当我们有批量部署的需求时,我们可以自己写脚本,但是更推荐使用 Ansible。使用 Ansible 无需编码只需要配置 yaml 文件,并且 Ansible 已经内置了幂等性、并发度控制等功能,大大减少了批量部署时的工作量。

Ansible 是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible 所运行的模块,ansible只是提供一种框架。主要包括:

  • 连接插件connection plugins:负责和被监控端实现通信;
  • host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  • 各种模块核心模块、command模块、自定义模块;
  • 借助于插件完成记录日志邮件等功能;
  • playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

Ansible 特点,主要有以下几点:

  • 不需要安装客户端,通过sshd去通信;
  • 安装简易,centos上可直接yum安装;
  • 基于模块工作,模块可以由任何语言开发;
  • 不仅支持命令行使用模块,也支持编写yam l 格式的playbook,易于编写和阅读。

 Ansible 大致原理,主要一下三点:

  1. hosts 配置文件,作用是告诉 Ansible 你的程序要部署到哪些机器。
  2. yaml 文件,作用是告诉 Ansible 在目标机器上执行哪些操作。
  3. Ansible 不需要在目标机器上安装客户端,它通过 SSH 把指令和要部署的程序发送到目
    1580332-20230221180235261-396011500.png

2-Ansible 安装

Ansible 支持集群,资源有限本示例仅在本地虚拟机使用两台机器进行演示,角色如下。

  • 192.168.8.135   角色-服务端
  • 192.168.8.136   角色-客户端
1580332-20230221183237391-1387010982.png

只需要在服务端上安装ansible,安装命令如下。

yum list |grep ansible
python3 -m pip install --user ansible==2.5.4

查看安装是否成功

  • ansible --version
1580332-20230221180633297-1613172743.png

使用ssh-keygen 命令在服务端上生成密钥对。

[tanjintao@localhost ~]$ ssh-keygen -t rsa
1580332-20230221181320446-457757433.png

建立服务端与客户端的连接,也就是配置密钥认证的SSH连接。

1580332-20230221184704036-660912088.png

ContractedBlock.gifExpandedBlockStart.gif

View Code

补充步骤,配置密钥认证的SSH连接。

1580332-20230221191714488-295381352.png

编辑服务端上的配置文件,配置远程主机组。

# serviceA 是集群名称
[serviceA]
# 枚举 serviceA 集群的 ip 地址,这里配置了一个客户端的IP
192.168.8.136

3-Ansible 执行远程命令1

完成了ssh 密钥认证以及主机组的配置之后就可以通过ansible 对客户端远程执行命令了,但是我这边还是报错UNREACHABLE Permission denied,暂时加上如下配置后可以正常执行远程命令。

  • [root@flask-mysql ansible]# cat /etc/ansible/hosts
    192.168.8.136 ansible_ssh_port=22 ansible_ssh_pass=123456 ansible_ssh_user=root
1580332-20230221194948007-368030852.png

4-Ansible 执行远程命令2

首先在服务端上创建一个简单的shell 脚本 tjt.sh 用来测试。

#!/bin/bash
echo `date` > /home/tjt/ansible_test.txt
1580332-20230221200008405-1582721039.png

然后把脚本 tjt.sh 分发到远程机器上,具体路径是/home/tjt 目录下。

  • [root@localhost ~]# ansible serviceA -m copy -a "src=/opt/SERVER/pkg/tjt.sh dest=/home/tjt/tjt.sh mode=0755"
1580332-20230221200123468-1612822301.png

最后通过shell 模块执行远程机器上的shell 脚本。

  • [root@localhost ~]# ansible serviceA -m shell -a "/home/tjt/tjt.sh"
    1580332-20230221200531086-2114162263.png

     查看远程机器上,是否执行了 tjt.sh 脚本,并且生成了/home/tjt/ansible_test.txt文件。

1580332-20230221200612580-1595536665.png

 如上,可以看到脚本被正常执行了。

  • 5-Ansible 执行 yml 文件

编辑 YAML 文件

  • yml 文件是告诉 Ansible 在目标机器上执行哪些操作,Ansible 把这类文件称为 “playbook”。
  • playbook 相当于可以把模块命令都写入到配置文件里面,这样就可以直接执行配置文件了,类似脚本的意思。

下面编写一个为名 tjtAnsibleDemo.yml 的 playbook,这个 playbook 的作用是把 helloWorld.java 文件发送到 serviceA 集群。

ContractedBlock.gifExpandedBlockStart.gif

View Code

执行Ansible 脚本

[root@localhost pkg]# ansible-playbook tjtAnsibleDemo.yml 
1580332-20230222095109470-1987355957.png

 检查远程机器是否成功收到 helloWorld.java 文件。

1580332-20230222095536313-1636000769.png

 如上,代表执行成功。

最是人间留不住

朱颜辞镜花辞树


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK