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 把指令和要部署的程序发送到目

2-Ansible 安装

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

  • 192.168.8.135   角色-服务端
  • 192.168.8.136   角色-客户端

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

yum list |grep ansible

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

查看安装是否成功

  • ansible --version

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

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

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

 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 ~]#

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

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

# 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

4-Ansible 执行远程命令2

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

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

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

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

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

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

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

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

  • 5-Ansible 执行 yml 文件

编辑 YAML 文件

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

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

 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

执行Ansible 脚本

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

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

如上,代表执行成功。

最是人间留不住

朱颜辞镜花辞树

 

Ansible 快速入门到放弃的更多相关文章

  1. ansible 快速入门

    安装 $ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ ...

  2. Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 【持续集成与交付快速入门必备】

    Jenkins 从小白入门到企业实践打怪放弃之路系列笔记 [持续集成与交付快速入门必备]

  3. kolla-ansible快速入门

    kolla-ansible快速入门 kolla-ansible是一个结构相对简单的项目,它通过一个shell脚本,根据用户的参数,选择不同的playbook和不同的参数调用ansible-playbo ...

  4. 【转】Flask快速入门

    迫不及待要开始了吗?本页提供了一个很好的 Flask 介绍,并假定你已经安装好了 Flask.如果没有,请跳转到 安装 章节. 一个最小的应用 一个最小的 Flask 应用看起来会是这样: from ...

  5. Git快速入门和常用命令

    一.快速入门 本地初始化一个项目 首先,你需要执行下面两条命令,作为 git 的基础配置,作用是告诉 git 你是谁,你输入的信息将出现在你创建的提交中. git config --global us ...

  6. 没有基础的初学者学java怎样快速入门?超全的学习路线图

    现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...

  7. Vue (一) --- vue.js的快速入门使用

    =-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...

  8. vue 快速入门、常用指令(1)

    1. vue.js的快速入门使用 1.1 vue.js库的下载 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 官方网站 中文:https://cn.vuejs. ...

  9. jumpservice配置:快速入门

    快速入门 说明 到 Jumpserver 会话管理-终端管理 查看 Coco Guacamole 等应用是否在线 一.系统设置 1.1 基本设置 # 修改 url 的"localhost&q ...

  10. NetCore实践篇:分布式监控客户端ZipkinTracer从入门到放弃之路

    前言 本文紧接上篇.Net架构篇:思考如何设计一款实用的分布式监控系统?,上篇仅仅是个思考篇,跟本文没有太大的关系.但有思考,结合现有的开源组件,实践起来更易理解起来,所以看本文之前,应该先看下上篇博 ...

随机推荐

  1. 错误“AxImp.exe”已退出,代码为 -1163019603

    最近调试项目时突然出现错误"AxImp.exe"已退出,代码为 -1163019603 发现引用中的组件出现了一个感叹号 经过核对是锐浪报表的组件出现了问题,尝试打开报表设计器也无 ...

  2. linux 使用ACR122U-A9设备读写M1卡

    前言 很久之前我在windows用过这个ACR122U-A9设备, 还挺好用,但是换了linux后,突然想又想用这个设备又是一顿折腾- 关于这个设备 其实这个设备只能读取M1卡(水卡这种),当时什么都 ...

  3. orcl between and 时间

    在网上查阅,大家都说between and两边都会包含,但是对于时期来讲,他会包含前者,不会包含后者. 也就是说求一个时间介于上周六到本周五的区间,用between and 需要计算出上周六的时间和本 ...

  4. 【Java面试指北】Exception Error Throwable 你分得清么?

    读本篇文章之前,如果让你叙述一下 Exception Error Throwable 的区别,你能回答出来么? 你的反应是不是像下面一样呢? 你在写代码时会经常 try catch(Exception ...

  5. 【每日一题】【第一个出现的值】【二分】2022年1月10日-NC105 二分查找-II

    描述请实现有重复数字的升序数组的二分查找给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返 ...

  6. 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康

    前提介绍 相信如果经历了我的上一篇Arthas的文章[[JVM实战系列]「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南]之后,相信你对Arthas的功能和使用应该有 ...

  7. 正则爬取豆瓣Top250数据存储到CSV文件(6行代码)

    利用正则爬取豆瓣TOP250电影信息 电影名字 电影年份 电影评分 评论人数 import requests import csv import re # 不算导包的话正式代码6行 存储到csv文件 ...

  8. 解决scapy库下找不到IP,TCP模板的问题

    scapy版本: 问题描述: 我看到书中导入TCP,IP模块是通过from scapy.all import TCP,IP 上机实验发现找不到这个模块,通过大量查找发现此模块在最新版本中转移到其他包里 ...

  9. .net core操作MongoDB

    前言 现实中认识的一个搞java(百万富婆)的大佬,已经转行做抖音主播了,搞技术的只能赶在年前再水一篇博客,不足之处欢迎拍砖,以免误人子弟,呔,真是太难受了 环境准备 .net core 3.1 Mo ...

  10. [C++]C++11:Function与Bind

    std::function 它是函数.函数对象.函数指针.和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针. 以统一的方式处理函数.函数对象.函数指针.和成员函数. ...