Ansible 快速入门到放弃

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

1-Ansible 简介

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

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

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

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

2-Ansible 安装

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

Ansible 快速入门到放弃

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

yum list |grep ansible

python3 -m pip install --user ansible==2.5.4

查看安装是否成功

Ansible 快速入门到放弃

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

[tanjintao@localhost ~]$ ssh-keygen -t rsa

Ansible 快速入门到放弃

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

Ansible 快速入门到放弃

Ansible 快速入门到放弃Ansible 快速入门到放弃

 1 [root@localhost ~]# ssh-copy-id root@192.168.8.136 # 拷贝ssh key到客户端
 2 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
 3 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
 4 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
 5 root@192.168.8.136's password: 
 6 
 7 Number of key(s) added: 1
 8 
 9 Now try logging into the machine, with:   "ssh 'root@192.168.8.136'"
10 and check to make sure that only the key(s) you wanted were added.
11 
12 [root@localhost ~]# ssh root@192.168.8.136 # 测试在服务端上能否通过密钥登录客户端
13 Last login: Tue Feb 21 02:43:53 2023 from 192.168.8.136
14 [root@localhost ~]# logout
15 Connection to 192.168.8.136 closed.
16 [root@localhost ~]#

View Code

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

Ansible 快速入门到放弃

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

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

3-Ansible 执行远程命令1

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

Ansible 快速入门到放弃

4-Ansible 执行远程命令2

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

#!/bin/bash
echo `date` > /home/tjt/ansible_test.txt

Ansible 快速入门到放弃

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

Ansible 快速入门到放弃

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

Ansible 快速入门到放弃

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

编辑 YAML 文件

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

Ansible 快速入门到放弃Ansible 快速入门到放弃

 1 # hosts 是要部署服务的集群
 2 - hosts: serviceA
 3 # remote_user 是以 root 用户登录远程机器
 4   remote_user: root
 5 # vars 是定义一些变量。这些变量可以在接下来的 tasks 中使用。
 6   vars:
 7      src: /opt/SERVER/pkg
 8 # tasks 是在远程机器上具体的执行动作。
 9   tasks:
10       # name 是该动作的名称
11       - name: "一个简单的Absible脚本:把 helloWorld 文件发送到 serviceA 集群"
12         # copy 是要具体执行的动作。copy 是 Ansible 模块,它的作用是把本地文件上传到目标机器上去。
13         # {{ src }} 是 Jinja2 模板语法
14         copy: src={{ src }}/helloWorld.java dest=/home/tjt  
15 
16

View Code

执行Ansible 脚本

[root@localhost pkg]# ansible-playbook tjtAnsibleDemo.yml 

Ansible 快速入门到放弃

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

Ansible 快速入门到放弃

如上,代表执行成功。

最是人间留不住

朱颜辞镜花辞树

发表回复