Linux —— ansible自动化运维(一)

目录

1. ansible简介

2. ansible特点

3. ansible程序的目录结构

4. ansible的执行

5. ansible的安装

6. ansible的部署

6.1 构建ansible清单

6.2 ansible的使用

7. 管理ansible文件

7.1 配置ansible文件

7.2 运行临时命令

7.3 ansible模块 

8. 实验


1. ansible简介

Ansible是一种IT自动化工具

Ansible可以配置系统、应用部署、执行特定任务的开源平台,它基于python语言,由paramiko、PyYAML关键模块构建

Ansible集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能

Ansible是基于模块工作,本身没有批量部署的能力,真正具有批量部署的是ansible所运行模块

Ansible只是一种框架,ansible不需要在远程主机上安装client/agents,因为它是基于ssh来连接受管主机和远程主机通讯

常见自动化运维工具技术特性比较:

项目 Puppet SaltStack Ansible
开发语言 Ruby Python Python
是否有客户端
是否支持二次开发 不支持 支持

                       支持

服务器和远程机器是否相互验证
服务器和远程机器的通信是否加密 是·标准的SSL协议 是·使用AES加密 是·使用OpenSSH
平台支持 AIX,BSD,HP-UX,Linux,Mac OSC,Solaris,Windows BSD,Linux,Mac OS X,Solaris,Windows AIX,BSD,HP-UX,Linux,Mac OS X,Solaris
是否支持Web UI 提供 提供 提供·但是是商业版本
配置文件格式 Ruby语法格式 YAML

                      YAML

命令行执行 不支持·可以通过配置模块实现 支持 支持

2. ansible特点

优点

  • 部署简单,控制主机部署ansible环境,被控制端安装ssh和python2.5以上版本
  • 跨平台支持
  • 可读性较强(windows、云、容器、linux、unix和物理机)
  • 易读的语法:基于yaml语法编写playbook
  • 轻松管理版本控制:playbook纯文本,可视作源代码
  • 支持动态清单
  • 编排可与其它系统轻松集成:puppet、jenkins
  • 减少人为错误

3. ansible程序的目录结构

配置文件: /etc/ansible/
执行文件目录: /usr/bin/
lib依赖库: /usr/lib/python2.7/site-packages/ansible/
help文件: /usr/lib/python2.7/site-packages/ansible 

4. ansible的执行

ansible主要组成部分

  • PLAYBOOKS:任务剧本(任务集),定义Ansible剧本(任务集)的配置文件,由Ansible顺序依次执行
  • INVENTORY:Ansible管理主机的清单/etc/ansible/hosts
  • MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,ansible-doc -l 可查看模块。
  • PLUGINS:模块功能补充,如连接类型插件、循环插件、变量插件、过滤插件等
  • API:第三方程序调用的应用程序编程接口
  • ANSIBLE:ansible命令工具,其为核心执行工具

ansible任务执行模式

  • ad-hoc模式(点对点模块):使用单个模块,支持批量执行单条命令,相当于在bash中执行一句shell命令
  • playbook模式(剧本模式):ansible主要的管理方式,通过多个task的集合完成一类功能,可以理解为多个ad-hoc的配置文件

5. ansible的安装

实验环境

Linux —— ansible自动化运维(一)_第1张图片

Linux —— ansible自动化运维(一)_第2张图片

  • 在workstation上安装ansible来充当控制节点
## 执行以下命令启用EPEL仓库
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
## 安装ansible python sshpass等工具
sudo dnf install ansible -y

  • 查看版本信息 
ansible --version

  • 使用setup模块验证python
ansible -m setup localhost | grep ansible_python_version

6. ansible的部署

6.1 构建ansible清单

 清单:指的是定义了ansible将要管理的一批主机的文件

  • 静态清单:

输入主机名或IP

workstation.dsd.com
192.168.43.40

定义主机组 

[webservers]
servera.dsd.com
serverb.dsd.com
192.168.43.20
[dbservers]
node1.dsd.com
node2.dsd.com

定义嵌套组 

[servers:children]
webservers
dbservers

通过范围简化主机规格(可以指定主机名称或IP范围或者数字和字母范围)

#yufa:[START:END]
192.168.[0:43].[1:254]     # 192.168.0.0/24,192.168.1.0/24 ... 192.168.4.0/24
server[01:10].example.com  # server01.example.com ... server10.example.com
[a:c].example.com          # a.example.com ... c.example.com
  • 验证清单:
ansible workstation.dsd.com --list-hosts   ## 当前主机中没有受管主机

  • 动态清单:从开源社区的脚本中获取

 

6.2 ansible的使用

在主机workstation.dsd.com的hosts中添加servera 

 

vim hosts
###
servera.dsd.com
[webservers]
serverb.dsd.com
###
ansible all --list-hosts         ## 查看所有的host
ansible webservers --list-hosts  ## 查看webservers组中的host
ansible ungrouped --list-hosts   ## 查看所有不在组中的host

Linux —— ansible自动化运维(一)_第3张图片

这里我们用servera测试

cd deploy-inventory/
ansible all -m ping

vim /etc/hosts
###
192.168.43.40 servera.dsd.com
###
# 免密操作
ssh-keygen                       ## 生成密钥
ssh-copy-id [email protected]   ## 上传密钥

ansible all -m ping

但是这里会牵扯到一个问题,我们将所有的host都放在/etc/ansible/hosts默认清单中,会造成我们大家都要使用,但是清单供不应求的情况。

  • 自定义清单操作,避免该情况的发生
mkdir deploy-inventory ## 建立清单目录,专门用来存放inventory
cd deploy-inventory/
ansible all -i inventory --list-hosts  ## 添加host前,查看内部是否已经存在host
vim inventory
###
[webservers]
servera.dsd.com
###
ansible all -i inventory --list-hosts

7. 管理ansible文件

7.1 配置ansible文件

  • 配置文件:

/etc/ansible/ansible.cfg   ## 基本配置文件,若找不到其他配置文件,则使用该配置文件

~/.ansible.cfg                  ## 如果存在此配置并且当前工作目录中也没有ansible.cfg,此文件替代/etc/ansible/ansible.cfg 

./ansible.cfg                    ## 执行ansible命令的目录中如果有ansible.cfg,直接使用该ansible.cfg(推荐使用)

 

  • 管理配置文件中的设置 
[defaults]               ## 部分设置ansible操作的默认值
[privilege_escalation]   ## 配置ansible如何在受管主机上执行特权升级

vim deploy-inventory/ansible.cfg
###
[defaults]
inventory = ./inventory
remote_user = westos
ask_pass = false
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
###

7.2 运行临时命令

优点:临时命令可以快速测试和更改,无需编写playbook

## 命令格式 ##
ansible host-pattern -m module [-a 'module arguments'] [-i inventory]

## 检查能否在受管主机上运行python模块 ##
ansible all -m ping

## 使用临时命令通过模块执行任务 ##
ansible-doc -l   ## 列出所有模块
ansible-doc ping ## 查看ping模块帮助文档

Linux —— ansible自动化运维(一)_第4张图片

Linux —— ansible自动化运维(一)_第5张图片

7.3 ansible模块 

  • 文件模块:

-copy:将本地文件复制到受管主机

-file:设置文件的权限和其他属性

-lineinfile:确保特定行是否在文件里

-synchronize:使用rsync同步内容

  • 系统模块:

-firewalld:使用firewalld管理任意端口和服务

-reboot:重启

-service:管理服务

-user:添加、删除和管理用户账户

  • Net Tools模块:

-get_url:通过http、https或者ftp下载文件

-nmcli:管理网络

-uri:与web服务交互

8. 实验

练习:使用user模块确保student用户存在于servera.lab.example.com且uid为1000

ansible -m user -a 'name=westos uid=1000  state=present' servera.dsd.com

Linux —— ansible自动化运维(一)_第6张图片

## 受管主机上
ansible webservers -m command -a /usr/bin/hostname
ansible webservers -m command -a /usr/bin/hostname -o	#加上-o参数,单行显示
##
command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境变量,所以不能执行重定向、传送等操作

  • 使用shell和command的区别
ansible localhost -m command -a set
## 运行结果:
servera.dsd.com | CHANGED | rc=0 >>  
servera.dsd.com

ansible localhost -m shell -a set
## 运行结果:
localhost | CHANGED | rc=0 >>
BASH=/bin/sh
  • 使用command模块执行临时命令
ansible localhost -m command -a 'id'
ansible localhost -m command -a 'id' -u westos  ## 通过-u选项使用student进行连接并执行id命令
## 注意:执行上面两条命令时,需要在新建的目录中执行,否则结果不会变
  • 使用copy模块执行命令
## 首先使用westos用户,因为westos用户没有写权限,会导致失败
ansible localhost -m copy -a 'content="westos ansible\n" dest=/etc/motd' -u westos
## 使用特权升级,注意:此处使用特权升级需要先编辑/etc/sudoers.d/westos文件
cat /etc/sudoers.d/student
## westos  ALL=(ALL)  NOPASSWD:ALL

Linux —— ansible自动化运维(一)_第7张图片

  • 参数解释
参数 功能
-m

                                              指定模块

-a 指定块命令,content=““指定添加信息\n换行,dest=/etc/motd添加信息路径

     -u

指定受管主机登陆时的用户身份
-k 表示输入密码(做过免密登陆的可以不使用该参数)

-become

超级用户身份登录

 

 

 

你可能感兴趣的:(ansible自动化运维)