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

docker ansible与剧本模式_第1张图片

由于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

 Systemd:name=httpd state=started enabled=yes

Handlers:

- name: restart httpd

  Systemd: naem=httpd state=restarted

docker ansible与剧本模式_第2张图片

你可能感兴趣的:(docker,ansible,运维)