自动化运维之Ansible

自动化运维之Ansible

1 自动化运维

1.1 背景

当管理的服务器很多时,假设有1000台,如果想要在1000台服务器上做一个简单的操作:

1.按照传统方法,一台连着一台服务器的ssh登录,然后手动操作,效率太低:
  - 重复操作频繁,增加了人工成本和后续维护成本
  - 机器太多时,容易落下某些机器且未操作,进而产生后续影响
  - 人工频繁操作时可能有操作步骤不完整的情况,造成该机器和其他机器状态不一致
2.若写脚本实现,会有以下缺点:
  - 管理的机器平台不一致,脚本可能不具备通用性
  - 传密码麻烦(在非免密登录的环境下, 需要expect来传密码)
  - 效率较低,循环1000次也需要一个一个的完成,如果用`&`符放到后台执行,则会产生1000个进程

2.2 运维的未来是什么?

一切皆自动化

“运维的未来是,让研发人员能够借助工具、自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务。每个角色都应该努力使工作实现自动化。”——《运维的未来》

2.3 自动化运维概述

自动化运维:将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”的IT运维。好处:

  • 减少了重复操作,提高了工作效率;
  • 减小了出错几率,提高了准确率;
  • 所有机器状态一致,降低了后续维护成本。

image-20220823201410241

相关工具:
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:maven、Ant、Gradle
自动部署:Capistrano、CodeDeploy
持续集成(CI):master、Travis
配置管理:Ansible、SaltStack、Chef、Puppet
容器:Docker、Podman、LXC、第三方厂商如AWS
编排:Kubernetes、Core、Apache Mesos
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Prometheus、Zabbix、Datadog、Graphite、Ganglia、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter、loader.io
应用服务器:Tomcat、JBoss、IISWeb
服务器:Apache、Nginx
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;mongoDB、redis等NoSQL数据库
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

2.4 常用自动化运维工具

puppet

基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些。

saltstack

基于python语言,相对简单,大并发能力比ansible要好,但需要维护被管理端的服务。如果服务断开,连接就会出问题。

ansible

基于python语言,简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证,所以机器多的话速度会较慢。

3 Ansible

ansible官网:https://www.ansible.com/

ansible官方文档:https://docs.ansible.com/

3.1 Ansible简介

ansible是基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。进而能减少我们的重复操作,提高工作效率。

Ansible 不需要在远程主机上安装 client/agents,因为它们是基于 SSH 来和远程主机通讯的。

Ansible 目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

3.2 Ansible功能

  • 批量执行远程命令:可以对远程的多台主机同时进行命令的执行。

  • 批量安装和配置软件服务:可以对远程的多台主机进行自动化的方式配置和管理各种服务。

  • 提供自动化运维工具的开发API,有很多运维工具:如jumpserver就是基于 ansible 实现自动化管理功能。

  • 编排高级的企业级复杂的IT架构任务:Ansible的Playbook和role可以轻松实现大型的IT复杂架构。

3.3 Ansible特性

  • 部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作
  • 安全可靠,默认使用 SSH 协议对被控端进行管理
  • 有大量的常规运维操作模块,可实现日常绝大部分操作
  • 配置简单、功能强大、扩展性强
  • 支持 API 及自定义模块,可通过 Python 轻松扩展
  • 通过 Playbooks 来定制强大的配置、状态管理
  • 轻量级,无需在客户端安装 Agent,更新时只需在操作机上进行一次更新即可
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对

3.4 Ansible架构

image-20220823224623997

ansible基础架构:

  • Ansible:主程序。
  • Core Modules: 预定义模块。
  • Custom Modules: 核心模块功能不足时,用户添加的扩展模块。
  • Plugins: 通过插件来实现记录日志,发送邮件或其他功能。
  • Playbooks: 剧本,YAML格式剧本文件,多个任务定义在一个文件中,定义受控端批量调用的模块。
  • Connectior Plugins: 负责和被监控端实现通信,ansible基于连接插件连接到各个主机上,默认是使用ssh协议
  • Host Inventory: 指定操作的主机,是一个配置文件里面定义监控的主机,记录由Ansible管理的主机信息,包括端口、密码、ip等

3.5 Ansible工作原理

Ansible:组合 INVENTORY、API、MODULES、PLUGINS 的绿框,可以理解为是 ansible 命令工具,其 为核心执行工具。

image-20220823211331384

Ansible 主要组成部分:

  • ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件

  • INVENTORY:Ansible管理主机的清单,配置文件:/etc/anaible/hosts

  • MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义

  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用

  • API:供第三方程序调用的应用程序编程接口

3.5.1 Ansible任务执行模式

Ansible 控制主机对被管节点的操作方式可分为两类,即 ad-hoc 和 playbook:

ad-hoc 模式(点对点模式)

ad-hoc 模式使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于 bash 中的一句 shell。

playbook 模式(剧本模式)

playbook 模式是 Ansible 主要管理方式,也是 Ansible 功能强大的关键所在。playbook 通过多个 tasks 集合完成一类功能,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc 操作的配置文件。

3.5.2 Ansible执行流程

img

简单理解就是:Ansible 在运行时,首先读取ansible.cfg中的配置,根据规则获取 Inventory 中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

Ansible 命令执行来源

  • USER,普通用户,即 SYSTEM ADMINISTRATOR
  • CMDB(配置管理数据库) API 调用
  • PUBLIC/PRIVATE CLOUD API 调用 (公有私有云的 API 接口调用)
  • USER-> Ansible Playbook -> Ansibile

Ansible 命令执行过程

  • 加载自己的配置文件,默认/etc/ansible/ansible.cfg
  • 加载自己对应的模块文件,如command,或者ping等
  • 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  • 给文件+x执行
  • 执行并返回结果
  • 删除临时py文件,退出
3.5.3 Ansible执行状态
  • 绿色:执行成功并且不需要做改变的操作
  • 黄色:执行成功并且对目标主机做变更
  • 红色:执行失败
  • 粉色:警告信息
  • 蓝色:显示ansible命令执行的过程
[appop@master ~]$ grep -A 14 '\[colors\]' /etc/ansible/ansible.cfg
[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan

3.6 Ansible安装

3.6.1 Ansible部署拓扑图

Ansible中控机模式部署拓扑图:

img

3.6.2 Ansible安装需求
  • 执行 ansible 的主机一般称为主控端,中控,master或堡垒机。

  • 主控端 Python 版本需要 2.6 或以上, windows 不可以做主控端。

  • 被控端 Python 版本低于 2.5,需要额外安装一个模块:python-simplejson

注意事项: 
- 自2.0版本开始,ansible使用了更多句柄来管理它的子进程,对于OS X系统,你需要增加ulimit值才能使用15个以上子进程,方法 sudo launchctl limit maxfiles 1024 2048,否则你可能会看见”Too many open file”的错误提示。
- 通常我们使用 ssh 与托管节点通信,默认使用 sftp。如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式。
- ansible 不是服务,不会一直启动,只是需要的时候启动。
3.6.3 Ansible基本环境

主机规划

主机名称 操作系统版本 内网IP 安装软件
master Centons 7.9 192.168.3.3 Python3、Ansible 、OpenSSH
node01 Centons 7.9 192.168.3.6 Python3、OpenSSH
node02 Centons 7.9 192.168.3.8 Python3、OpenSSH
node03 Centons 7.9 192.168.3.10 Python3、OpenSSH

静态ip地址设置

# 在CentOS 7上配置静态ip
1.以root用户登录,修改网络配置
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static" #是否自动获取,static是静态地址
ONBOOT=yes         #开机加载
IPADDR="192.168.3.3"
NETMASK="255.255.255.0"
GATEWAY="192.168.3.1"

2.重启网卡,使静态ip的配置文件生效
[root@localhost ~]# service network restart

3.配置 DNS
[root@localhost ~]# vi /etc/resolv.conf
nameserver 192.168.3.1
nameserver 114.114.114.114
nameserver 8.8.8.8

注:若克隆的Linux虚拟机,则通过“编辑虚拟机设置 -> 网络适配器 -> 高级”重新生成克隆的机器MAC地址。

主机名修改,关闭防火墙、selinux

1.主机名修改
[root@localhost ~]# vi /etc/hosts
192.168.3.3 master
2.关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
3.关闭selinux
[root@localhost ~]# vi /etc/selinux/config
将SELINUX=enforcing指令更改为SELINUX=disabled
检查系统上 SELinux 的状态:sestatus
4.重启Linux
[root@master ~]# shutdown -r now

用户及用户组创建

在Linux系统下创建appop用户及appop组;使用root用户登录,执行以下命令:
# 创建appop组
[root@master ~]# groupadd appop

# 创建appop用户
[root@master ~]# useradd appop -g appop

# 设置appop用户密码
[root@master ~]# passwd appop
更改用户 appop 的密码 。
新的 密码:
问题描述:普通用户输入一些系统命令后出现:不在sudoers文件中,此事将被报告。这是因为当前操作用户的权限不够。
[appop@master ~]$ sudo su -

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] appop 的密码:
appop 不在 sudoers 文件中。此事将被报告。

问题解决:
1.输入命令“ll -h  /etc/sudoers”,查看/etc/sudoers文件权限,如果只读权限,修改为可写权限。
[root@master ~]# ll -h  /etc/sudoers
-r--r-----. 1 root root 4.3K 930 2020 /etc/sudoers

2.输入修改权限命令:"chmod u+w /etc/sudoers"
[root@master ~]# chmod u+w /etc/sudoers
[root@master ~]# ll -h  /etc/sudoers
-rw-r-----. 1 root root 4.3K 930 2020 /etc/sudoers

3.输入编辑命令“vi /etc/sudoers”,在文件中找到root  ALL=(ALL) ALL这一行,在该行下以同样的参数添加提升权限的用户信息。
[root@master ~]# vi /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
appop   ALL=(ALL)       ALL

4.返回到命令页面,输入回复权限的命令:
[root@master ~]# chmod 440 /etc/sudoers

5.输入命令:"sudo su -",切换到root用户。
[appop@master ~]$ sudo su -
[sudo] appop 的密码:
上一次登录:三 817 12:43:43 CST 2022192.168.3.173pts/1 上
[root@master ~]# 

输入系统操作命令,发现普通用户已有了权限提升,问题解决。

使用ntp同步标准时间

使用date命令,查看系统时间和当前时间是否一致,如果不一致,就需要使用ntp同步标准时间,ntp:网络时间协议(network time protol)。
1.安装:sudo yum install -y ntp
2.同步:sudo ntpdate pool.ntp.org

Python2升级到Python3

1.查看当前python的版本信息
[appop@master ~]$ ll /usr/bin/python*
lrwxrwxrwx. 1 root root    7 824 10:47 /usr/bin/python -> python2
lrwxrwxrwx. 1 root root    9 824 10:47 /usr/bin/python2 -> python2.7
-rwxr-xr-x. 1 root root 7144 628 23:30 /usr/bin/python2.7

2.安装依赖
[appop@master ~]$ sudo yum install gcc gcc-c++ libffi-devel python-setuptools vim wget make sqlite-devel zlib*  bzip2-devel openssl-devel ncurses-devel readline-devel tk-devel  -y 

3.到官网查看最新的版本,并进行python下载:
官网下载:https://www.python.org/ftp/python

4.下载完成后,将Python-3.9.6.tar.xz传至所在服务器/home/appop目录下
[appop@master ~]$ cd /home/appop

5.解压python安装包
[appop@master ~]$ tar -xvf Python-3.9.6.tar.xz

6.进入到解压后的目录,运行配置>>编译>>安装
[appop@master ~]$ cd Python-3.9.6
[appop@master Python-3.9.6]$ ./configure --with-ssl
# 注意:执行./configure时,一定要加上--with-ssl,不然后面pip3下载包就麻烦了
[appop@master Python-3.9.6]$ make 
[appop@master Python-3.9.6]$ sudo make install
Installing collected packages: setuptools, pip
  WARNING: The scripts pip3 and pip3.9 are installed in '/usr/local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

大概意思是,提示我们安装的脚本不在路径中,下面创建链接。

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

root用户执行pip3命令时提示警告,可执行时带上--user参数:pip3 install --user packagename。
我们使用服务器,很多时候并没有root权限,也无法用sudo,所以安装的时候都要加上 --user参数,安装就在/home目录下,而不是在/user目录下。

7.设置默认版本
# 将原来 python 的软链接重命名:
[appop@master Python-3.9.6]$ sudo mv /usr/bin/python /usr/bin/python.bak
# 将 python 链接至 python3:
[appop@master Python-3.9.6]$ sudo ln -s /usr/local/bin/python3 /usr/bin/python

8.yum配置
[appop@master Python-3.9.6]$ sudo yum list
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^

升级 Python 之后,由于将默认的 python 指向了 python3,yum 不能正常使用,需要编辑 yum 的配置文件,此时,需要修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down配置,将 #!/usr/bin/python 改为 #!/usr/bin/python2,保存退出即可。

9.升级pip
[appop@master Python-3.9.6]$ python3.9 -m pip install --upgrade pip
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in /home/appop/.local/lib/python3.9/site-packages (22.2.2)

10.查看当前python的默认版本
[appop@master bin]$ python -V
Python 3.9.6

11.查看pip版本
[appop@master Python-3.9.6]$ pip3 -V
pip 22.2.2 from /home/appop/.local/lib/python3.9/site-packages/pip (python 3.9)

12.参考链接
Python2升级到Python3  https://www.cnblogs.com/nuccch/p/15153978.html
3.6.4 Ansible安装方式

ansible官方文档:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

3.6.4.1 rpm包安装
1.安装epel源,安装好之后安装ansible
[appop@master ~]$ sudo yum install -y epel-release
2.使用CentOS的EPEL源的rpm包安装
[appop@master ~]$ sudo yum -y install ansible
3.查看ansible版本
[appop@master ~]$ yum info ansible
3.6.4.2 编译安装
1.安装ansible相关的依赖包
[appop@master ~]$ sudo yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
2.到官网查看最新的版本,并进行ansible下载:
ansible官网下载:https://releases.ansible.com/ansible/ 
pip官网下载:https://pypi.org/project/ansible/
3.下载ansible,并将ansible-2.9.27.tar.gz传至所在服务器/home/appop目录下
[appop@master ~]$ cd /home/appop
4.解压ansible安装包
[appop@master ~]$ tar -zxxf ansible-2.9.9.tar.gz
5.进入到解压后的目录,运行setup.py 编译并安装
[appop@master ~]$ cd ansible-2.9.9
[appop@master ansible-2.9.9]$ sudo python setup.py build 
[appop@master ansible-2.9.9]$ sudo python setup.py install 

错误:[Errno 13] Permission denied: '/usr/local/lib/python3.9/site-packages/test-easy-install-63582.write-test'
解决:该错误是提示要用root权限,可以用sudo表示用root权限执行,在命令前面加sudo命令。

6.拷贝配置文件
[appop@master ansible-2.9.9]$ sudo mkdir -p /etc/ansible 
[appop@master ansible-2.9.9]$ sudo cp -r examples/* /etc/ansible
7.确认安装
[appop@master ~]$ ansible --version
3.6.4.3 Git方式安装
1.安装与python版本匹配的包管理工具pip
[appop@master ~]$ sudo easy_install pip
2.在Git仓库下载ansible
[appop@master ~]$ git clone https://gitee.com/mirrors/ansible.git --recursive 
3.源码安装ansible
[appop@master ~]$ cd ./ansible 
[appop@master ~]$ source ./hacking/env-setup
如果要抑制虚假警告/错误,可使用:source ./hacking/env-setup -q
4.安装Python模块
[appop@master ~]$ pip install --user paramiko PyYAML Jinja2 httplib2
5.确认安装
[appop@master ~]$ ansible --version
注意:当更新ansible版本时,不只要更新git的源码树,也要更新git中指向Ansible自身模块的“submodules”(不是同一种模块)
[appop@master ~]$ git pull --rebase
当前分支 devel 是最新的。
[appop@master ~]$ git submodule update --init --recursive
3.6.4.4 pip安装
pip 是安装 Python 包的管理器,类似 yum 

1.使用pip安装ansible
[appop@master ~]$ pip3 install --user ansible --upgrade
2.确认安装
[appop@master ~]$ ansible --version   
3.6.5 配置免密登录认证

ansible 相关工具大多数是通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能。

实现基于 key 验证 将公钥 ssh-copy-id 到被管理的主机上 , 实现免密登录 。

建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点。

1.在主控端上,修改/etc/ssh/ssh_config配置:将StrictHostKeyChecking由ask改成no,并将注释取消
[root@master ~]# vi /etc/ssh/ssh_config
StrictHostKeyChecking no



2.在被控端上,修改/etc/ssh/sshd_config配置:
将GSSAPIAuthentication由yes改成no
将UseDNS由yes改成no,并将注释取消
[root@master ~]# vi /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no
[root@master ~]# service sshd restart

3.在主控端上,生成密钥
[appop@master ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/appop/.ssh/id_rsa): 
Created directory '/home/appop/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/appop/.ssh/id_rsa.
Your public key has been saved in /home/appop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:q0zM5h28tf1qv4A885COWKMTcu21Ls6qVJLaXBY86yY appop@master
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|     .           |
|      +          |
|     . +         |
|    o =.S        |
|   +.Oo..o.o     |
|  . EoBo*.O..    |
|   . B.BoB.B..   |
|    ..B+*o+.+++. |
+----[SHA256]-----+

4.在主控端上,将密钥发送到目标主机
[appop@master ~]$ ssh-copy-id 192.168.3.6
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/appop/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
appop@192.168.3.6's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.3.6'"
and check to make sure that only the key(s) you wanted were added.

5.测试连接
[appop@master ~]$ ansible -m ping all
192.168.3.8 | SUCCESS => {
   
    "ansible_facts": {
   
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.3.10 | SUCCESS => {
   
    "ansible_facts": {
   
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.3.6 | SUCCESS => {
   
    "ansible_facts": {
   
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

3.7Ansible相关文件

3.7.1 Ansible目录结构

ansible.cfg:主配置文件,配置 ansible 工作特性(一般无需修改)

hosts:主机清单(将被管理的主机放到此文件)

roles目录:创建角色和目录,其子目录包括:
defaults(默认变量目录)
handlers(处理程序,notify调用部分playbook)
meta(角色依赖关系处理)
tasks(具体执行的任务操作目录,存放playbook)
templates(模板文件目录)
vars(roles内的变量文件目录)
files(存放安装包和文件目录)

例:创建nginx,mysql,php,zabbix的目录结构
[appop@master ~]$ mkdir -p /etc/ansible/roles/{
   nginx,mysql,php,zabbix}/{
   defaults,files,handlers,meta,tasks,templates,vars}
3.7.2 Ansible主配置文件

ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下:

# 环境变量
ANSIBLE_CONFIG
# 当前目录下的ansible.cfg
./ansible.cfg
# 当前用户家目录下的.ansible.cfg
~/.ansible.cfg
# 系统默认配置文件
/etc/ansible/ansible.cfg

ansible 的默认配置文件 /etc/ansible/ansible.cfg,一般保持默认,无需进行修改。

[appop@master ~]$ sudo vi /etc/ansible/ansible.cfg 

#inventory      = /etc/ansible/hosts         #主机列表配置文件
#library        = /usr/share/my_modules/     #库文件存放目录        
#remote_tmp     = $HOME/.ansible/tmp         #临时py命令文件存放在远程主机目录
#local_tmp      = $HOME/.ansible/tmp         #本机的临时命令执行目录
#forks          = 5                          #默认并发数
#sudo_user      = root                       #默认sudo 用户
#ask_sudo_pass = True                        #每次执行ansible命令是否询问ssh密码
#ask_pass      = True                        #每次执行ansible命令是否询问ssh口令
#remote_port    = 22                         #远程主机的端口号(默认22) 

建议优化项:
#host_key_checking = False       #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log   #日志文件,建议启用
#module_name = command           #默认模块,可以修改为shell模块
3.7.3 主机清单 inventory
  • ansible 的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在 inventory file中将其分组命名

  • 默认的 inventory file 为/etc/ansible/hosts

  • nventory file 可以有多个,且也可以通过 Dynamic Inventory 来动态生成

    注意: 生产建议在每个项目目录下创建项目独立的hosts文件

3.7.3.1 主机清单文件格式

/etc/ansible/hosts 文件格式:

inventory 文件遵循 INI 文件风格,中括号中的字符为组名。

可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的 SSH 端口,还可以在主机名称之后使用冒号加端口号来标明。

# 范例:
ntp.magedu.com   不分组,直接加

[webservers]     webservers组 
www1.magedu.com:2222   可以指定端口
www2.magedu.com

[dbservers]
db1.magedu.com
db2.magedu.com
db3.magedu.com

[test]
10.0.0.8  ansible_connection=local   #指定本地连接,无需ssh配置
#ansible_connection=ssh 需要StrictHostKeyChecking no
10.0.0.7  ansible_connection=ssh  ansible_ssh_port=2222  ansible_ssh_user=appop ansible_ssh_password=magedu  
10.0.0.6  ansible_connection=ssh  ansible_ssh_user=root  ansible_ssh_password=123456  

#执行ansible命令时显示别名,如web01
[websrvs]
web01 ansible_ssh_host=10.0.0.101
web02 ansible_ssh_host=10.0.0.102

[websrvs:vars]
ansible_ssh_password=magedu
some_host         ansible_ssh_port=2222     ansible_ssh_user=manager
aws_host          ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
freebsd_host      ansible_python_interpreter=/usr/local/bin/python
ruby_module_host  ansible_ruby_interpreter=/usr/bin/ruby.1.9.3

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机。

# 范例: 组嵌套
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值