Ansible应用部署以及模块讲解

本文介绍了Ansible在IT运维中的作用,包括其基于Python的自动化管理工具特性,如通过SSH批量执行命令、部署程序和配置系统。文章详细讲解了如何安装和配置Ansible服务,使用playbook进行任务编排,如安装服务、管理用户组、定时任务和配置文件管理,展示了Ansible在复杂运维场景中的应用。
摘要由CSDN通过智能技术生成

1.1Ansible的作用讲解

由于互联网的快速发展导致产品更新换代速度逐步增长,运维人员每天都要进行 大量的维护操作,按照传统方式进行维护使得工作效率低下。这时部署自动化运维就 可以尽可能安全、高效的完成这些工作。
Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署 变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。
Ansible 可以看作是一种基于模块进行工作的框架结构, 批量部署能力就是由Ansible 所运行的模块实现的。简而言之 Ansible 是基于“模块”完成各种“任务”的。其基本框架结构

1.2安装部署 Ansible 服务

1.2.1ansible环境前期准备

 操作系统            配置          主机名                      IP
CentOS7.9          2C2G           node1                  10.128.0.11
CentOS7.9          2C2G           node2                  10.128.0.12
CentOS7.9          2C2G           node3                  10.128.0.13

1.2.2修改主机名以及关闭防火墙关闭系统内核安全

#修改主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3 

#node1 node2 node3关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭内核安全机制
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

 1.2.3安装epel-release软件包它提供了一些额外的软件包,扩展了默认的软件包仓库。

#安装epel-release它提供了一些额外的软件包,扩展了默认的软件包仓库。
yum -y install epel-release

#安装ansible服务
yum -y install ansible

#安装完后查看ansible服务版本
ansible --version

 1.2.4编写hosts以及更改配置文件

#hosts里添加组名  一下两种方式选择一种
vi /etc/ansible/hosts
[test]
10.128.0.12 ansible_ssh_user=root ansible_ssh_pass=123456

[ouppt]
10.128.0.13 ansible_ssh_user=root ansible_ssh_pass=123456

#另外一种编写hosts
[all]
ansible_ssh_user=root
ansible_ssh_port=22
ansible_ssh_pass=123456

# ansible_become=yes
# ansible_become_method=sudo
# ansible_become_user=root
# ansible_become_pass=

[test]
10.128.0.12
[ouppt]
10.128.0.13

#host_key_checking 选项取消注释,将被设置为 False,这将禁止 Ansible 在连接到主机时检查主机密钥。请确保在修改配置文件之前对其进行备份,并且只对你有权限修改的配置文件进行更改。
vi /etc/ansible/ansible.cfg 
#取消注释
host_key_checking = False


#以组开始执行ping测试连通性
ansible all -m ping
ansible test -m ping
ansible ouppt -m ping

1.2.5创建用户删除用户

#创建用户删除用户
#创建用户
ansible test -m user -a "name=test01"  
#删除用户
ansible test -m user -a 'name="test01" state=absent'
#查看当前是否有这个用户
ansible test -m shell -a 'id test01'

1.2.6创建组以及指定gip

#创建组 并指定gip
ansible test -m group -a 'name=mysql gid=307 system=yes'
#创建用户 并指定uip 加入到mysql组里面
ansible test -m user -a 'name=mysql uid=306 system=yes group=mysql'
#删除用户
ansible test -m user -a 'name=mysql uid=306 system=yes group=mysql state=absent'

ansible all -m shell -a 'id mysql'

1.2.7使用ansible创建crontab定时任务

#查看
ansible all -m shell -a 'crontab -l'
#创建周期任务
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp"'
#指定备注
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp" name="test job"'
#删除
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp" name="test job" state=absent'

1.2.8copy模块推送文件

echo hello > limit
ansible all -m copy -a 'src=/root/imit dest=/tmp/imit owner=root mode=400'

ansible all -m shell -a 'cat /tmp/imit'

#创建文件
ansible all -m user -a 'name=test01'
#重新设置文件归属
ansible test -m file -a 'owner=test01 mode=644 path=/tmp/imit'

1.2.9推送脚本并执行脚本

#推送脚本
vi /test.sh
#!/bin/bash

echo "$(date)   $(hostname)"
chmod +x test.sh 
#推送并执行脚本
ansible all -m script -a 'test.sh'

1.2.10使用ansible的yum安装服务

#使用yum安装httpd
ansible all -m yum -a 'name=httpd'
ansible all -m shell -a 'yum -y install httpd'
#操作服务(开机自启动,开启服务
ansible web -m service -a 'enabled=true name=httpd state=started'

#查看全部模块
ansible-doc -l 
#类似于man手册 查看shell怎么使用
ansible-doc shell

yum模块
支持的参数:
name:安装包名称
state:
present:安装
latest:安装最新的
absent: 卸载软件

service模块
支持的参数:
enabled :设置开机启动。
name : 服务名称
state :四种状态
started:启动服务                 stopped:停止服务
restarted:重启服务             reloaded:重载配置

user模块
支持的参数:
name:指定用户名
group:指定基本组
state:设置帐号状态,不指定为创建,指定值为absent表示删除
system:当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid: 指定用户的uid
password: 指定用户密码

group模块 
支持的参数:
gid:设置组ID
name:组的名称
state:组的状态,默认为创建,设置值为absent为删除
system:值为yes,表示创建为系统组

1.3编写playbook

1.3.1编写playbook

#整合编写
vi test.yaml
---
- name: test play
  hosts: all
  tasks:
    - name: install httpd
      yum: name=httpd
    - name: start httpd
      service: name=httpd state=started

#执行playbook文件
ansible-playbook test.yaml


#多行编写
vi test.yaml
---
- name: test play
  hosts: all
  tasks:
    - name: install httpd
      yum: 
        name: httpd
    - name: start httpd
      service: 
        name: httpd 
        state: started
 #执行playbook文件
ansible-playbook test.yaml

1.3.2playbook添加变量

#添加变量的好处就是以后想更换安装的东西只需要更换变量后面的内容
vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg: httpd
  tasks:
    - name: install {{ pkg }}
      yum: 
        name: "{{ pkg }}"
    - name: start httpd
      service: 
        name: httpd 
        state: started
 #执行playbook文件
ansible-playbook test.yaml

1.3.3playbook循环编写

vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg: httpd
  tasks:
    - name: install pkg
      yum: 
        name: "{{ item }}"
      loop:
        - httpd
        - php
        - telnet
        - tree
    - name: start httpd
      service: 
        name: httpd 
        state: started
      
#或者使用变量循环
vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg:
      - httpd
      - php
      - telnet
      - tree
  tasks:
    - name: install pkg
      yum: 
        name: "{{ item }}"
      loop: "{{ pkg }}"
    - name: start httpd
      service: 
        name: httpd 
        state: started
#执行playbook文件
ansible-playbook test.yaml

1.3.4playbook条件判断编写

#先关闭httpd
vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg:
      - httpd
      - php
      - telnet
      - tree
  tasks:
    - name: install pkg
      yum: 
        name: "{{ item }}"
      loop: "{{ pkg }}"
    - name: stop httpd
      service: 
        name: httpd 
        state: stopped
#执行playbook文件
ansible-playbook test.yaml
ansible db -m setup | grep fqdn

vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg:
      - httpd
      - php
      - telnet
      - tree
  tasks:
    - name: install pkg
      yum: 
        name: "{{ item }}"
      loop: "{{ pkg }}"
    - name: stop httpd
      service: 
        name: httpd 
        state: stopped
    - name: start httpd
      service:
        name: httpd
        state: started
      when: ansible_fqdn == "node3"
        
#执行playbook文件
ansible-playbook test.yaml

1.3.5handlers触发器

#node2
scp /etc/httpd/conf/httpd.conf 10.128.0.13:/root/

#node1
vi httpd.conf
42:修改为8080

##修改配置文件就会触发触发器,并重启httpd服务
vi test.yaml
---
- name: test play
  hosts: all
  vars:
    pkg:
      - httpd
      - php
      - telnet
      - tree
  tasks:
    - name: install pkg
      yum: 
        name: "{{ item }}"
      loop: "{{ pkg }}"
    - name: stop httpd
      service: 
        name: httpd 
        state: stopped
    - name: start httpd
      service:
        name: httpd
        state: started
      when: ansible_fqdn == "node3"


- name: test handlers
  hosts: all
  tasks:
    - name: copy httpd config
      copy:
        src: /root/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify:
        - restart httpd
   handlers:
     - name: restart httpd
       service:
         name: httpd
         state: restarted
         
#执行playbook文件
ansible-playbook test.yaml

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值