前言

运维工程师的核心职能

  • 平台架构组件
  • 日常运营保障
  • 性能、效率优化

运维工作

系统安装 --> 程序包安装、配置、服务启动 --> 批量操作 --> 程序发布 --> 监控

程序发布的注意事项:
 不能影响用户体验;
 系统不能停机;
 不能导致系统故障或造成系统完全不可用;
 一般都是 灰度发布 程序,影响的只是一小部分的用户。

ansible的特性

  • 模块化
  • 基于Python语言开发,ParmikePtYAMLJinja2三个关键模块
  • 部署简单,agentless(无代理)
  • 支持主从模式
  • 支持自定义模块
  • 支持Palybook(剧本)
  • 基于SSH(安全)
  • 幂等性

ansible的配置文件

/etc/ansible/ansible.cfg    #主配置文件
/etc/ansible/hosts  #主机清单
/etc/snsible/roles/ #角色清单,Palybook

一、ansible的基础使用

ansible基于ssh控制其他主机,需要进行密钥认证。而不是密码认证,否则每次都将输入密码。

安装ansibe

yum install ansible -y

基本语法

ansible 主机 -m 模块 -a 'ages'

主控主机生成key


把公钥复制受控主机上
添加主机清单

vim /etc/ansible/hosts

[websrvs]
172.16.10.10
172.16.10.20
[dbsrvs]
172.16.200.52
172.16.10.10
#代表定义主机组

主机调用方法

~]# ansible 172.16.10.10 -m ping

表示只对172.16.10.10ping

~]# ansible websrvs -m ping

表示只对websrvs中的主机发ping

~]# ansible 'websrvs:dbsrvs' -m ping

逻辑与,表示对两个组都发出ping

~]# ansible 'websrvs:&dbsrvs' -m ping

逻辑与,表示两个组中都包含的主机

~]# ansible 'websrvs:!dbsrvs' -m ping

逻辑非,表示websrvs中有,但不能出现再dbservs中

二、模块使用

 默认模块是command

1. ping

测试主机连通性

~]# ansible all -m ping #测试主机清单中所有主机的连通性

2. comamnd

用于批量执行命令,-m command可省

~]# ansible all -a 'hostname'   #获取所有主机的hostnmae

直接将命令指明 -a 'COMMAND'

removes
文件不存在就不进行在一步

~]# ansible 172.16.10.10 -a 'removes=/data/file touch /data/f2'
#表示file不存在就不执行touch命令

creates
文件不存在就进行下一步

~]# ansible 172.16.10.10 -a 'creates=/data/file touch /data/f3'
#表示/data/file不存在就执行touch

chdir
切换至指定文件夹执行命令

~]# ansible 172.16.10.10 -a 'chdir=/data ./test.sh'
#表示再data目录执行 ./test.sh

command模块不支持一些特殊字符,如“*”,“|”等等

3. shell

同样也是用于执行命令的模块,它支持特殊字符,建议使用直接使用shell模块,同样支持command的参数。

~]# ansible 172.16.10.10 -m shell -a 'rm -f /data/*'
#该命令是comman不能实现的,因为含有"*"特殊字符

用法和command相似

4. script

将本地脚本推送至所有主机运行
例如:在/opt下有一个脚本,test.sh

#!/bin/bash
#
hostname

此时推送到所有主机运行

~]# ansible all -m script -a '/opt/test.sh'

支持参数和command相似

5. copy

复制文件到受控主机

backup=yes  #表示原有文件备份
src=/path/to/file   #本地源文件
dest=/path/to/file  #存放受控主机的位置
mode=#  #设置文件权限
owner=user #设置文件所有者
group=groupNAME #设置文件的属组
content="Text"  #不指定本地文件,直接生成文件,这里就是定义文件的内容

例如:拷贝/data/test文件到受控主机的/tmp/下

~]# ansible all -m copy -a 'src=/data/test dest=/tmp/test backup=yes owner=admin group=admin'
#如果文件存在需要备份,属组和属主为admin

例如:创建新文件,内容为Hello \n Hi \n,保存在受控端的tmp目录下,名为new

~]# ansible all -m copy -a 'content="Hello\nHi\n" dest=/tmp/new'

6. fetch

抓取受控主机的文件,缺点是一次只能抓取一个文件。对于多个文件需要打包再抓取

src=/path/to/file   #远程目标文件
dest=/path/to/file  #本地存放路径

例如:抓取所有主机的messages文件到本地/data目录

~]# ansible all -m fetch -a 'src=/var/log/messages dest=/data'

7. file

文件管理模块

path=/path/to/file  #文件/文件夹 存放位置
mode=#  #设置文件权限
owner=  #文件属主
state=touch|adsent|directory|link   #分别是新建,删除,建立文件夹,创建软连接

示例:所有受控主机新建文件file-test,其他用户不可读写

~]# ansible all -m file -a 'path=/data/file-test state=touch mode=660'

删除文件

~]# ansible all -m file -a 'path=/data/file-test state=absent'

新建目录

~]# ansible all -m file -a 'path=/data/dir1 state=directory'

删除目录

~]# ansible all -m file -a 'path=/data/dir1 state=absent'

创建软连接

~]# ansible all -m file -a 'src=/etc/fstab dest=/data/fstab-link state=link'

删除软连接

~]# ansible all -m file -a 'dest=/data/fstab-link state=absent'

删除一个文件夹下的全部文件

~]# ansible all -m shell -a 'rm -f /data/*'

8. hostname

设置受控主机的主机名,注意这样只能一个一个设置,全部设置主机名将相同。且设置的主机名是永久有效的。

示例:设置172.16.10.10的主机名为node3

~]# ansible 172.16.10.10 -m hostname -a 'name='node3'

9. cron

计划任务的创建

minute=     #分钟,范围0-59,*表示每分钟
hour=   #小时,范围0-23, *表示每小时
day=    #天,范围1-31,*表示每天
weekday=    #星期,范围0-6,*表示每tian
month=  #月,范围1-12,*表示每个月

jod #执行任务
name    #计划任务的名称

创建计划任务

~]# ansible all -m cron -a 'mintue=* jod="/usr/bin/wall Wrning" name="Wrning"'
#没分钟发出一次广播,内容为"Wrning"

禁用计划任务

~]# ansible all -m cron -a 'disabled=yes jod="/usr/bin/wall Wrning" name="Wrning"'
#jod和name必须指明,不然不能正常禁用,启用直接把yes改为no

删除计划任务

~]# ansible all -m cron -a 'jod="/usr/bin/wall Wrning" name="Wrning" state=absent'

10. yum

软件包的管理(安装/卸载/升级/查看)
查看包

~]# ansible all -m yum -a 'list=httpd'  #查看是否安装httpd
~]# ansible all -m yum -a 'list=installed'  #查看已经安装的包

安装包

~]# ansible all -m yum -a 'name=vsftpd,httpd'   #表示同时安装vsftpd和httpd

卸载包

~]# ansible all -m yum -a 'name=vsftpd,httpd state=removed' #删除这两个包

安装rpm本地包

~]# ansible all -m copy -a 'src=/data/rpm包名 dest=/tmp/rpm包名'
#先将rpm包推送到受控主机
~]# ansible all -m yum -a 'name=/tmp/rpm包名'
#安装rpm包

忽略key的检查

~]# ansible all -m yum -a 'name=/tmp/rpm包名 disable_gpg_check=yes'

更新缓存

~]# ansible all -m yum -a 'name=dstat update_cache=yes' #只能在安装软件时进行更新

11. service

服务管理(启动/停止/重载/开机自启)

name=   #服务名
enabled=yes|no  #是否开机启动
state=
    started #启动
    stopped #停止
    restarted   #重启
    reloaded    #重载

启动服务,允许开机启动

~]# ansible websrvs -m  service -a 'name=httpd enabled=yes state=started'   #启动服务,开机自启

12. user

用户管理(增/删/改)

name=   #用户名
shell=  #指定shell
home=   #指定家目录
system=yes|no   #是否为系统用户
uid=    #指明uid
groups= #附加组,多个逗号隔开
group=  #主组
remove=yes  #删除家目录

添加用户

~]# ansible all -m user -a 'name=nginx shell=/sbin/nologin home=/var/nginx system=yes groups=admin,root'    #添加用户nginx,指明shell,home和附加组

修改用户

~]# ansible all -m user -a 'name=nginx shell=/sbin/nologin home=/var/nginx system=no groups=admin,root' #改为不是系统用户

删除用户

~]# ansible all -m user -a 'name=nginx state=absent remove=yes'

同时删除家目录

13. group

组管理((增/删/改))
添加组

~]# ansible all -m group -a 'name=admin system=yes gid=102'

添加组为系统组,名称为admin,gid为102
修改组

~]# ansible all -m group -a 'name=admin system=no id=1002'

删除组

~]# ansible all -m group -a 'name=admin state=absent

3. setup

显示受控端的状态信息,包括ip,架构等等

~]# ansible websrvs -m setup
~]# ansible 172.16.10.10 -m setup -a 'filter=ansible_fqdn'  #过滤,只显示fqdn(全名)
~]# ansible 172.16.10.10 -m setup -a 'filter=ansible_hostname'  #过滤,只显示hostname

以上都是常用的模块


END

Hello World

最后修改:2019 年 11 月 26 日 03 : 10 PM
如果觉得我的文章对你有用,请随意赞赏