天天看点

ansible--基本使用(一)

关于 ansible的基本使用

     官方的话不会说,基本都是自己理解的。有误请指出 谢谢 O(∩_∩)O

     ansible工具,原理就是通过ssh协议远程连接到对方的主机上,将本地的脚本(模块) 拷贝过去并执行你写好的命令的一个工具

 考虑到服务器上yum源大部分不能使用,这里rpm安装

链接:https://pan.baidu.com/s/1YfEiWwB-NOXnCG0aXHYEHg

提取码:kp9l

复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V5的分享

主机规划

    192.168.1.20      centos7.6   主控端

    192.168.1.21      centos7.6   被控端

    192.168.1.22      centos7.6   被控端

环境初始化(所有主机)

#关防护墙
systemctl stop firewalld && systemctl disable firewalld


#检测虚拟内存是否关闭,因为防止容器运行再虚拟内存
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config


#不使用本地源,改用阿里源(虽然慢了点,但不是很缺东西)
cd /etc/yum.repos.d/ && mkdir backup && mv * backup

#拉取阿里源
wget -O/etc/yum.repos.d/aliyun-yilai.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#(没有设置虚拟机联通外网的可能会做不了这步),后续会写个专门设置网络的

#清除阿里云yum源内网域名
sed -i '/mirrors.cloud.aliyuncs.com/d' /etc/yum.repos.d/aliyun-yilai.repo 
#阿里云为了节省外网流量,切换为阿里云编辑好的centos镜像源时会带有内网镜像源域名
#外网用户虽然功能不会受到影响,但是会报Couldn't resolve host 'mirrors.cloud.aliyuncs.com'
#影响速度,故去掉


#重新建立缓存
yum clean all 
yum makecache   #这个会有点慢

           

1. 安装 ansible (版本2.9.9)

#上传软件包
[root@k8s-master01 ~]# ls
ansible.zip

[root@k8s-master01 ~]# pwd
/root

#解压ansible.zip
unzip ansible.zip

#本地安装
yum -y localinstall *
           
ansible--基本使用(一)
#登陆配置目录
[root@k8s-master01 ansible]# cd /etc/ansible/
[root@k8s-master01 ansible]# ls
ansible.cfg  hosts  roles

#文件含义
ansible.cfg   #ansible配置文件,默认基本不用动,全注释
hosts         #主机清单文件,存放被控端主机信息, 默认指定的hosts文件
roles         #自带的角色目录,目前为空
           

修改ansible配置

[root@k8s-master01 ansible]# vim ansible.cfg 
#修改
71 host_key_checking = False    #将注释去掉

#作用: 类似于,在ssh对方主机的时候需要输入yes,这里开启后不需要输入yes           
ansible--基本使用(一)

添加主机列表清单

[root@k8s-master01 ansible]# vim hosts 
#添加
[web]
192.168.1.20 ansible_ssh_user=root ansible_ssh_pass=123
192.168.1.21 ansible_ssh_user=root ansible_ssh_pass=123
192.168.1.22 ansible_ssh_user=root ansible_ssh_pass=123

#含义
192.168.1.20           #被控端主机ip
ansible_ssh_user=root  #ssh中setup模块的系统变量,指定为远程主机的用户为root
ansible_ssh_pass=123   #同上,为远程主机的root的密码
            

1. 使用ping模块检测所有主机是否存活

#执行
ansible -i hosts web -m ping


#语句含义
-i hosts web     #指定我们ansible工具针对的是 hosts主机文件中的  web组下的节点进行操作
-m ping          #-m  指定使用的模块为ping,用于检测主机,返回pong           
ansible--基本使用(一)

列出主机清单

[root@k8s-master01 ansible]# ansible all --list
  hosts (3):
    192.168.1.20
    192.168.1.21
    192.168.1.22
           

#查看模块帮助

#查看详细帮助
ansible-doc ping

#查看简单帮助信息
ansible-doc -s ping           

2. ansible命令执行的过程说明

1. ansible会先加载配置/etc/ansible/ansible.cfg文件

2. 然后加载模块文件(如上面的ping模块)

3. ansible会将我们执行的命令或模块,生成一个临时的python的脚本文件,将这个脚本文件发送到被控端的家目录/.ansible/tmp/目录下,并授权执行

4. 执行完成后返回执行结果,并清除临时文件

 我们来抓一下看看

ansible  web -a "sleep 10"           
ansible--基本使用(一)

3. 常用模块

1. command 模块

说白了,这个模块就是相当于我们平时使用命令的习惯,比如ls、cd、pwd、cp、mv操作等等都可以实现

并且该模块是默认附加的,也就是说。即使你不加-m command 也可以使用

案例 1

#查看web组所有主机下,/root目录内容
ansible -i hosts web -a "ls /root"

#-a 是代表要执行的命令,相当于在所有主机上执行的           

返回

[root@k8s-master01 ansible]# ansible -i hosts web -a "ls /root"
192.168.1.22 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg

192.168.1.20 | CHANGED | rc=0 >>
ansible
ansible.zip
anaconda-ks.cfg
initial-setup-ks.cfg

192.168.1.21 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg
           

案例2

[root@k8s-master01 ansible]# ansible -i hosts web -m command -a "ls /root"
192.168.1.22 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg

192.168.1.21 | CHANGED | rc=0 >>
anaconda-ks.cfg
initial-setup-ks.cfg

192.168.1.20 | CHANGED | rc=0 >>
ansible
ansible.zip
anaconda-ks.cfg
initial-setup-ks.cfg

#可以看到,效果是一样的,但是为了养成习惯我们还是加上-m command来使用           

错误案例

#command模块是不支持正则及特殊符号的
[root@k8s-master01 ansible]# ansible -i hosts web -m command -a "echo 11 > /mnt/1.txt"
192.168.1.21 | CHANGED | rc=0 >>
11 > /mnt/1.txt
192.168.1.22 | CHANGED | rc=0 >>
11 > /mnt/1.txt
192.168.1.20 | CHANGED | rc=0 >>
11 > /mnt/1.txt

#好像看起来执行成功了,我们来看看是否成功
[root@k8s-master01 ansible]# ansible -i hosts web -m command -a "ls /mnt"
192.168.1.21 | CHANGED | rc=0 >>

192.168.1.20 | CHANGED | rc=0 >>

192.168.1.22 | CHANGED | rc=0 >>

#可以看到是空的,没有创建出文件.因为他不支持特殊符号的使用
有一个解决方法shell模块           

2. shell 模块

  shell模块和command模块类似,但是却支持正则及特殊符号。非常好用,一度让我不再使用command  2333~
[root@k8s-master01 ansible]# ansible -i hosts web -m shell -a "echo 11 > /mnt/1.txt"
192.168.1.22 | CHANGED | rc=0 >>

192.168.1.21 | CHANGED | rc=0 >>

192.168.1.20 | CHANGED | rc=0 >>

[root@k8s-master01 ansible]# ansible -i hosts web -m shell -a "ls /mnt"
192.168.1.21 | CHANGED | rc=0 >>
1.txt
192.168.1.22 | CHANGED | rc=0 >>
1.txt
192.168.1.20 | CHANGED | rc=0 >>
1.txt


#可以看到,很好用哦~           

3.  copy模块

     一听名字就知道,肯定是拷贝文件用的啦。 

     没啥说的,就是从ansible主机上把文件发送到被控端主机上

#创建文件
touch test

#执行命令
ansible -i hosts web -m copy -a "src=test dest=/mnt"

#含义
src=    #本地文件路径, 路径是基于你执行ansible的路径来的
dest=   #对方主机路径


#如果你切换了目录,命令就很长喽(绝对路径)
#ansible -i /etc/ansible/hosts web -m copy -a "src=/etc/ansible/test dest=/mnt"
           
#执行
ansible -i hosts web -m shell -a "ls /mnt"


#返回
192.168.1.21 | CHANGED | rc=0 >>
1.txt
test

192.168.1.20 | CHANGED | rc=0 >>
1.txt
test

192.168.1.22 | CHANGED | rc=0 >>
1.txt
test
           

继续阅读