• Ansible 快速入门到放弃


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

    补充步骤,配置密钥认证的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
    View Code

    执行Ansible 脚本

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

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

     如上,代表执行成功。

     

     

     

    最是人间留不住

    朱颜辞镜花辞树

     

     

     
  • 相关阅读:
    windows服务器安装nacos服务
    企业如何实现安全可靠的云密码管理
    在 NVIDIA DGX Cloud 上使用 H100 GPU 轻松训练模型
    【科学文献计量】利用pybibx分析Scopus文献数据集(EDA,N-Grams,Cluster,Network analysis,NLP)
    采用QTest进行数据集测试-性能测试-GUI测试
    pb:常用函数和语句清单
    如何完美解决前端数字计算精度丢失与数字格式化问题?
    windows安装maven,配置环境变量
    c++_learning-c++标准库STL和boost库
    postgresql数据库|wal日志的开启以及如何管理
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/17142009.html