docker ansible与剧本模式

ansible(跨主机编排)

ansible 是一个基于python开发的配置管理和应用部署和管理工具,现在也在自动化管理领域大放异彩,他融合了众多老牌运维工具的优点,pubbet和saltstack能实现的功能,ansible基本上都可以实现

能批量配置部署上千台主机,一个ansible控制节点完成所有主机操作ansible无agent存在

ansible是基于模块工作的,他提供一种运行框架,它本身没有完成任务的能力,整整执行操作的是ansible的模块,通过ssh连接来控制远程主机的

assible绝大多数模块都具有幂等性,及无论多少次同样的运算,结果都是相同的及一条命令,任意多次执行所产生的影响与一次执行的影响均与一次执行相同。(一次操作完不会重复操作,除非文件发生改变)

ansible的很多模块在执行时都会先拍段目标节点是否要执行任务,所以,重复执行某个任务大多时候不会产生任何副作用

总结:

ansible 自动化运维工具 可实现批量管理多台(成百上千)主机,应用级别的跨主机编排工具,特性:无agent的存在,不要在被控制几点上安装客户端应用,通过ssh协议与被控制节点通信,基于模块的工作,通过模块可以实现在被控制节点上执行命令操作,很多模块具有幂等性,可以实现多次操作的状态如果没有发生变化,则不会重复操作

ci 持续继承

cd 持续发布 持续部署(asible)

ansible dbservers -m指定组名 command -a 'hostnamectl'

ansible all 指定所有组

ansible webservers -m cron -a ‘name=“backup system log”state=absent’

环境配置

cd /etc/ansible

Vim hosts

由于ansible默认是ssh连接的,所以管理前要设置免密登录 

ansible常用模块

command ansible的默认模块,不支持管道符号,重定向符号 #在远程主机执行命令,不支持管道,重定向等shell的特性。

shell支持 管道符号 重定向符号 #在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能) 

cron minute hour day month weekday job name state=present/absent # 在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。

user name uid group groups shell state=present/absent #用户管理的模块

group name gid #用户组管理的模块

copy src dest #用于复制指定主机文件到远程主机的

file state=link/touch/directory/absent mode path

#设置文件属性

mount

//挂载文件系统

hostname 模块 

//用于管理远程主机上的主机名
ansible dbservers -m hostname -a "name=dbservers-user"

ping模块

检测远程主机联通性 ansble all -m ping

yum模块

ansible webservers -m yum -a 'name=httpd' #安装服务

ansible webservers -m yum -a 'name=httpd state=absent' #卸载服务

 service/systemd 模块 

//用于管理远程主机上的管理服务的运行状态

script 模块 

//实现远程批量运行本地的 shell 脚本

setup 模块
//facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取facts信息
 archive模块

//打包压缩

unachive// 将本地压缩包或远程主机的解压包在远程主机解压

replace模块

//类似于sed命令,总而言是基于正则表达式进行匹配和替换(在远程主机修改文件内容)

inventory 主机清单

inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

配置文件 /etc/ansible/hosts

【组名】

主机ip ansible_user ansible_password ansible_port #主机变量

主机名

【组名:vars】

ansible_user  #组变量

ansible_password=

. . . .

【大组名:children】

组名1

组名2

. . . . .

ansible 的脚本 --- playbook 剧本

playbooks 本身由以下各部分组成

---#yaml文件以---开头,以表明这是一个yaml文件,可省略

 - name: first play#定义一个play的名称,可省略

gather facts: false#设置不进行facts信息收集,这可以加快执行速度,可省略

hosts: webservers#指定要执行任务的被管理主机组,如多个主机组用冒号分隔

remote_user: root#指定被管理主机上执行任务的用户

tasks:#定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行

- name: test connection#自定义任务名称#使用 module: [options] 格式来定义一个任务ping:name: disable selinux

command! '/sbin/setenforce 0'

#command模块和shel1模块无需使用key=value格式

ignore errors: True

#如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore errors忽略失败的任务

- name: disable firewalld

service: name-firewalld state-stopped#使用 module: options 格式来定义任务,option使用key-value格式

- name: install httpd

yum: name-httpd state=latest

- name: install confiquration file for httpd

copy: src-/opt/httpd.conf dest-/etc/httpd/conf/httpd.conf

#这里需要一个事先准备好的/opt/httpd.conf文件

notify: "restart httpd"

#如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作

- name: start httpd service

service: enabled-true name-httpd state=started

handlers:#handlers中定义的就是任务,此处handlers中的任务使用的是service模块

- name: restart httpd#notifv和handlers中任务的名称必须一致

service: name=httpd state=restarted

#Ansible在执行完某个任务之后并不会立即去执行对应的hander,而是在当前中所有通务都执行完后再bandler,这的好处是可以多次发nt。但

后只执行一次对应的handler,从而避免多次重启。

/运行playbookansible-playbook test1.yaml//补充参数:-k (-ask-pass) : 用来交万输入ssh密码-K (-ask-become-pass) : 用来交互输入sudo密码-t: 指定用户

insible-playbook test1.yaml#检查vam1文件的语法是否正确--syntax-checkansible-playbooktest1.yaml-list-task#检香tasks任务ansible-playbooktest1.yaml-list-hosts#检查生效的主机-start-at-task-'install httpd'ansible-playbooktest1.yaml

#指定从某个task开始运行

ansible -playbook demol.yaml

---

- name: first play

  hosts: webservers

  remote_user: root

  gather_facts: true

  tasks:

- name: disable selinuc

  command: '/usr/sbin/setenforce 0'

  ignore_errors:true

- name: disable firewalld

  systemed: name=firewalld state=stopped enabled=no

 - name: mount cdrom

  mount: src=/dev/sr0 path=/mnt state=mounted fstype=iso9660

- name: copy local yum repo file

  copy: src=/etc/yum.repo.d/repo.bak/local.repo dest=/etc/yum.repos.d/

- name:install httpd by yum

yum: name=httpd state=lastest

- name: modify httpd configuration file

   replace:path=/etc/httpd/conf/httpd.conf regexp="ServerName www.example.com:80" replace="ServerName www.kgc.com:80"

notify: "restart httpd"

- name: start httpd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/28492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker使用记录

文章目录 Docker基本使用Docker配置查看状态卸载安装使用 apt 存储库安装在 Ubuntu 上安装 Docker 桌面(非必要) Docker实例使用现有的镜像查找镜像拖取镜像列出镜像列表更新镜像导出镜像删除镜像导入镜像清理镜像查看容器导出容器导入容器-以镜像的方式创建容器重启容器进入容…

虚函数表不一定总是在对象的起始位置

在我之前的一篇文章 “COM 对象的内存布局”中,作为举例,我将对象的虚函数表指针放置在了底层 C 对象的起始位置,但是值得注意的是,虚函数表指针指向的位置并没有一个实际的标准。即使将虚函数表放置在对象中间,甚至是…

零基础想转行做python爬虫及数据分析方向的程序员,有哪些书可以推荐?

学习Python语言是一个不错的选择,一方面Python的应用广泛,在大数据、人工智能、Web开发等领域有大量的使用,另一方面Python语言本身比较简单,非常适合初学者。 Python是完全可以自学的,如果英语基础还可以的话&#x…

Maxwell安装使用

​欢迎光临我的博客查看最新文章: https://river106.cn 1、Maxwell简介 Maxwell 是由美国Zendesk开源,用Java编写的MySQL实时抓取软件。读取 MySQL binlogs 并将修改行字段的更新写入 Kafka, Kinesis, RabbitMQ, Google Cloud Pub/Sub 或 Redis (Pub/Sub or LPUSH)…

3. SpringCloudAlibaba、nacos 实现配置中心

一、微服务中配置文件的问题 1.1 配置文件的问题: 配置文件的数量会随着服务的增加持续递增单个配置文件无法区分多个运行环境配置文件内容无法动态更新,需要重启服务 1.2 引入配置中心 引入配置中心:刚才架构就会成为这样。是由配置中心统…

2023上半年的九个觉悟

‍觉悟,就是觉了、悟了。有时候,你看到一句话,突然就觉悟了。 一、资本主义的问题 “资本主义把我们都缩减成了一个东西:消费者” 因此,人人都成为资本家利诱、操控、围猎的对象。 同时,金钱成为全民的神&a…

JVM垃圾回收算法及Java引用

目录 Java垃圾回收算法 1.标记清除算法:Mark-Sweep 2.复制算法:copying 3. 标记整理算法:Mark-Compact 4.分代收集算法 5.新生代垃圾回收算法:复制算法 6.老年代:标记整理算法 7.分区收集算法 Java引用 1.Ja…

ROS-melodic:源码安裝teb_local_planner算法、替换DWA算法

一.安裝teb_local_planner算法 源码下载地址:GitHub - rst-tu-dortmund/teb_local_planner: An optimal trajectory planner considering distinctive topologies for mobile robots based on Timed-Elastic-Bands (ROS Package) 注意选择对应ROS版本的代码。 放在…

爬虫 python 正则匹配 保存网页图片

目录 1. 简介1.1 爬虫1.2 爬虫语言1.3 python库1.4 我的步骤 2. 导入包2.1 代码2.2 requests库 3. 写入文件函数4. 获取图片5. 主函数5.1 代码5.2 说明一下webbrowser 6. 所有代码7. 其他(可以忽略)8. 总结 在这里我只提供的是一种方法,有很多…

SpringMVC 万字通关

文章目录 1. 什么是 Spring MVC?1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系 2. Spring MVC 有什么用 ?3. 如何学 Spring MVC ?3.1 Spring MVC 的创建3.2 实现连接功能3.2.1 RquestMapping 详解1. RequestMapping 支持什么请求?2. 请求限定3. GetMapping 和 PostMapping4. c…

【Android -- JNI 和 NDK】Java 和 C/C++ 之间传递参数和返回值

本文主要介绍 JNI 的数据传递上,即 Java 如何传递对象给 C; 而 C 又如何将数据封装成 Java 所需的对象。 1. 基本数据类型 传递 java 的基本类型是非常简单而直接的,一个 jxxx 之类的类型已经定义在本地系统中了,比如:jint, jby…

认识ASP.NET MVC的5种AuthorizationFilter

一、IAuthorizationFilter 所有的AuthorizationFilter实现了接口IAuthorizationFilter。如下面的代码片断所示,IAuthorizationFilter定义了一个OnAuthorization方法用于实现授权的操作。作为该方法的参数filterContext是一个表示授权上下文的AuthorizationContext对…

FasterTransformer 004 open_attention.h forward

initialize forward() https://github1s.com/NVIDIA/FasterTransformer/blob/v1.0/fastertransformer/cuda/open_attention.h#L149-L217 使用cuBLAS库执行矩阵乘法运算,并对cublasGemmEx()进行三个单独的调用。这些操作包括将属性核与输入张…

【社区图书馆】《看漫画学Python:有趣、有料、好玩、好用(全彩修订版)》

背景 Python是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要,成为国家计算机等级考试科目,某些中小学也开设了Python编程课程。本书秉承有趣、有料、好玩…

SpringCloud服务注册与发现组件Eureka(五)

Eureka github 地址: https://github.com/Netflix/eureka Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring…

【Android -- JNI 和 NDK】JNI 基础知识以及如何使用

JNI 基础知识 我们来系统梳理一下JNI中涉及的基本知识。 JNI定义了以下数据类型,这些类型和Java中的数据类型是一致的: Java原始类型:jint, jbyte, jshort, jlong, jfloat, jdouble, jchar, jboolean这些分别对应这 java 的int, byte, shor…

css 包含块

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

微服务springcloud 02 创建项目中的三个service子系统,springcloud中注册中心Eureka介绍和把三个系统注册到Eureka中

item service项目 01.使用springboot创建项目 02.选择依懒项在这里插入代码片 spring web 03.添加sp01-commons依赖 在pom.xml文件中 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" x…

【色度学】光学基础

1. 光的本质 &#xff08;1&#xff09;波长不同的可见光&#xff0c;引起人眼的颜色感觉不同。 &#xff08;2&#xff09;人们观察到的颜色是物体和特有色光相结合的结果&#xff0c;而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色&#xff08;1&#xff0…

NIO 基础

3. 文件编程 non-blocking io 非阻塞 IO 1.1 Channel & Buffer channel 类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入&#…