0
点赞
收藏
分享

微信扫一扫

Ansible安装与使用

官网

https://www.ansible.com

  • Ansible特点:
  • 基于Python语言开发
  • 轻量级批量管理工具
  • 不需要在客户端(被管理主机)安装Agent
  • 模块化设计,支持自定义模块,自定义模块可用任何语言编写
  • 基于PyYAML模块支持Playbook,可以通过Playbook完成可重复的复杂工作
  • 支持jinjia2模版
  • 核心组件
  • Ansible
  • Host Inventory(清单文件)
  • Playbooks
  • Core Modules
  • Custom Modules
  • Plugins Email,Logging,Other
  • Connection Plugins (远程链接插件)

实验环境准备

  • 虚拟机2台,1台作为ansible主机,2台为被管理主机

Ansible安装与使用_自动化运维工具

系统初始化

#关闭selinux、
#临时关闭
setenforce 0
#永久关闭,重启生效
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

在管理主机中添加hosts解析

echo "192.168.10.210      host1" >> /etc/hosts

配置ssh免密认证

ssh-keygen

#使用脚本批量拷贝私钥文件
#!/bin/bash
for i in host1 host2
do
	ssh-copy-id $i
	echo "$i copy successlly"
done

配置阿里云源

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/*.repo

dnf makecache
dnf repolist

安装Ansible

dnf install ansible-core -y

Ansible安装与使用_Ansible_02

定义Ansible清单文件

  • 生成主主配置文件

#备份原文件
mv /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.bak
#生成新的配置文件
ansible-config init --disabled > /etc/ansible/ansible.cfg

  • 添加要管理的主机

#vi/etc/ansible/hosts
[webserver]
host1
host2

  • 列出指定组内的主机

ansible webserver --list

Ansible安装与使用_Linux运维_03

查看ansible可用模块

ansible-doc -l

Ansible安装与使用_Ansible_04

Ansible命令参数

  • Ansible命令返回值的颜色表示:
  • 绿色:命令执行成功,且未对远程主机进行修改
  • 黄色:命令执行成功,并对远程主机进行了相应的修改
  • 红色:命令执行失败,或者执行异常、报错
  • 粉色:命令执行后发出的告警信息,以及建议(可以忽略)
  • Ansible执行命令的方式
  • ad-doc:临时命令
  • Playbook:将命令写入文件中

Ansible命令格式介绍

  • 常用命令格式:ansible 组名/主机 【-m 模块名】 【-a 模块参数】

Ansible常用模块介绍

command模块
  • command为默认模块,用于远程执行命令
  • 使用command模块在远程主机执行命令时,不会经过远程主机的shell进行处理,在使用command模块时,如果需要执行的命令中包含< ,>,|, ; , & 这些符号时,这些符号的功能也会失效
  • 常用参数:
  • chdir:执行前会先进入到指定目录
  • creates:如果远程主机中不存在指定文件,则执行,如果存在,则不执行
  • removes:如果远程主机存在指定文件,则执行,如果不存在,则不执行

模块测试

  • 使用ping模块,测试与远程主机的连通性

ansible webserver -m ping

Ansible安装与使用_Ansible_05

  • command模块

#查询模块可用参数
ansible-doc -s command
#查询远程主机指定目录下的文件
ansible webserver -m command -a "chdir=/home ls"

Ansible安装与使用_Ansible_06

  • creates

#如果当前目录下没有user.txt这个文件,则创建它,如果有则不执行创建命令
ansible webserver -m command -a "creates=/home/user.txt touch /home/user.txt"

Ansible安装与使用_自动化运维工具_07

  • removes

#如果远程主机home目录下存在user.txt文件,则将该文件移动至远程主机的root目录下
ansible webserver -m command -a "removes=/home/user.txt mv /home/user.txt /root/"

Ansible安装与使用_Ansible_08

command模块缺点

  • 使用command模块时,如果需要执行的命令中包含< > | ; & 这些符号时,这些符号的功能会失效

#使用符号拼接时会报错
ansible webserver -m command -a "df -h > /root/waring.txt"

Ansible安装与使用_自动化运维工具_09

shell模块

  • 与command模块类似,区别在于shell模块可以通过/bin/bash程序处理命令

ansible webserver -m shell -a "df -h > /root/waring.txt"

Ansible安装与使用_自动化运维工具_10

script模块

  • script模块用于远程执行脚本,脚本存放在本地,不需要拷贝到远程主机
  • 搭建本地yum仓库源

#!/bin/bash
[ ! -d /etc/yum.repos.d/bak ] && mkdir /etc/yum.repos.d/bak

mv /etc/yum.repos.d/* /etc/yum.repos.d/bak >/dev/null 2>&1
mount -t iso9660 /dev/cdrom /mnt/cdrom
version=$(cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/')

if [ "$version" >  "7" ];then

echo "[local-AppStream]
name=local_AppStream
baseurl=file:///mnt/cdrom/AppStream
enabled=1
gpgcheck=0

[local-BaseOS]
name=local_BaseOS
baseurl=file:///mnt/cdrom/BaseOS
enabled=1
gpgcheck=0" > /etc/yum.repos.d/local.repo

elif [ "$version" <= "7" ];then
echo "[local]
name=local
baseurl=file:///mnt/cdrom/
enabled=1
gpgcheck=0" > /etc/.yum.repos.d/local.repo
fi

sleep 3
yum clean all
yum makecache
yum repolist

Ansible安装与使用_Linux运维_11

  • 查看远程主机的仓库源

ansible webserver -m shell -a "cat  /etc/yum.repos.d/local.repo"

Ansible安装与使用_Linux运维_12

yum模块

  • 用于在远程主机上通过yum源管理软件包
  • 常用参数

name	指定需要管理的软件包名字
state
-- installed   安装软件包
-- latest 	   安装yum中最新版本的软件包
-- removed	   删除对应软件包

  • 安装Apache服务

ansible webserver -m yum -a "name=httpd"

Ansible安装与使用_自动化运维工具_13

  • 启动服务

#不加-m指定模块,默认使用command模块
ansible webserver -a "systemctl start httpd"

copy模块

  • 将本地文件拷贝至远程主机
  • 核心参数
  • src -- 源文件地址
  • dst -- 目的地址

ansible webserver -m copy -a "src=/root/kl.sh dest=/mnt"

Ansible安装与使用_Linux运维_14

  • 拷贝文件时,如果远程主机已经有同名文件,但是内容不同,可以使用force参数选择是否覆盖

#yes为覆盖,no为不覆盖
ansible webserver -m copy -a "src=/root/kl.sh dest=/mnt/kl.sh force=yes"

  • 拷贝文件时,如果远程主机已经有同名文件,但是内容不同,可以使用backup参数选择是否先备份远程主机上的文件,再拷贝主机的文件到远程主机上

ansible webserver -m copy -a "src=/root/kl.sh dest=/mnt/kl.sh backup=yes"

Ansible安装与使用_Linux运维_15

  • owner指定文件拷贝到远程主机后所属的用户,group指定文件拷贝到远程主机后所属的用户组
  • mode指定 文件拷贝到远程主机后的权限,比如:mode=0644

ansible webserver -m copy -a "src=/root/kl.sh dest=/mnt/kl.sh owner=admin group=admin mode=0644"

Ansible剧本Playbook

  • 类似脚本,用于配置,部署和管理被控制节点
  • 我们只需要把模块按照顺序编排在playbook剧本中,ansible就会按照剧本一步一步的执行
  • playbook需要遵循YAML语法格式编写,文件名以.yaml或者yml作为后缀

playbook核心参数

  • hosts -- 执行的远程主机列表
  • tasks -- 任务集
  • variables -- 自定义变量
  • tempaltes --模板
  • handles和noify结合使用,由特定个条件触发操作,满足条件则执行,否则不执行过
  • tags标签,指定某条任务 执行,用于选择运行playbook中的部分代码
  • remote_user -- 设置远程登录的用户

例:

---
- hosts: webserver
  remote_user: root
  tasks:
  - name: ping host
    ping:
  - name: mkdir mom
    shell:
      cmd: mkdir /mom

  • 执行yml文件

ansible-playbook ping.yml

  • 使用playbook安装nginx

---
- hosts: webserver
  remote_user: root
  tasks:
  - name: copy-nginx
    copy: src=/root/nginx-1.22.1.tar.gz dest=/mnt
  - name:  install Depend
    yum: name=pcre,pcre-devel,zlib,zlib-devel,gcc*
  - name: tar-nginx
    shell: tar -xf /mnt/nginx-1.22.1.tar.gz -C /mnt
  - name: install-nginx
    shell: cd /mnt/nginx-1.22.1 && ./configure --prefix=/usr/local/nginx && make && make install
  - name: Copy-index.html
    copy: src=/root/index.html dest=/usr/local/nginx/html
  - name: start nginx
    shell: cp /usr/local/nginx/sbin/nginx /usr/sbin && nginx -c /usr/local/nginx/conf/nginx.conf

Ansible安装与使用_Ansible_16

  • 检查 yml文件语法是否正确,

ansible-playbook --syntax-check  nginx_install.yml

Ansible安装与使用_自动化运维工具_17

举报

相关推荐

0 条评论