Ansible实现自动部署简述

2023-11-07

一、操作过程(以JDK安装部署过程为例):
    1、服务器准备:为受管服务器配置公钥进行连接
        安装命令:
            yum -y install epel-release
            yum -y install ansible
        生成公钥:
            ssh-keygen -t rsa -P ""
        复制公钥到受管服务器:
            ssh-copy-id -i /root/.ssh/id_rsa.pub root@[受管服务器ip]
            
            ps:Linux的ssh-copy-id命令没有,那是当前系统没有安装openssh-clients客户端组件,你可以通过如下命令安装:
                yum install openssh-clients*
            (如果安装不成功,则需要把原有的openssh相关文件先全部remove)
                systemctl  start sshd.service(重启ssh服务,不然以后就登不上去啦!)
        检查受管节点连通性:
            ansible -m ping all
    2、修改受管服务器host配置:
            vim /etc/ansible/hosts
        在host中加入并保存:
            [jdk] ---------------- 定义的分组名
            受管服务器ip1
            受管服务器ip2
            ...
    3、上传jdk安装包到ansible主机的/opt/jdk/files目录,并在该目录下添加.bashrc文件
    4、编写ansible剧本:
        vim [playbook所在路径]/jdkinstall.yml
        
    5、执行ansible剧本:
        ansible-playbook [playbook所在路径]/jdkinstall.yml
    
    
二、playbook:可持久化使用
    1、核心元素:
        Hosts:执行的远程主机列表(可以为ip或定义的分组名)
        Tasks:所有需要执行的任务,最少需要包括一个(name: task)元素
        Vars:内置变量或自定义变量,在playbook中调用
        Templates:使用模板语法的文件,如配置文件等
        Handlers/notity:结合使用,用于特定条件触发的操作
        tags:用于选择执行某条或某部分任务
    2、基本语法:使用yaml语法格式,后缀可为yaml或yml
        1.同一个playbook中可以通过三连破折号(---)区分多个play
        2.缩进必须统一,空格与tab不能混用,同样的缩进代表同样的级别(建议只使用空格来进行缩进)
        3.大小写敏感
        4.k/v的值可同行(用:分割)也可换行,v可以是字符串也可是一个列表
    3、元素属性:
        1.每一个task必须要有一个name,若没有定义则action的值会用作输出信息中标记特定的task;所有在hosts中定义的主机或主机组都将执行task
        2.notify action会在每一次task结束时被动触发,且只会被触发一次(如配置发生改动需要重启服务等)
        3.可以在命令行执行playbook时通过- e传入变量,该变量在整个playbook中都可以被使用,其优先级比playbook中直接定义的变量优先级高,格式如下:
            ansible-playbook - e "[变量名]=[值]" [playbook文件名]
        4.可以在/etc/ansible/hosts文件中为主机组或单个主机定义变量,组中定义的没有单个主机中的优先级高,主机组定义变量格式如下:
            [[组名]:vars]
            [变量名]=[值]
        5.可以将所有变量统一放在一个yaml文件中,在要使用的playbook中直接引用该文件,引用格式如下:
            var_files:
                -    [变量文件路径]
        6.可以为任务加上tag,在命令行执行playbook时可以通过-t参数来指定执行或--skip-tags来忽略某任务
        
三、playbook模板:提供动态配置服务,使用jinja2语言

四、使用非root账号实现自动部署:
    1、以非root账号登录,为该账号在所有受管主机中增加管理员权限:
        1.编辑/etc/sudoers文件,在root下添加本账号
        2.删掉%wheel前的#
        3.执行 sudo useradd -G root [账号名]
        4.通过 id [账号名] 命令查看权限状态
    2、生成公钥:
        以非root账户执行命令:
        ssh-keygen -t rsa -P ""
            生成的公钥保存在/home/[非root账户]/.ssh/id_rsa.pub
    3、复制公钥到对应受管主机:
        以非root账户执行命令:
        ssh-copy-id -i /home/[非root账户]/.ssh/id_rsa.pub [非root账户]@[受管服务器ip]
    4、在/etc/ansible/hosts文件中配置sudo密码,在对应受管服务器后增加 ansible_sudo_pass=[账户对应的密码]
    5、在对应的playbook.yml文件中启用sudo:
        1.在hosts下一行配置 become: yes
        2.在become下一行配置 become_method: sudo
        
五、使用role与template实现多任务的自动部署:
    因为在实际部署中,可能会需要部署多个程序、多个主机,而不同的主机可能需要部署不同的一组程序,因此就需要对要安装的程序和主机进行切分,程序分为多个任务称为role,主机分为多个主机组称为host
    
    1、编写主yml文件:该yml文件将作为最终去执行的ansible playbook,需要在文件中指定要执行的主机组,及该主机组要执行的任务角色;以site.yml为例:
        ---
         - hosts: webserver
         become: yes
         become_method: sudo
         
         roles:
         - jdk
         - nginx
         - redis
         - consul
         ...
         
         - hosts: webclient
         become: yes
         become_method: sudo
         
         roles:
         - jdk
         - nginx
        ...

    2、role文件目录:每一个在主yml中使用的role需要包含以下对应的目录及文件
        (1)tasks目录:必需,在该文件夹下有一个main.yml(即上面基本的playbook剧本),当ansible运行到主yml的对应role时会自动读取该yml文件并执行
        (2)files目录:非必需,用于存放该role的部署操作中需要使用的文件资源,文件操作可以省略文件路径(相对路径),ansible会自动在该目录下读取对应文件
        (3)templates目录:非必需,如果部署操作中有某个配置文件需要根据不同情况配置不同的参数,则可以将配置文件放入该文件夹,并为对应参数声明对应的变量;templates/文件夹下的文件需要转为jinja2类型(后缀改为.j2)
        (4)vars目录:非必需,在该文件夹下有一个main.yml,用于存放本role所使用的所有变量
        (5)handlers目录:非必需,目录下有一个main.yml,用于存放handlers
        (6)meta目录:非必需,目录下有一个main.yml,用于定义本role的依赖关系(ansible1.3及以后的版本支持)
        (7)default目录:非必需,目录下有一个main.yml,用于存放role定义的默认变量
        
    3、在hosts文件中定义主机组:如果部分主机只执行部分的roles任务,则可以在/etc/ansible/hosts文件中为其定义单独的主机组名,并在主yml文件中配置其对应的roles
        

六、playbook常用语法:
    1、文件操作:
        1.1 创建目录:file: path=[要创建的目录路径] state=directory owner=root group=root
        1.2 删除文件/目录: file: path=[要删除的文件/目录路径] state=absent
        1.3 复制文件/目录:copy: src=[源文件/目录路径] dest=[目的路径]
            dest如果已存在则会报错
        1.4 获取远端主机文件:fetch: src=[远端主机上的文件路径] dest=[本地保存路径]
    
    2、文件压缩/解压:
        2.1 文件解压:unarchive: src=[源压缩文件路径] dest=[目的路径]
        2.2 文件压缩:archive: path=[待压缩文件路径] dest=[目的路径] format=[打包的类型]
        
    3、远程执行命令:
        3.1 shell命令:shell: [shell命令]
        3.2 command命令:格式同上
        3.3 yum命令:yum: name=[要安装的包名] state=[present/installed/lastest/absent/remove]
            present/installled表示安装程序包;lastest表示安装最新版本;absent/remove表示卸载程序包
            默认安装最新版本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible实现自动部署简述 的相关文章

  • jenkins 管道中的该模块需要 boto3 和 botocore

    我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误 boto3 is required 我已经安装了 boto3 pip list boto grep boto boto3 1 20 3
  • ansible 有 yaml 编辑模块吗?

    我需要修改 yaml 文件 施洛德配置 http schleuder2 nadir org documentation v2 2 index html 并且我想从 ansible 剧本中执行此操作 是否有模块可以执行此操作 很难用谷歌搜索这
  • 如何根据任务或任务集切换用户?

    我的 ansible 手册中反复出现的主题是我经常必须使用 sudo 权限执行命令 sudo yes 因为我想为某个用户执行此操作 理想情况下 我宁愿使用 sudo 切换到该用户并正常执行命令 因为这样我就不必执行通常的后命令清理工作 例如
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • 用于下载文件的 S3 模块在 ansible 中不起作用

    这是为从 S3 存储桶 artefact test 下载文件而编写的 ansible 代码 name Download customization artifacts from S3 s3 bucket artefact test obje
  • 带有 cacert 选项的 Ansible URI 模块

    我正在尝试做相当于 curl X POST data
  • Cygwin - 如何安装 ansible?

    如何使用 Cygwin 获取 安装 ansible 我尝试了以下步骤 但在第 5 条期间 运行时 python setup py 安装 步骤取自 取自https servercheck in blog running ansible wit
  • 无法将属性与数字进行比较。错误:“‘AnsibleUnsafeText’和‘int’实例之间不支持”

    getent database passwd debug var getent passwd dict2items selectattr value 1 gt 1000 map attribute key list 输出是 TASK deb
  • Ansible:即使成为 sudo 用户,也无法配置 sudo 命令

    testuser 是 sudo 用户 sudo cat etc sudoers d 90 cloud init testuser testuser ALL ALL NOPASSWD ALL 我可以手动登录 testuser 并在没有密码的情
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • 使用 ansible 处理程序滚动重启

    我想运行一个 ansible playbook 它会安装一个服务 如果自上次运行以来发生任何更改 或多或少是 ansible 处理程序的规范用例 则重新启动它 但我想要一个不同的并行性用于安装而不是重新启动 我想一次在所有主机上安装 但是
  • 如何在 Jinja 中过滤字典?

    我有一个包字典 包名称是key和一些细节的字典是value php7 1 readline latest 7 1 9 1 ubuntu14 04 1 deb sury org 1 origins ppa launchpad net vers
  • Ansible 输出格式选项

    是否有一个选项可以使用 ansible 而不是任何其他脚本 来格式化 ansible 输出 例如 name Show version sudo true hosts web front end tasks name Create yum c
  • 所有 Ansible playbook 属性

    我刚刚开始使用 Ansible 在阅读了教程 Ansible 团队将其命名为 docs 我想查看可在剧本中使用的所有属性的完整列表 有人能够提供这样的清单吗 我唯一能通过谷歌搜索的是这个老例子 https gist github com m
  • 在特定主机组上运行 ansible

    我正在尝试使用以下命令运行 ansible ansible playbook provision yml l webserver 我的主机文件包含以下主机组 webclient 172 29 4 75 webserver 172 29 4
  • Ansible 多个清单文件

    我正在尝试将多个清单文件和动态清单与 Ansible 1 4 和 dev 一起使用 Ansible 返回没有匹配的主机 我有一个模拟场景 目录中有两个主机文件test列出该目录的内容 主机1 ini group1 test1 ansible
  • 正在中止,目标使用 selinux 但未安装 Python 绑定 (libselinux-Python)

    我正在尝试运行 Ansible playbook 命令并收到如下错误 fatal localhost FAILED gt changed false msg Aborting target uses selinux but python b
  • 如何使用ansible运行询问用户输入的脚本?

    我想使用 ansible 运行 shell 脚本 但 shell 脚本需要用户输入才能成功执行 例如 我的 shell 脚本询问唯一的 idossec agent 通过ansible我可以预定义我的unique id user input
  • Ansible - 默认/显式标签

    我有一本剧本 其中包含并标记了各种角色 name base hosts host default localhost roles role apt tags base apt ubuntu role homebrew tags base h
  • 安塞布尔 + 10.11.6

    我在 非常 干净地安装 10 11 6 时遇到了 Ansible 的奇怪问题 我已经安装了brew zsh oh my zsh Lil snitch 和1password 实际上没有安装其他任何东西 我安装了ansible brew ins

随机推荐

  • Nerf如何制作自己的llff数据集

    Nerf三维重建使用Pycharm运行自己的数据集 20230427更新 Nerf代码讲解 从零简单复现论文代码 Nerf环境配置教程 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍自己制作Nerf数据集 让你自己动手渲染第一个三维模
  • PyCharm 代码调试教程

    目录 一 图文教程 二 调试相关的快捷键 调试的过程分为三步 第一步 在你想要调试的地方 打上断点 第二步 使用调试模式来运行这个 python 程序 第三步 使用各种手段开始代码调试 一 图文教程 1 首先第一步和第二步 我用下面这张图表
  • Spring Cloud Config 实现配置中心,看这一篇就够了

    Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心 虽然后来又发布了 Consul 可以代替配置中心功能 但是 Config 依然适用于 Spring Cloud 项目 通过简单的配置即可实现功能 配
  • ArcGIS:如何添加字段、属性表的连接、字段的计算?

    目录 01 加载原始数据 02 加载的数据分析与处理 2 1 查看tracts要素的属性表 2 2 为tracts要素的属性表添加 人口密度 字段 03 与tract pop属性表进行连接 3 1 为什么要连接 3 2 连接有什么需要注意的
  • vue 导出 导入

    vue 导出 方法一 1 util自带工具包 Export2Excel js 2 引用 import export json to excel from utils Export2Excel 3 导出方法 formatJson filter
  • 基于lua-nginx-module(openresty)的WEB应用防火墙

    独乐乐 不如众乐乐 分享给大家一篇WEB应用防火墙的文章 基于Lua Nginx实现 以下是ngx lua waf的作者全文输出 Github地址 https github com loveshell ngx lua waf ngx lua
  • MySQL 5.7 root登录问题

    For Mac 安装完成后 当使用 mysql u root p 登录时 出现下面错误 ERROR 1045 28000 Access denied for user root localhost using password NO 可通过
  • 正则替换下划线为字母大写

    本人需要手工将数据库中的字段批量转换为java对象的字段 比如 将TRADE DATE 转换为 tradeDate 最终的结果为 1 xxx xml 格式如下 result property tradeDate column TRADE D
  • calendar 字符串日期转时间戳

    public class TestDate public static void main String args SimpleDateFormat dateFormat new SimpleDateFormat yyyy MM dd 指定
  • github上传本地项目代码

    github上传本地项目代码 小白教程 github上申请一个账号 https github com 下载一个git工具 https gitforwindows org 进入github首页 点击新项目new repository 如下图所
  • Java中Comparable和Comparator区别小结

    阅读目录 一 Comparable简介 二 Comparator简介 三 Comparable和Comparator区别比较 回到顶部 一 Comparable简介 Comparable是排序接口 若一个类实现了Comparable接口 就
  • Codeforces Round 883 (Div. 3)

    A Rudolph and Cut the Rope 只需要按照钉子距离的高度a i 和绳子的长度b i 的差值进行排序即可 代码 int n pii a N bool cmp pii a pii b return a x a y
  • python爬虫总是爬不到数据,你需要解决反爬虫了

    爬虫最讨厌的就是反爬虫 但是如果没有反爬虫的存在的 那么大家都可以随随便便就进行网络爬虫 那么服务器又怎么支撑得起来呢 那么又怎么彰显我们的能力呢 所以说反爬虫是一个门槛 跨过这一个门槛就可以轻松掌握爬虫的技术了 跨不过那么你就一直都在起点
  • element-ui中el-input输入时自定义校验,并且调后端接口查重

    一 实现效果 1 只能属于正整数 2 只能属于7位或者9位 3 输入时实时校验 4 查重 不能输入列表存在的 除自己之外
  • 博图v16组态wincc_「博图+仿真+授权」西门子软件安装指南及注意事项

    写在前面 最近一段时间 很多小伙伴通过我们公众号 thinger swj的文章开始学习西门子PLC及西门子仿真环境搭建 但是很不幸的是 由于系统原因或者其他未知原因 经常会遇到各种各样的问题 因此本文主要针对博图V16安装 PLCSIM A
  • C++默认构造函数提供机制

    C 的构造函数有 默认构造函数 析构函数 拷贝构造函数 拷贝赋值函数 移动构造函数 移动赋值函数 生成这些特殊成员函数 或不生成 的规则比较复杂 每个特殊成员函数有几种不同的状态 隐式声明还是用户声明 默认提供还是用户提供 正常状态还是删除
  • vue3-element-plus,控制表格多选的数量

    1 需求描述 控制表格的多选 最多只能选择5条数据 并且其他项禁用 2 需求描述
  • Hadoop002-hdfs架构

    1 名字节点 namenode 可以看做是分布式文件系统中的管理者 它1负责管理文件系统命名空间 集群和数据块复制等 2 数据节点 datanode 是文件存储的基本单位 它以数据块的形式保存了HDFS中文件的内容和数据块的数据校验信息 3
  • 52条SQL语句性能优化策略,建议收藏

    点上方蓝色 菜鸟学Python 选 星标 公众号 重磅干货 第一时间送到 转自 SimpleWu 链接 cnblogs com SimpleWu p 9929043 html 本文会提到 52 条 SQL 语句性能优化策略 1 对查询进行优
  • Ansible实现自动部署简述

    一 操作过程 以JDK安装部署过程为例 1 服务器准备 为受管服务器配置公钥进行连接 安装命令 yum y install epel release yum y install ansible 生成公钥 ssh keygen t rsa P