Ansible部署
一、添加主机
(1)清单
清单是定义了Ansible要管理的一批主机,分为静态清单和动态清单
(2)静态清单
可单独定义主机,每行一个,也可以定义主机组,用[]括起来
样例:
[root@osp ~]# vim /etc/ansible/hosts
清单可以通过正则表达式来表示主机范围
(3)验证主机是否属于清单
[root@osp ~]# ansible 172.16.10.9 --list-hosts
hosts (1):
172.16.10.9
若验证成功则可以开始进行密钥设置
若不成功可能原因为主机设置错误,可查看/etc/ansible/hosts进行修改
(4)配置SSH密钥认证
[root@network ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jSE91C8qp8Aggx+xonToDK6/TxJz140soSulldhILQc root@network.example.com
The key's randomart image is:
+---[RSA 2048]----+
| E .. |
| .o o . |
|. +oo o + . |
|*++B o = B. . |
|B=*+B o S.o. |
|.+.Boo..o |
|. + o. + |
|. + . |
| .oo. |
+----[SHA256]-----+
一直回车即可
[root@osp ~]# ssh-copy-id 172.16.10.9 #此处需要填入被管理主机地址
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.10.9's password: #这里需要输入被管理主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '172.16.10.9'"
and check to make sure that only the key(s) you wanted were added.
(5)进行ansible Ping测试
[root@osp ~]# ansible all -m ping
若出现此类错误,可能原因为hosts配置错误,或者是对方端口或者服原因导致ssh失败
Ansible中ping不仅是测试连通性,还需要进行ssh测试
二、Ansible模块使用
模块类别 | 模块 |
文件模块 | copy:将本地文件复制到受管主机 file:设置文件的权限和其他属性 linuinfile:确保特定行是否在文件中 synchronzie:使用rsync同步内容 |
软件包模块 | package:使用操作系统本机的自动检测软件包管理器管理软件包 yum:使用yum软件包管理器管理软件包 apt:使用APT软件包管理器管理软件包 dnf:使用DNF软件包管理软件 gem:管理Ruby gem pip:从pip管理Python软件包 |
系统模块 | firewalld:使用firewalld管理任意端口和服务 reboot:重启计算机 service:管理服务 user:添加删除和管理用户账户 |
Net Tools模块 | get_url:通过HTTP、HTTPS或者FTP下载文件 nmcli:管理网络 uri:与web交互 |
Copy模块使用
[root@osp ~]# ansible all -m copy -a "src=/root/yum.sh dest=/root"
172.16.10.9 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "59f0d4a57aca78af5a2de2d1b6a3f743cc56b19d",
"dest": "/root/yum.sh",
"gid": 0,
"group": "root",
"md5sum": "c8b63e1cb629efd2e2e83886ceaee79b",
"mode": "0644",
"owner": "root",
"size": 1851,
"src": "/root/.ansible/tmp/ansible-tmp-1658216908.4-19466-48483588382868/source",
"state": "file",
"uid": 0
}
[root@network ~]# ls
anaconda-ks.cfg yum.sh
Copy各类参数
参数名 | 作用 |
src | 指定需要copy的文件或者目录 |
dest | 指定拷贝到主机的哪个目录 |
yum模块
格式:ansible 172.16.10.10 -m yum -a “name=httpd state=installed”
参数 | 作用 |
name | 指定软件名称信息 |
state | 操作软件状态installed、present与absent、removed |
latest | 安装最新软件 |
服务模块
service
[root@localhost~]# ansible 172.16.10.10 -m service -a "name=crond state=started enabled=yes"
参数 | 作用 |
enabled | 设置服务是否为开启自启动 |
name | 启动或者停止的服务器名称 |
state | restarted(重启)started(启动)stopped(停止) |