一丶安装ansible
1.yum安装ansible
yum install epel-release -y
yum install ansible -y
ansible --version
2.Ansible的命令参数
- ansible命令语法:
ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]
- ansible详细参数:
-v,-verbose # 详细模式,如果命令执行成功,输出详细的结果
-i PATH,-inventory=PATH #指定host文件的路径,默认是在/etc/ansible/hosts
-f NUM,-forks=NUM #NUM是指定的一个整数,默认是5,指定fork开启同步进程的个数。
-m NAME,-module-name=NAME # 指定使用的 module 名称,默认使用 command 模块
-a,MODULE_ARGS #指定 module 模块的参数
-k,-ask-pass #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证
-sudo # 指定使用 sudo 获得 root 权限
-K,-ask-sudo-pass #提示输入 sudo 密码,与 -sudo 一起使用
-u USERNAME,-user=USERNAME # 指定移动端的执行用户
-C,-check #测试此命令执行会改变什么内容,不会真正的去执行
- ansible-doc 详细参数:
ansible-doc -l #列出所有的模块列表
ansible-doc -s 模块名 #查看指定模块的参数
3.配置Ansible主机文件
vim k8s-hosts
[devops]
k8s-worker01 ansible_ssh_host=182.196.36.92
k8s-worker02 ansible_ssh_host=182.196.36.93
k8s-worker03 ansible_ssh_host=182.196.36.94
k8s-worker04 ansible_ssh_host=182.196.36.95
[all:vars]
ansible_ssh_user=pzom
ansible_ssh_port=37254
ansible_ssh_private_key_file=/home/pzom/.ssh/id_rsa
二丶ansible批量创建cronta定时任务
1.创建清理log脚本
vim delete-java-logs.sh
#!/bin/bash
sudo find /data/k8s-storage/logs/ -type f -name "*20*" -exec rm -rf {} \;
sudo find /data/k8s-storage/logs/ -type f -name "*.log" -exec rm -rf {} \;
2.创建清理images脚本
vim clear-images.sh
#!/bin/bash
sudo docker rmi $(sudo docker images -qa)
3.批量下发脚本
ansible -i k8s-hosts devops -m shell -a 'sudo mkdir -p /data/scripts/'
ansible -i k8s-hosts devops -m shell -a 'sudo chmod -R 777 /data/scripts/'
ansible -i k8s-hosts devops -m copy -a "src=./delete-java-logs.sh dest=/data/scripts/delete-java-logs.sh mode=0777"
ansible -i k8s-hosts devops -m copy -a "src=./clear-images.sh dest=/data/scripts/clear-images.sh mode=0777"
4.批量创建定时任务
ansible -i k8s-hosts devops -m cron -a 'name="clean_log" minute=30 hour=5 job="sh /data/scripts/delete-java-logs.sh >/dev/null 2>&1"'
ansible -i k8s-hosts devops -m cron -a 'name="clean_images" minute=30 hour=3 weekday=6 job="sh /data/scripts/clear-images.sh >/dev/null 2>&1"'
5.cron模块参数详解
name参数:计划任务名称
job参数:指定计划的任务中需要实际执行的命令或者脚本
user参数:指定计划任务属于哪个用户,默认是root用户
state参数:当计划任务有名称时,根据计划任务名称修改删除对应的任务,删除计划任务state值为absent
backup参数:对已有的任务修改或删除时,是否保存
disabled参数: 当计划任务有名称时,根据计划任务名称关闭(注释)对应的计划任务
minute参数:设置计划任务中分钟设定位的值,取值范围(0-59,*, */2)
hour参数:设置计划任务中小时设定位的值,取值范围(0-23,*,*/2)
day参数:设置计划任务中天(日)设定位的值,取值范围(1-31,*,*/2)
month参数:设置计划任务中月份设定位的值,取值范围(1-12,*,*/2)
weekday参数:设置计划任务中周几设定位的值,取值范围(0-6 for Sunday-Saturday, *)
6.示例:
1)每1分钟执行一次
ansible -i k8s-hosts devops -m cron -a 'name="clean_log" minute=*/1 job="sh /data/scripts/delete-java-logs.sh >/dev/null 2>&1"'
2)每天凌晨5点执行一次
ansible -i k8s-hosts devops -m cron -a 'name="clean_log" minute=0 hour=5 job="sh /data/scripts/delete-java-logs.sh >/dev/null 2>&1"'
3)每周6的凌晨3点30分钟执行一次任务
ansible -i k8s-hosts devops -m cron -a 'name="clean_images" minute=30 hour=3 weekday=6 job="sh /data/scripts/clear-images.sh >/dev/null 2>&1"'