ansible自动化部署

ansible

ansible简介

  • Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Window主机。管理节点的只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansible
  • ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、 chef、func、fabric) 的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能
  • ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
    • 连接插件connection plugins:负责和被监控端实现通信(远程连接通过ssh端口22)
    • host inventory:指定操作的主机,是一个配置文件里面定义监控的主机
    • 各种模块核心模块,command模块,自定义模块
    • 借助于插件完成记录日志邮件等功能
    • playbook: 剧本执行多个任务时,非必需可以让节点一次性运行多个任务
  • ansible的架构:连接其它主机默认使用ssh协议

在这里插入图片描述

ansible安装部署

设备准备
管理服务器:20.0.0.13
被管理服务器1:20.0.0.16
被管理服务器2: 20.0.0.17

关闭所有防火墙

安装扩展源

[root@server3 ~]# yum install epel-release
[root@server3 ~]# yum -y install ansible
[root@server3 ~]# ansible --version #查看版本
[root@server3 ~]# yum -y install tree #安装树状结构 查看文件
[root@server3 ~]# tree /etc/ansible/
[root@server3 ~]# vi /etc/ansible/hosts #配置主机清单
#添加
[webserver]
20.0.0.16
[mysql]
20.0.0.17

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置密钥

[root@server3 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):  #密码123123
Enter same passphrase again:  #密码123123
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:khEv7iRQhmJGAk7lNlgs2xPe2K4PyekF4V8qtVgZ7n0 root@server3
The key's randomart image is:
+---[RSA 2048]----+
|=oo+o .          |
|=+==   o         |
|o+*==.o .        |
| .o*++o+         |
|   o+==.S        |
|  . X==.         |
|   B.*.. E       |
|  ..+   .        |
|   ...           |
+----[SHA256]-----+
[root@server3 ~]# ls -a
[root@server3 ~]# cd .ssh/
[root@server3 .ssh]# ls
#对应  私钥   和  公钥

# 将公钥密码123456发送给被管理端1,2
20.0.0.16    20.0.0.17

[root@server3 .ssh]# ssh-copy-id root@20.0.0.16
/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
Enter passphrase for key '/root/.ssh/id_rsa': 
/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
Enter passphrase for key '/root/.ssh/id_rsa': 
root@20.0.0.16's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@20.0.0.16'"
and check to make sure that only the key(s) you wanted were added.

[root@server3 .ssh]# ssh-copy-id root@20.0.0.17
/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@20.0.0.17's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@20.0.0.17'"
and check to make sure that only the key(s) you wanted were added.

在这里插入图片描述
在20.0.0.16服务器上查看

[root@amoeba ~]# ls -a
.                .bashrc    .ICEauthority         .Xauthority  下载
..               .cache     initial-setup-ks.cfg  公共         音乐
anaconda-ks.cfg  .config    .local                模板         桌面
.bash_history    .cshrc     .redhat               视频
.bash_logout     .dbus      .ssh                  图片
.bash_profile    .esd_auth  .tcshrc               文档
[root@amoeba ~]# cd .ssh/
[root@amoeba .ssh]# ls
authorized_keys
[root@amoeba .ssh]# cat authorized_keys

在这里插入图片描述
设置免密登录

[root@server3 .ssh]# ssh-agent bash
[root@server3 .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa: 
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@server3 .ssh]# ansible all -m command -a 'date'
[root@server3 .ssh]# ansible all -m command -a 'ls /'

在这里插入图片描述

ansible命令行模块

command模块

[root@server3 .ssh]# ansible-doc -s command #查看当前模块可添加的参数信息

在这里插入图片描述
在这里插入图片描述

cron模块

[root@server3 .ssh]# ansible-doc -s cron   #查看cron模块信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两种状态
state=present #添加
state=absent  #删除,移除
[root@server3 .ssh]# ansible mysql -m cron -a 'minute="*/1" job="/usr/bin/echo hello >> /opt/hello.txt" name="cron_hello"'
# 计划每隔1分钟产生字符串hello写入追加的标签为mysql(20.0.0.17)的/opt/hello.txt目录下,任务名为cron_hello
Enter passphrase for key  '/root/.ssh/id_rsa': # 密码123123 上面设置的
20.0.0.17 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "cron_hello"
    ]
}

[root@server3 .ssh]# ansible mysql -a 'crontab -l' #查看计划任务列表
Enter passphrase for key '/root/.ssh/id_rsa': 
20.0.0.17 | CHANGED | rc=0 >>
#Ansible: cron_hello
*/1 * * * * /usr/bin/echo hello >> /opt/hello.txt

在20.0.0.17服务器上查看
在这里插入图片描述
删除hello的任务计划

[root@server3 .ssh]# ansible mysql -m cron -a 'name="cron_hello" state=absent'
20.0.0.17 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}
[root@server3 .ssh]# ansible mysql -a 'crontab -l'
20.0.0.17 | CHANGED | rc=0 >>

在20.0.0.17上查看是否已删除任务
在这里插入图片描述

user用户模块

user模块是请求的是

  • useradd(增加)
  • userdel(删除)
  • usermod(用户属性修改)

查看两台服务器上是否有tree用户
在这里插入图片描述

在这里插入图片描述
创建用户
在ansible服务器上

[root@server3 .ssh]# ansible all -m user -a 'name="tree"'

在这里插入图片描述
在两台服务器上查看
在这里插入图片描述
在这里插入图片描述
删除用户

[root@server3 .ssh]# ansible webserver -m user -a 'name="tree" state=absent'  #删除webserver上的用户

在这里插入图片描述
webserver上查看
在这里插入图片描述
删除成功

group模块

用于添加或删除组
group模块请求的是groupadd,groupdel,groupmod三个指令

[root@server3 ~]# ansible mysql -m group -a 'name=ky gid=1050 system=yes' # 在标签为mysql的服务器上创建属主为ky,组id为1050

在这里插入图片描述
在mysql服务器上查看

[root@client1 ~]# getent group | grep ky

在这里插入图片描述
进行用户属主,组设置调整

[root@server3 ~]# ansible mysql -m user -a 'name=tree uid=1050 system=yes group=ky'

在这里插入图片描述
查看
修改前后对比
在这里插入图片描述

copy模块

将管理端的文件复制到远程主机上

[root@server3 ~]# ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=tree mode=600' 
 #复制本地光盘自动挂载文件到标签为mysql(node2)上,目标位置/opt/fstab.bak,其属主为tree,权限为读写600

在这里插入图片描述
在mysql服务器上查看

[root@client1 ~]# cd /opt/
[root@client1 opt]# ls
[root@client1 opt]# ll
[root@client1 opt]# cat fstab.bak

在这里插入图片描述

[root@server3 ~]# ansible mysql -m copy -a 'content="this is my life" dest=/opt/life.txt'  #创建具有内容的文件

在这里插入图片描述
查看

[root@client1 opt]# ls
[root@client1 opt]# cat life.txt

在这里插入图片描述

file模块

file文件管理:可以进行操作更改文件属性,创建软连接,创建,删除文件,创建目录
更改文件属性

[root@server3 ~]# ansible mysql -m file -a 'owner=root group=tree mode=755 path=/opt/fstab.bak'
#更改属主为root,属组为tree,权限为755,目标文件位置为/opt/fstab.bak

在这里插入图片描述
查看
在这里插入图片描述
创建软链接

[root@server3 ~]# ansible mysql -m file -a 'path=/fstab.link src=/opt/fstab.bak state=link'
#标签为mysql上创建软链接,文件位置为根目录下/fstab.link,源文件为/opt/fstab.bak .状态信息为链接

在这里插入图片描述
查看
在这里插入图片描述
删除文件

[root@server3 ~]# ansible mysql -m file -a 'path=/opt/fstab.bak state=absent'

在这里插入图片描述
查看
在这里插入图片描述
创建文件aaa

[root@server3 ~]# ansible mysql -m file -a 'path=/opt/aaa state=touch'

在这里插入图片描述
查看
在这里插入图片描述

ping模块

每次ansible在执行自动化部署前,需要做检查工作,查看所有节点是否与master管理端保持连通状态

[root@server3 ~]# ansible all -m ping

在这里插入图片描述

yum模块

在mysql上查看有无装httpd
在这里插入图片描述
在ansible服务器上

[root@server3 ~]# ansible mysql -m yum -a 'name=httpd'

在这里插入图片描述
查看
在这里插入图片描述
卸载httpd

[root@server3 ~]# ansible mysql -m yum -a 'name=httpd state=absent'

在这里插入图片描述
查看
在这里插入图片描述

service模块

标签为mysql上安装软件名为httpd

[root@server3 ~]# ansible mysql -m yum -a 'name=httpd'
[root@server3 ~]# ansible mysql  -a 'systemctl status httpd'
#标签为mysql上查看httpd服务状态
20.0.0.17 | FAILED | rc=3 >>   #rc不为0,表示状态异常,服务未开
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)non-zero return code
           
[root@server3 ~]# ansible mysql  -m service -a 'name=httpd state=started enabled=true'
#标签为mysql上httpd服务状态开启,自启动

在这里插入图片描述
标签为mysql上防火墙状态为关闭

[root@server3 ~]# ansible mysql -m service -a 'name=firewalld state=stopped'

在这里插入图片描述
在ansible服务器上查看防火墙的状态

[root@server3 ~]# ansible mysql -a 'systemctl status firewalld'

在这里插入图片描述
浏览器上访问20.0.0.17
在这里插入图片描述
添加网页文件

[root@server3 ~]# ansible mysql -m copy -a 'content="hello world!" dest=/var/www/html/index.html'

在这里插入图片描述
继续访问
在这里插入图片描述

shell模块

  • chdir:指定工作目录,在执行对应的命令时,会先进入到chdir参数指定的目录中(即cd命令)

条件判断:

  • creates:指定一个文件,当指定的文件存在时,就不执行对应命令
  • removes:使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令
[root@server3 ~]# ansible mysql -m command -a 'echo this is a > /opt/a.txt'

在这里插入图片描述
默认command模块不识别重定向符号

输出this is a重定向/opt/a.txt下

ansible mysql -m shell -a 'echo this is a > /opt/a.txt'

在这里插入图片描述
查看
在这里插入图片描述

script模块

在ansible管理服务器创建脚本

[root@server3 opt]# vi script.sh
#!/bin/bash
echo "hello world!" > /opt/script.txt

[root@server3 opt]# ll
[root@server3 opt]# chmod +x script.sh 
[root@server3 opt]# ll
[root@server3 opt]# ansible all -m script -a 'script.sh'

在这里插入图片描述
在这里插入图片描述
被控制器上查看
在这里插入图片描述
在这里插入图片描述

setup模块

获取节点信息

在这里插入图片描述

Inventory(库存)中变量

  • ansible默认的主机清单是/etc/ansible/hosts文件
    主机清单可以手动设置,也可以通过Dynamic Inventory动态生成
  • url http://www.baidu.com:80/new
    url:资源定位
    协议://主机名.二级域名.顶级域名.(根域):端口/虚拟目录
  • 一般主机名使用FQDN(完全合格域名):www.baidu.com (主机名+域名)
  • 域名:baidu.com

进入主机清单

[root@server3 ~]# vi /etc/ansible/hosts

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值