Ansible自动化运维之ansible的环境部署 && ansible中的ad-hoc命令

1.Anaible的部署

1.1 实验说明

准备三台虚拟机,并且让虚拟机能上网

主机角色ip
server1ansible服务端172.25.3.1
server2ansible客户端172.25.3.2
server3ansible客户端172.25.3.3

1.2 基础配置

在server1:

(1)搭建国内镜像yum源

[root@server1 yum.repos.d]# vi lin.repo 
[rhel7]  ##本地镜像,安装ansible需要安装python
name=rhel7
baseurl=http://172.25.254.3/rhel7.3/
gpgcheck=0

[epel]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64
gpgcheck=0

(2)下载ansible

[root@server1 ~]# yum install -y ansible

(3)配置ansible服务:

[root@server1 ansible]# pwd ##ansible配置文件
/etc/ansible
[root@server1 ansible]# ls
ansible.cfg ##全局配置文件 hosts  roles
[root@server1 ~]# cd  /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts  roles
[root@server1 ansible]# vi hosts ##编写全局变量文件,让server2,server3做ansible的客户端
     45 [test]
     46 172.25.3.2
     47 172.25.3.3

##不需要重启服务之类的,ansible是一个工具

模块基础测试:

  • ping模块测试连通性
[root@server1 ansible]# ansible test -m ping ##连接失败,因为没有输入密码
[root@server1 ansible]# ansible test -m ping -k  ##连接成功,-k 输入密码参数


[root@server1 ansible]# ansible test -a hostname -k
SSH password: 
172.25.3.2 | CHANGED | rc=0 >>
server2

172.25.3.3 | CHANGED | rc=0 >>
server3

在这里插入图片描述

  • comand模块测试命令
[root@server1 ansible]# ansible test -a df -k
SSH password: 
172.25.3.3 | CHANGED | rc=0 >>
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root  17811456 1090796  16720660   7% /
devtmpfs                 497292       0    497292   0% /dev
tmpfs                    508264       0    508264   0% /dev/shm
tmpfs                    508264    6764    501500   2% /run
tmpfs                    508264       0    508264   0% /sys/fs/cgroup
/dev/sda1               1038336  141512    896824  14% /boot
tmpfs                    101656       0    101656   0% /run/user/0

172.25.3.2 | CHANGED | rc=0 >>
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root  17811456 1090904  16720552   7% /
devtmpfs                 497292       0    497292   0% /dev
tmpfs                    508264       0    508264   0% /dev/shm
tmpfs                    508264    6764    501500   2% /run
tmpfs                    508264       0    508264   0% /sys/fs/cgroup
/dev/sda1               1038336  141512    896824  14% /boot
tmpfs                    101656       0    101656   0% /run/user/0

在这里插入图片描述

1.3 全平台一致配置

试想我们用超级用户来只加入ansible管理,则ansible服务端必定需要客户端的超户密码,这并不安全,所以我门一般情况下建立devops用户来参与ansible的管理

  • 建立相同的用户
[root@server1 ~]# useradd devops
[root@server2 ~]# useradd devops
[root@server2 ~]# echo westos | passwd devops --stdin

[root@server3 ~]# useradd devops
[root@server3 ~]# echo westos | passwd devops --stdin
  • 安全方便起见,服务器间做免密 ,客户端作加密
[devops@server1 ~]$ ssh-keygen
[devops@server1 ~]$ ssh-copy-id server2
[devops@server1 ~]$ ssh-copy-id server3

## 客户端可用 passwd -l devops 命令做拒绝ssh连接
  • 对devops用户授权
## 三台server都做 全平台一致
[root@server2 ~]# visudo ##visudo 有语法监测
     92 devops  ALL=(ALL)       NOPASSWD: ALL
visudo: /etc/sudoers.tmp unchanged

devops用户测试:

执行命令时需要使用sudo给 devops用户权限,所以执行命令时需要加 -b 参数 ;若不想加参数,可以修改配置文件,使其默认使用sudo
在这里插入图片描述
在这里插入图片描述

  • 在devops用户的家目录建立配置文件并配置
[devops@server1 ~]$ pwd
/home/devops
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ ls 
ansible
[devops@server1 ansible]$ ls
ansible.cfg  hosts
 [devops@server1 ansible]$ cat ansible.cfg  ##仿照默认配置文件编写
[defaults]  ##默认识别组
inventory = ./hosts ##识别当前目录下的hosts文件

[privilege_escalation] ##使用visudo 
become=True
become_method=sudo
become_user=root
become_ask_pass=False

[devops@server1 ansible]$ cat hosts  ##ansible客户端组
[test]
172.25.3.2
172.25.3.3

测试:
在这里插入图片描述

2. ansible 配置文件

2.1 Inventory文件配置

  • Inventory是ansible管理主机信息的配置文件,相当于系统的hosts文件的功能,默认存放在/etc/ansible/hosts

  • 主机和组的定义
    [ ]中括号表示一个组,也可以表示一个范围

一个栗子:
[weberver]  ##webserver组
www[1:10].example.com  ##表示主机www1.example.com到主机www10.example.com中所有的主机
db-[a:f].example.com  ##表示dba.example.com到dbf.example.com中所有主机
  • 个性化定义主机变量
在playbook中使用时对主机进行个性化定制
[webserver]
web1 http_port=8080 maxRequestsPerChild=1024```

定义组变量
[webserver]
server2
server3

[webserver:vars]
ntp_server=time1.aliyun.com

webserver组中的所有主机ntp_server值为time1.aliyun.com
  • 嵌套定义组
    在这里插入图片描述

2.2 ansible中的变量配置

变量可以定义在

  • (1)inventory配置文件中
  • (2)playbook中vars块中
  • (3)roles角色中的vars目录下
  • (4)roles角色同级目录的group_vars和hosts_vars目录下

##为了方便维护,在配置变量时尽量沿用一种配置方式定义

变量的设定规范:
  • 在".j2"模板文件中变量使用{{}} 括起来表示变量的设定
    eg:
    在这里插入图片描述
  • 在inventory配置文件中或者在其他vars声明变量中,需要给括号带上" ",即:"{{}}"
    eg:
    在这里插入图片描述

2.3 配置文件优先级

  • ansible共有三个配置文件目录
    (1)/etc/ansible 系统默认ansible配置目录
    (2)/home/devops/.ansible devops用户主目录下隐藏配置目录
    (3)/home/devops/ansible 自建家目录配置目录
  • 优先级
    权限最大的是当前目录 其次是用户主目录 最后是全局配置文件

3. ansible中的ad-hoc命令

3.1 ad-hoc的使用场景

  • Ansible提供两种方式完成任务:
    (1)ad-hoc命令
    (2)ansible-playbook(剧本)
  • ad-doc更注重解决一些简单或者平时工作中遇到的任务,相当于LInux系统命令下的shell命令,后者更适合于解决复杂或者固化下来的任务,相当于Linux中的Shell Scripts
  • 使用场景:
    (1) 关闭所有不必要的服务器
    (2)临时更新Apache或Nginx的配置文件

3.2 ansible常用命令参数

ansible --help 查看命令参数帮助

参数作用
-m匹配模块 ##默认为command模块
-a模块匹配参数
-u指定ssh连接用户 ##默认连接root
-b使用sudo
-k提示输入ssh登录密码,当使用密码验证的时候用
-C只是测试一下会改变什么内容,不会真正去执行
-ffork多少进程并发处理,默认为5个
-i指定hosts文件路径,默认default=/etc/ansible/hosts
-Tssh连接超时时间,默认是10秒
-t日志输出到该目录,日志文件名以主机命名
-v显示详细日志
Ansible命令示例:
  • 以devops用户执行ping存活检测
ansible all -m ping -u devops
  • 以devops sudo至root执行ping存活检测
ansible all -m ping -u devops -b
  • 以devops sudo 至kiosk用户执行ping存活检测
ansible all -m ping -u devops -b --become-user kiosk

3.3 ansible与正则

  • 匹配所有主机(all或*功能相同)
ansible all   -m   ping    
ansible “*”    -m   ping 

在这里插入图片描述

  • 对多台主机或多个组同时执行(相互之间用:分隔即可)
ansible "web2:web1" -m ping

在这里插入图片描述

  • 在web2组但不在web1组的主机(用!表示)
ansible 'web2:!web1' -m ping

在这里插入图片描述

  • 在webserver组和database组中同时存在的主机(用&符号表示)
ansible 'test:&web1' -m ping

在这里插入图片描述

  • 模糊匹配(*)
ansible '172.25.3.*' -m ping

在这里插入图片描述

3.4 ansible命令内部执行流程

在服务端执行ad-hoc命令实质上是发送给客户端,在客户端执行,再将执行结果返回给服务端;服务端只是接收并将接收结果显示给操作人员
在这里插入图片描述

3.5 ansible-doc的用法

  • ansible的模块非常之多,ansible也提供了类似于man功能的help说明工具ansible-doc;主要用于获取不同模块帮助

  • 可用于显示所有可用模块 ansible-doc -l

  • 获取xxx模块的帮助 ansible-doc xxx

[devops@server1 ansible]$ ansible-doc -l | wc -l
[WARNING]: win_template parsing did not produce documentation.
[WARNING]: template parsing did not produce documentation.
3387
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值