ansible 基础概念介绍及安装

目录

一. 基本概念:

1.1.什么是 Ansible

1.2.ansible 可以完成哪些功能

1.3.ansible 特点

1.4.ansbile 核心组件

1.5.工作原理

1.6 安装:

配置文件介绍:

2. inventory: 关于主机清单的定义

2.1) 场景 1: 基于密码的连接 (主机+端口号+密码) 仅为了解, 企业中不会采用此方式

2.2) 场景 2: 基于密钥连接 (前提: 提前创建好公钥与私钥, 并将公钥下发到被管理端: ssh

keygen ssh-copy-id 或 pxe 批量装机时批量下发, 此处不做实际演示)

2.3) 场景 3: 定义主机组

基础入门篇四大模块详解

一. 什么是 ad-hoc 模式

1.1 使用场景:

1.2 命令的使用:

2. 基本命令练习:

2.1 如何获取 ansible-doc 帮助手册:

几个重要概念: 安装 present 卸载 absent 升级 latest 排除 exclude 指定仓库 enablerepo2.2 yum 模块:

2.3 copy 模块:

2.4 file 模块:

2.5 service 模块:


一. 基本概念:

1.1.什么是 Ansible

1) ansible是IT自动化运维工具, 基于Python开发, 具有丰富的模块(copy file service), 集合了众
多运维工具(puppet chef func fabric)的优点, 实现了批量系统配置 批量程序部署 批量运
行命令等功能.
2) ansible是基于 paramiko 开发的, 并且基于模块化工作, 本身没有批量部署的能力. 真正具有
批量部署的是ansible所运行的模块, ansible只是提供一种框架. ansible不需要在远程主机上安装
client/agents, 因为它们是基于ssh来和远程主机通讯的. ansible目前已经已经被红帽官方收购, 是自
动化运维工具中大家认可度最高的, 并且上手容易, 学习简单. 是每位运维工程师必须掌握的技能之一.
我们要在10台linux服务器上安装一个nginx服务, 手动如何操作? 借助其它脚本或工具如何自动化
的执行?

1.2.ansible 可以完成哪些功能

1) 批量执行远程命令 (对多台主机同时执行相同的命令, 比如: 查看磁盘空间 查看进程)
2) 批量配置软件服务 (定制化的方式配置和管理服务)
3) 实现软件开发功能 (jumpserver底层使用ansible实现的自动化管理)
4) 编排高级的IT任务 (ansible的playbook是一门编程语言, 可以用来描绘一套IT架构)

1.3.ansible 特点

1) 部署简单, 只需在主控端部署ansible环境, 被控端无需做任何操作;
2) 默认使用SSH协议对设备进行管理;
3) 有大量常规运维操作模块, 可实现日常绝大部分操作;
4) 配置简单 功能强大 扩展性强;
5) 支持API及自定义模块, 可通过Python轻松扩展;
6) 通过Playbooks来定制强大的配置 状态管理;
7) 轻量级, 无需在客户端安装agent, 更新时, 只需在操作机上进行一次更新即可;
8) 提供一个功能强大 操作性强的Web管理界面和REST API接口.

1.4.ansbile 核心组件

 

Ansible: Ansible核心程序.
HostInventory: 记录由Ansible管理的主机信息, 包括端口 密码 ip等.
Playbooks: 剧本 YAML格式文件, 多个任务定义在一个文件中, 定义主机需要调用哪些模块来完
成的功能.
CoreModules: 核心模块, 主要操作是通过调用核心模块来完成管理任务.
CustomModules: 自定义模块, 完成核心模块无法完成的功能, 支持多种语言.
ConnectionPlugins: 连接插件, Ansible 和 Host 通信使用

1.5.工作原理

 

1.6 安装:

[root@ansible ~]# yum install ansible -y
[root@ansible ~]# ansible --version # 查看版本相关信息
ansible 2.9.16
config file = /etc/ansible/ansible.cfg
# 配置文件所在路径
configured module search path = [u'/root/.ansible/plugins/modules',
u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible # 说明是
Python的一个模块
executable location = /usr/bin/ansible # 可执行文件所有路径
python version = 2.7.5 (default, Apr 2 2020, 13: 16: 51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-
39)]
# Python 版本相关信息 关于 ansible 配置文件优先级的顺序问题(由高到低):
1) ANSIBLE_CONFIG:
全局变量
2) ansible.cfg: 当前路径 (适用于每个项目一个独立的配置文件)
3) .ansible.cfg: 当前用户家目录
4) /etc/ansible/ansible.cfg: 主配置文件 (本次课程以此配置文件为例)

配置文件介绍:

[root@ansible ~]# cat /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/inventory
# 所要管理的主机清单文件
roles_path = /etc/ansible/roles
# roles所在路径
host_key_checking = False
# 不查检对端服务器指纹信息
log_path = /var/log/ansible.log
# 日志文件

2. inventory: 关于主机清单的定义

2.1) 场景 1: 基于密码的连接 (主机+端口号+密码) 仅为了解, 企业中不会采用此方式

[root@ansible ~]# cat /etc/ansible/inventory
[group1]
# 方式1: 主机 + 端口号 + 用户名 + 密码
node01 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123.com'
node02 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123.com'
[group2]
# 方式2: 主机 + 端口号 + 密码
node0[3: 4].example.cn ansible_ssh_pass='123.com'
[group3]
# 方式3: 主机+ 端口号 + 密码
node0[2: 4].example.cn [group3: vars] # 定义group3中所引用的变量
ansible_ssh_pass='123.com'
进行测试: 查看主机名
[root@ansible ~]# ansible group1 -a 'hostname' # 获取group1所定义的节点的主机名
node02 | CHANGED | rc=0 >>
node02.example.cn
node01 | CHANGED | rc=0 >>
node01.example.cn
[root@ansible ~]# ansible group2 -a 'hostname' # 定义的范围: [: ] 已经生效
node04.example.cn | CHANGED | rc=0 >>
node04.example.cn
node03.example.cn | CHANGED | rc=0 >>
node03.example.cn
[root@ansible ~]# ansible group3 -a 'hostname'
node04.example.cn | CHANGED | rc=0 >>
node04.example.cn
node03.example.cn | CHANGED | rc=0 >>
node03.example.cn
node02.example.cn | CHANGED | rc=0 >>
node02.example.cn

2.2) 场景 2: 基于密钥连接 (前提: 提前创建好公钥与私钥, 并将公钥下发到被管理端: ssh

keygen ssh-copy-id 或 pxe 批量装机时批量下发, 此处不做实际演示)

[root@ansible ~]# cat /etc/ansible/inventory [group1]
# 采用IP地址方式
10.15.200.101
10.15.200.102
[group2]
node03 ansible_ssh_host=10.15.200.103 # 采用别名方式
进行测试: 查看主机名
[root@ansible ~]# ansible group1 -a 'hostname'
10.15.200.102 | CHANGED | rc=0 >>
node02.example.cn
10.15.200.101 | CHANGED | rc=0 >>
node01.example.cn
[root@ansible ~]# ansible group2 -a 'hostname'
node03 | CHANGED | rc=0 >>
node03.example.cn

2.3) 场景 3: 定义主机组

[root@ansible ~]# cat /etc/ansible/inventory
[group1]
# 采用IP地址方式
10.15.200.101
10.15.200.102
[group2]
node03 ansible_ssh_host=10.15.200.103 # 采用别名方式
[group3: children] # 子节点 定义group3 包含两个组group1 group2
group1 group2
进行测试: 查看主机名
[root@ansible ~]# ansible group3 -a 'hostname'
node03 | CHANGED | rc=0 >>
node03.example.cn
10.15.200.102 | CHANGED | rc=0 >>
node02.example.cn
10.15.200.101 | CHANGED | rc=0 >>
node01.example.cn
列出每个主机组所包含的主机情况:
[root@ansible ~]# ansible group1 --list-hosts
# 查看group所包含的主机列表
hosts (2):
10.15.200.101
10.15.200.102
[root@ansible ~]# ansible all --list-hosts # 查看inventory中定义的所有主机
hosts (3):
10.15.200.101
10.15.200.102
node03

基础入门篇四大模块详解

本章目的:
利用四大模块对被控主机进行批量操作
本章重点:
掌握 yum copy file service 的基本使用
引言:
日常的运维工作: 1) 安装软件 2) 配置相关文件 3) 启动相关服务

一. 什么是 ad-hoc 模式

"临时命令", 执行完结束, 并不会保存 (相当于bash中的一句话shell)

1.1 使用场景:

场景: 1) 查看某个进程或服务 2) 复制某个文件

1.2 命令的使用:

ansible 主机名称 指定模块 模块名称 模块动作 具体命令 [root@ansible ~]# ansible group1 -m command -a 'df -h'
# 查看 group1 中所有主机的磁盘
使用情况

 

2. 基本命令练习:

2.1 如何获取 ansible-doc 帮助手册:

# 也可以直接查看ansbile包中对应模块的源代码
[root@ansible ~]# cat /usr/lib/python2.7/site-packages/ansible/modules/files/copy.py
[root@ansible ~]# ansible-doc -l
# 查看所有模块说明
[root@ansible ~]# ansible-doc copy # 查看模块方法
[root@ansible ~]# ansible-doc -s copy # 查看当前模块所支持的参数
举例:
[root@ansible ~]# ansible group1 -m shell -a 'ps -ef | grep httpd' # 查看对应服务器上是否运
行了相关进程
[root@ansible ~]# ansible group1 -m command -a 'ps -ef | grep httpd'
# 注意此命令报错
不支持管道
[root@ansible ~]# ansible group1 -m command -a 'lsblk'
# 此条命令正常输出

几个重要概念: 安装 present 卸载 absent 升级 latest 排除 exclude 指定仓库 enablerepo2.2 yum 模块:

#示例1: 安装当前最新的apache软件, 如果存在则更新
[root@ansible ~]# ansible group1 -m yum -a "name=httpd state=latest"
#示例2: 安装当前最新的apache软件, 通过本地仓库安装
[root@ansible ~]# ansible group1 -m yum -a "name=httpd state=latest enablerepo=c7-
local-http"
#示例3: 删除apache软件
[root@ansible ~]# ansible group1 -m yum -a "name=httpd state=absent"

2.3 copy 模块:

#示例1: 将本地的httpd.conf文件Listen端口修改为8080, 然后推送到远端服务器
[root@ansible ~]# ansible group1 -m copy -a
"src=/etc/ansible/source_code/copy_module/httpd.conf dest=/etc/httpd/conf/httpd.conf
owner=root group=root mode=644"
#示例2: 将本地的httpd.conf文件Listen端口修改为8088, 然后推送到远端, 检查远端是否存在上一
次的备份文件
[root@ansible ~]# ansible group1 -m copy -a
"src=/etc/ansible/source_code/copy_module/httpd.conf dest=/etc/httpd/conf/httpd.conf
owner=root group=root mode=644 backup=yes"
# 查看是否有对应的备份文件
[root@ansible ~]# ssh node01 ls /etc/httpd/conf/httpd\* Warning: Permanently added 'node01, 10.15.200.101' (ECDSA) to the list of known hosts.
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf.12631.2021-02-15@19: 34: 22~
# 备份文件
#示例3: 往远程的主机文件中写入内容
[root@ansible ~]# ansible group1 -m copy -a "content='Hello World......\n'
dest=/var/www/html/index.html"
# 校验对端服务器对应的文件内容是否已经修改
[root@ansible ~]# ssh node01 cat /var/www/html/index.html
[root@ansible ~]# ssh node01 cat /var/www/html/index.html
Warning: Permanently added 'node01, 10.15.200.101' (ECDSA) to the list of known hosts.
Hello World......

2.4 file 模块:

#示例1: 创建文件/var/www/html/hostname.html, 并设定属主 属组 权限
[root@ansible ~]# ansible group1 -m file -a "path=/var/www/html/hostname.html
state=touch owner=apache group=apache mode=644"
# 查看文件否创建成功
[root@ansible copy_module]# ssh node01 ls -lt /var/www/html/hostname.html
-rw-r--r-- 1 apache apache 211 Feb 15 20: 12 /var/www/html/hostname.html
#示例2: 创建目录/var/www/html/imgs, 并设定属主 属组 权限
[root@ansible ~]# ansible group1 -m file -a "path=/var/www/html/imgs state=directory
owner=apache group=apache mode=755"
[root@ansible ~]# ssh node01 ls -ld /var/www/html/imgs drwxr-xr-x 2 apache apache 6 Feb 15 20: 14 /var/www/html/imgs
#示例3: 递归授权目录的方式
[root@ansible ~]# ansible group1 -m file -a "path=/var/www/html/ owner=apache
group=apache mode=755"
[root@ansible ~]# ansible group1 -m file -a "path=/var/www/html/ owner=apache
group=apache recurse=yes" # 递归授权

2.5 service 模块:

[root@ansible ~]# ansible group1 -m service -a "name=httpd state=stopped"
# 先停止
服务
查看服务状态:
[root@ansible ~]# ssh node01 systemctl status httpd | grep 'Active: '
Active: inactive (dead) since Mon 2021-02-15 20: 45: 47 CST; 1min 13s ago
#
stopped状态
#示例1: 启动Httpd服务
[root@ansible ~]# ansible group1 -m service -a "name=httpd state=started"
查看服务状态:
[root@ansible ~]# ssh node01 systemctl status httpd | grep 'Active: '
Active: active (running) since Mon 2021-02-15 20: 47: 39 CST; 1s ago # running状态
#示例2: 重载Httpd服务
[root@ansible ~]# ansible group1 -m service -a "name=httpd state=reloaded"
#示例3: 重启Httpd服务
[root@ansible ~]# ansible group1 -m service -a "name=httpd state=restarted" #示例4: 停止Httpd服务
[root@ansible ~]# ansible group1 -m service -a "name=httpd state=stopped"
#示例5: 启动Httpd服务, 并加入开机自启
[root@ansible ~]# ansible group1 -m service -a "name=httpd state=started enabled=yes"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值