ansible是啥?
是一款自动化运维工具的名称。
ansible架构?
1) 控制端
2) 被控端
3) 连接协议-ssh
4) inventory
5) ad-hoc
6) playbook
ansible工作流程:
一个管理主机,对需要管理的服务器做一个逻辑分类。
通过组件inventory(主机清单)对host(单个主机),group(多个组机)通过动作
ad-hoc(单模块) playbook(剧本,多模块),在通过modules(模块)的ssh/tcp的网络安全连接到对应的服务器,然后服务器进行本地解析,本地运行。
之间都是通过python的方式。并且所有的指令都是模块。
ansible 环境
安装 yum install ansible (2.9版本)
配置文件
查找的时候有顺序:
1.$ANSIBLE_CONFIG
2.当前目录下的ansible.cfg
3.当前用户家目录下的.ansible.cfg
4.查找/etc/ansible/ansible.cfg
Ansible Inventory 主机清单
通过ansible,控制两台同时登陆
1.定义主机清单
[root@manager ~]# cat /etc/ansible/hosts
[webservers] 类似资源池,操作是以下两个ip
172.16.1.7
172.16.1.8
2.推送公钥到各个节点
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
3.执行ansible ad-hoc 测试 是否能与该清单定义的节点通讯
[root@manager ~]# ansible webservers -m ping
抒写主机清单,选择登陆方式?
1.密码登陆
[webservers]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
2.秘钥的方式
[webservers]
172.16.1.31 或 web01 ansible_ssh_host=172.16.1.7或 172.16.1.7 hostname=web01
3.其他方式
[webservers]
web[1:99].oldboy.com 直接控制所有1--99
练习:(公司做项目,推荐)
1.创建一个项目目录
[root@manager ~]# mkdir /ansible_adhoc
2.在该项目下创建ansible.cfg、hosts
进入目录
[root@manager ~]# cd /ansible_adhoc/
创建ansible.cfg
[root@manager ansible_adhoc]# touch ansible.cfg
创建hosts
[root@manager ansible_adhoc]# touch hosts
编写ansible.cfg文件
[root@manager ansible_adhoc]# cat ansible.cfg
[defaults] 定义加载位置
inventory = ./hosts 加载的是当前的hosts这个文件
编写hosts文件
[root@manager ansible_adhoc]# cat hosts
[webservers]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8
3.ansible --version 查看加载的是哪个配置文件
[root@manager ansible_adhoc]# ansible --version
ansible 2.9.7 ansible 版本
config file = /ansible_adhoc/ansible.cfg
加载文件的位置,在我们创建的目录下
4.最后在该目录下执行
[root@manager ansible_adhoc]# ansible webservers -m ping
都是可以ping 通的。
模块前提认知:
临时命令,执行后就结束,并不会保存
一般都是查看某多台机器的进程
语法:
ansible webserbers -m 模块 -a '动作'
ansible webservers -m command -a 'df -h'
颜色:
绿色:正常
黄色:被控端发生了更改
红色:报错
ansible ad-hoc模块:
0.命令 command | shell
1.安装 yum | yum_repository
2.配置 copy | file
3.启动 systemd | service
4.挂载 mount
5.定时 cron
6.用户 user | group
7.防火墙 selinux | firewalld
command与shell: 执行命令的模块(Shell)
[root@manager ansible_adhoc]# ansible webservers -m command -a 'ps -ef |grep nginx' (不支持管道)
[root@manager ansible_adhoc]# ansible webservers -m shell -a 'ps -ef |grep nginx' (支持管道)
安装nfs服务任务流程------
安装yum、配置copy、初始化group、user、file、启动systemd、 客户端测试mount
1.yum模块:安装软件
name: 软件包名称
state:
present 安装
absent 卸载
latest 安装最新版
enablerepo:指定通过那个仓库下载
disablerepo:禁止从哪个仓库下载
2.copy模块:文件配置
copy: 拷贝当前目录下的文件到被控端指定的路径
src 要拷贝的文件(相对路径 绝对路径)
dest 拷贝到目标主机的哪个路径下
owner 设定文件的属主
group 设定文件的数组
mode 设定文件的权限
backup 备份(只有有变化时候会做备份)
content 往目标主机文件中增加内容(重定向)
3.group、user模块:创建用户组和用户
group:
state: present、absent
gid:指定gid
user:
name: 用户名称
uid: uid
group:指定组
groups:指定附加组 append = yes
shell: 指定登陆shell
create_home: 创建用户家目录
state
present 创建
absent 删除
remove:移除用户相关的文件
4.file模块: ( 创建文件或、目录、授权 )
path:指定被控端的路径
state:
touch
directory
link
owner:属主 默认root
group:属组 默认root
mode:文件默认644、目录755
recurse:递归授权
5.启动systemd | service (一摸一样的模块)
name: 服务名称 nfs | httpd | nginx
state:
started
reloaded
stopped
restarted
enabled:
yes 加入开机自启动
no 关闭开机自启动
6.客户端测试mount
path: 被控端要挂载的目录 /data
src: 设备| nfs|磁盘| 光盘 /dev/sda1
fstype:
iso9660 光盘
nfs
xfs
opts:
ro,noauto
defaults
state:
mounted:挂载设备,并加入开机自启动
present:写入fstab,不挂载
absent:卸载设备,会清除/etc/fstab
unmounted:卸载,不会清除/etc/fstab
remounted:重新在挂载一次
将这些全部放入到一个脚本,一起执行
[root@manager ansible_adhoc]# vim
nfs_server_client.sh
1.安装 ansible webservers -m yum -a "name=nfs-utils state=present"
2.配置 ansible webservers -m copy -a "src=./exports.j2 dest=/etc/exports owner=root group=root mode=644"
ansible webservers -m group -a "name=www gid=666 state=present"
3.添加用户和组 ansible webservers -m user -a "name=www uid=666 create_home=no shell=/no/login group=www state=present"
4.添加权限 ansible webservers -m file -a "path=/data state=directory owner=www group=www mode=755 recurse=yes"
5.开机自启 ansible webservers -m systemd -a "name=nfs-utils state=started enabled=yes"
6.挂载
ansible client -m mount -a "src=172.16.1.7:/data path=/opt fstype=nfs opts=defaults state=mounted"
ansible client -m mount -a "src=172.16.1.8:/data path=/mnt fstype=nfs opts=defaults state=mounted"
最后:
[root@manager ansible_adhoc]# sh
nfs_server_client.sh (执行一下)
会出现的问题:
1.在配置文件时,一定要创建这个exports.j2 文件
2.在挂载前,在hosts里添加测试客户端。
【client】
172.16.1.31
执行: ansible all -m ping (查看所有主机通不通)
3.在挂载的时候,要看下客户端的目录的权限,属组和属主。
如果挂载出现连接失败,需要在7和8上,启动下nfs