ansible批量部署(代码片段)

xmtxh xmtxh     2023-04-24     697

关键词:

自动化运维工具
shell脚本/Ansible(无客户端)/Saltstack(master-minion)

回顾服务器部署的流程:
买云主机->环境部署->软件部署->配置部署->启动服务->测试->加入集群

 

1.Ansible基本概述
ansible是一个配置管理系统configuration management system你只需要可以使用ssh访问你的服务器或设备就行

Ansible能做什么
可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

Ansible软件特点
1.ansible不需要单独安装客户端,SSH相当于ansible客户端
2.ansible不需要启动任何服务,仅需安装对应工具即可
3.ansible依赖大量的python模块实现批量管理
4.ansible配置文件/etc/ansible/ansible.cfg

Ansible基础架构

技术图片

1.连接插件(connector plugins)用于连接主机 用来连接被管理端
2.核心模块(core modules)连接主机实现操作,它依赖于具体的模块来做具体的事情
3.自定义模块(custom modules)根据自己的需求编写具体的模块
4.插件(plugins)完成模块功能的补充
5.剧本(playbooks) ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6.主机清单(host inventory)定义ansible需要操作主机的范围
最重要的一点是ansible 事模块化的 它所有的操作都依赖于模块

 

2.Ansible配置

环境部署

m01    172.16.1.71   ansible管理端
backup 172.16.1.51   ansible受控端
nfs    172.16.1.41   ansible受控端
web01  172.16.1.7    ansible受控端
1).安装ansible
一定先部署好epel源
[root@m01 ~]# yum install ansible
查看版本
[root@m01 ~]# ansible --version
ansible 2.9.2

2).ssh部署公钥
[root@m01 ~]# ssh-keygen -t rsa -P ‘‘ -f ~/.ssh/id_rsa -C anlione
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41 
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7

3).配置ansible主机清单
主机清单配置文件/etc/ansible/hosts
[root@m01 ~]# vim /etc/ansible/hosts 
....
[oldboy]
172.16.1.7
172.16.1.51
172.16.1.41

4)验证ansible
[root@m01 ~]# ansible oldboy -m ping
172.16.1.7 | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python"
    , 
    "changed": false, 
    "ping": "pong"

172.16.1.51 | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python"
    , 
    "changed": false, 
    "ping": "pong"

172.16.1.41 | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python"
    , 
    "changed": false, 
    "ping": "pong"


[root@m01 ~]# ansible oldboy -m command -a "hostname"
172.16.1.41 | CHANGED | rc=0 >>
nfs

172.16.1.51 | CHANGED | rc=0 >>
backup

172.16.1.7 | CHANGED | rc=0 >>
web01

 

3.Ansible清单管理
inventory文件通常用于定义管理主机的认证信息,例如ssh登录用户名、密码以及key相关信息。如何配置inventory文件

主机
1.支持主机名通配以及正则表达式,例如web[1:3].oldboy.com
2.支持基于非标准的ssh端口,例如web01.oldboy.com:6666
3.支持指定变量,可对个别主机特别配置,如登录用户,密码等

主机组
1.支持嵌套组,例如[oldboy:children],那么在oldboy模块下面的组都会被game所包含
2.支持指定变量,例如[oldboy:vars]在下面指定变量

//指定主机组
[backup]
172.16.1.51
[nfs]
172.16.1.41
[web]
172.16.1.7
[oldboy:children]
nfs
backup
web
验证:
ansible oldboy -m ping
ansible nfs -m ping 
ansible backup -m ping

//指定变量
[oldboy]
172.16.1.7
172.16.1.51
172.16.1.41
[oldboy:vars]
ansible_ssh_pass=123456

Ansible内置变量

技术图片

 

4.Ansible常用模块
安装软件包
修改配置文件
创建程序用户组
创建程序用户组
创建目录,并修改所属和权限
启动服务
挂载
测试

在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令为playbook

Ansible注意事项->提示颜色信息说明

翔黄色:对远程节点进行相应修改
帽子绿:对远程节点不进行相应修改,或者只对远程节点信息进行查看
深红色:操作执行命令有异常
浅紫色:表示对命令执行发出警告信息(可能存在的问题,给你一下建议)

1.command模块和shell模块

# 默认模块,执行命令
[root@m01 ~]# ansible oldboy -a "hostname"
# 如果需要一些管道操作,则使用shell
[root@m01 ~]# ansible oldboy -m shell -a "df -h | grep /$" -f 3
 
# -f =forks /etc/ansible/ansible.cfg #结果返回的数量
注意:command和shell模块的区别:
    command只能调用一条指令
    shell可以使用管道
    不支持别名

举例:统一创建用户oldboy,并修改密码为123

[root@m01 ~]# ansible oldboy -m shell -a "useradd oldboy"
[root@m01 ~]# ansible oldboy -m command -a "echo 123 | passwd --stdin oldboy"
172.16.1.41 | CHANGED | rc=0 >>
123 | passwd --stdin oldboy

172.16.1.51 | CHANGED | rc=0 >>
123 | passwd --stdin oldboy

172.16.1.7 | CHANGED | rc=0 >>
123 | passwd --stdin oldboy
    
[root@m01 ~]# ansible oldboy -m shell -a "echo 123 | passwd --stdin oldboy"

 

2.yum模块

[root@m01 ~]# ansible web -m yum -a "name=httpd state=installed"
name   ---指定要安装的软件包名称,如果有多个,用","隔开
state  ---指定使用yum的方法
     installed,present   --安装软件包
     removed,absent      --移除软件包
     latest              --安装最新软件包     

 

3.copy模块

# 推送文件模块
[root@m01 ~]# ansible oldboy -m copy -a "src=/tmp/test dest=/etc/hosts"

# 在推送覆盖远程端文件前,对远端已有文件进行备份,按照时间信息备份
[root@m01 ~]# ansible oldboy -m copy -a "src=/tmp/test dest=/etc/hosts backup=yes"

# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
[root@m01 ~]# ansible oldboy -m copy -a "content=‘oldboy‘ dest=/tmp/oldboy"

src       ---推送数据的源文件信息
dest      ---推送数据的目标路径
backup    ---对推送传输过去的文件,进行备份
content   ---直接批量在管理端文件中添加内容
group     ---将本地文件推送到远端,指定文件属组信息
owner     ---将本地文件推送到远端,指定文件属主信息
mode      ---将本地文件推送到远端,指定文件权限信息

案例1:批量推送hosts文件,并备份

cat: /etc/host: 没有那个文件或目录
[root@m01 ~]# cat /etc/hosts
172.16.1.7  web01
172.16.1.41 nfs
172.16.1.51 backup
172.16.1.71 m01

[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes"

案例2:添加rsync认证文件和rsync客户端密码

添加rsync服务端认证文件
[root@m01 ~]# ansible backup -m copy -a "content=‘rsync_backup:1‘ dest=/etc/rsync.passwd group=root owner=root mode=600"
验证:
[root@m01 ~]# ansible backup -m shell -a "ls -l /etc/rsync.passwd"
172.16.1.51 | CHANGED | rc=0 >>
-rw------- 1 root root 14 1月  24 23:32 /etc/rsync.passwd

[root@m01 ~]# ansible backup -m shell -a "cat /etc/rsync.passwd"
172.16.1.51 | CHANGED | rc=0 >>
rsync_backup:1


添加rsync客户端密码文件
[root@m01 ~]# ansible oldboy -m copy -a "content=‘1‘ dest=/etc/rsync.pass group=root owner=root mode=600"
验证:
[root@m01 ~]# ansible oldboy -m shell -a "cat /etc/rsync.pass"
172.16.1.7 | CHANGED | rc=0 >>
1

[root@m01 ~]# ansible oldboy -m shell -a "ls -l /etc/rsync.pass"
172.16.1.41 | CHANGED | rc=0 >>
-rw------- 1 root root 1 1月  24 23:35 /etc/rsync.pass

 

4.service模块

[root@m01 ~]# ansible oldboy -m service -a "name=crond state=started enabled=yes"

name      # 定义要启动服务的名称
state     # 指定服务状态时停止或是允许,停止和运行指令要写过去时
    started   # 启动
    stopped   # 停止
    restarted # 重启
    reloaded  # 重载
enabled   # 是否让服务开启自启动   

案例1:启动web01的httpd服务,并添加一个首页文件,通过浏览器可以访问

[root@m01 ~]# ansible web -m service -a "name=httpd state=started enabled=yes"
[root@m01 ~]# ansible web -m copy -a "content=‘11111‘ dest=/var/www/html/index.html"

 

ansible批量部署平台(代码片段)

Ansible介绍以及基本命令Ansible简介:Ansible和目前市面上一些其他的项目管理工具有很大的不同,它的设计初衷就是为了更方便、快捷的进行配置管理。它易于安装和实用,语法也非常简单易学。可以使用Ansible将平常复杂的配置... 查看详情

ansible基本介绍(代码片段)

一、基础知识:1.简介      ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。   ... 查看详情

ansible批量部署(代码片段)

自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion)回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署->启动服务->测试->加入集群 1.Ansible基本概述ansible是一个配置管理系统configurationmanage... 查看详情

源码安装ansible(代码片段)

一、Ansible介绍ansible是一款的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批... 查看详情

ansible简介(代码片段)

什么是ansible   ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。     ansible是基于para... 查看详情

自动化运维工具ansible的详细部署(代码片段)

Ansible的来历Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 Ansible是基于paramiko开发的,并且基于模块化工... 查看详情

ansible系统概述与部署(代码片段)

title:Ansible系统概述与部署(1)date:2018-12-0110:27:03tags:Ansiblecategories:Ansiblecopyright:true---Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部... 查看详情

ansible简介与实验(代码片段)

 一、简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批... 查看详情

自动化运维之ansible的安装部署与命令模块(代码片段)

Ansible简介Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量... 查看详情

集中化管理平台ansible详解(代码片段)

什么是ansible?ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台.它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置... 查看详情

运维自动化工具ansible(代码片段)

一、基础知识:1.简介ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible运行的模块... 查看详情

自动化运维之详细部署安装ansible服务(超简单)(代码片段)

简介:ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署... 查看详情

[自动化]部署ansible服务及其常用的命令模块(代码片段)

Ansible简介:Ansible基于Python开发,默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,可同时支持多台主机进行管理。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible... 查看详情

ansible架构介绍及部署(代码片段)

Ansible架构模式Ansible是由控制机和被管理机组成:控制机是用来安装Ansible工具软件和执行指令的服务器,被管理机是指运行业务的服务器,由控制机通过SSH进行管理。Ansible管理方式Ansible是一个模型驱动管理器,支持多节点发布... 查看详情

ansible批量部署zabbix-agent(代码片段)

zabbix_agent.yml文件:----hosts:zabbix-agentvars:-zabbix_server:192.168.1.100tasks:-name:addzabbixrepo-Centos7yum_repository:name:zabbixdescription:zabbixrepobaseurl:http://repo.zabbix.com/zabbix/4.0/rhe 查看详情

ansible学习一之初识(代码片段)

一、Ansible是什么 下面仅仅Ansible的主要功能的一个简要的介绍,详细了解的话参考官网Ansible是一款自动化运维工具,可以实现批量系统配置、程序部署、运行命令等配置管理和应用部署的功能Ansible是基于Paramiko开发的,并且... 查看详情

[转帖]ansible批量远程管理windows主机(部署与配置)(代码片段)

2018-09-1212:04:42 https://blog.51cto.com/7424593/2174156 一、测试环境介绍Ansible管理主机:系统:  CentOS6.8IPAddr:172.16.10.22 Linux管理服务器需安装pip、pywinrm插件 Windows客户端主机:    查看详情

自动化运维之ansible安装及命令使用(代码片段)

Ansible介绍ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于paramiko开发的,并且基于模块化工作,... 查看详情