首页 > 系统相关 >Linux基础46 ansible概述, 结构, 安装与配置文件, 主机清单配置

Linux基础46 ansible概述, 结构, 安装与配置文件, 主机清单配置

时间:2024-01-24 19:24:41浏览次数:43  
标签:配置文件 46 172.16 ansible hosts ssh m01 root

Ansible学习

一、Ansible概述

1.什么是ansible?

Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,
可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。

2.自动化工具

1.puppet 学习难,安装ruby环境难,没有远程执行功能
2.ansible 轻量级(只部署管理机即可),大规模环境下只通过ssh会狠慢,串行的
3.saltstack 一般选择salt会使用C/S结构的模式,salt-master和salt-minion,并行的,大规模批量操作的情况下(服务器超过200台),
会比Ansible速度快一些,底层使用的是zero-MQ消协队列 (也可以使用ssh方式) # ansible和saltstack语法和接近 # saltstack支持python3,ansible支持python2

3.自动化运维相较于手动运维

1.提高工作效率
2.提高工作的准确度
3. 减少人员成本
4.减少重复的工作量

4.Ansible功能及优点

1.远程执行
批量执行远程命令,可以对多台机器远程操作

2.配置管理
批量配置软件,可以自动分发配置文件,服务统一管理启动或停止

3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理

4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack
saltstack本身可以通过saltcloud管理各大云厂商的云平台。

5.二次开发
因为语法是Python,所以便于运维进行二次开发。

6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套框架的部署

7.跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务

 

二、Ansible架构

1、连接插件connection plugins用于连接主机 用来连接被管理端
2、核心模块core modules连接主机实现操作,它依赖于具体的模块来做具体的事情
3、自定义模块custom modules根据自己的需求编写具体的模块
4、插件plugins完成模块功能的补充
5、剧本playbook ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6、主机清单inventor定义ansible需要操作主机的范围
最重要的一点是 ansible是模块化的 它所有的操作都依赖于模块

1.Ansible执行流程

1.Ansible读取playbook剧本,剧本中会记录哪些主机执行哪些任务。
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。

 

三、安装Ansible

1.环境装备

 

主机名内网ip外网ip身份
m01 172.16.1.61 10.0.0.61 Ansible控制端
web01 172.16.1.7 10.0.0.7 Ansible受控端
web02 172.16.1.8 10.0.0.8 Ansible受控端
lb01 172.16.1.4 10.0.0.4 Ansible受控端
lb02 172.16.1.5 10.0.0.5 Ansible受控端

 

2.安装ansible

[root@m01 ~]# yum install -y ansible

3.ansible参数

[root@m01 ~]# ansible --version
ansible 2.9.27
  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    #ansible命令
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]#python版本

# ansible <host-pattern> [options]
--version    #ansible版本信息
-v            #显示详细信息
-i            #主机清单文件路径,默认是在/etc/ansible/hosts (一般用临时的,除非清单临时使用一次)
-m            #使用的模块名称,默认使用command模块
-a            #使用的模块参数,模块的具体动作
-k            #提示输入ssh密码,而不使用基于ssh的秘钥认证
-C            #模拟执行测试,但不会真的执行(没用)
-T            #执行命令的超时
#注: 一般就用 -m和-a即可

4.ansible配置文件

[root@m01 ~]# vim /etc/ansible/ansible.cfg
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first

#配置文件读取优先级查找如下
[root@m01 ~]# rpm -ql ansible    #找ansible-config.1.gz文件
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz    #查找优先级顺序

#要查看完整列表,请访问https://docs.ansible.com/或使用ansible-config命令。
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.

#/etc/ansible/ansible.cfg 配置文件,如果存在则使用
/etc/ansible/ansible.cfg \-\- Config file, used if present

#~/.ansible.cfg 用户配置文件,覆盖默认配置(如果存在)
~/.ansible.cfg \-\- User config file, overrides the default config if present

#\&./ansible.cfg 本地配置文件(在当前工作目录中)假定为(aqproject specific) (aq,如果存在,则重写其余文件)。
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.

#如上所述,ANSIBLE_CONFIG环境变量将覆盖所有其他环境变量。
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.

Ansible配置文件读取顺序
1. $ANSIBLE_CONFIG    环境变量
2. ./ansible.cfg     当前目录下的
3. ~/.ansible.cfg     家目录下的
4. /etc/ansible/ansible.cfg    (正常情况只使用该配置文件)

5.ansible配置文件

[root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory      = /etc/ansible/hosts        #主机清单配置文件
#library        = /usr/share/my_modules/    #库文件存放目录
#remote_tmp     = ~/.ansible/tmp            #临时py文件存放在远程主机目录
#local_tmp      = ~/.ansible/tmp            #主机的临时执行目录
#forks          = 5                            #默认并发数(一般不改,不要设置太大,实际上串行就行了)
#sudo_user      = root                        #默认sudo用户(ansible执行的用户,一般使用root用户)
#ask_sudo_pass = True                        #每次执行是否询问sudo的ssh密码
#ask_pass      = True                        #每次执行是否询问ssh密码
#remote_port    = 22                        #远程主机端口(默认22,因为每台端口可能不同,在主机清单里配)
host_key_checking = False                    #跳过检查主机指纹(一定要打开!ssh连接就不用输入yes,否则卡在输yes上)
log_path = /var/log/ansible.log                #ansible日志(无所谓配不配,运行时报错会直接展示)

#普通用户提权操作(我们用的是root账户,这个一般也用不上)
[privilege_escalation]
#become=True        #是不是开启
#become_method=sudo    #提权的命令
#become_user=root    #提权的用户
#become_ask_pass=False    #要不要认证密码


总结:一般配置文件只要打开下面一个注释即可
[root@m01 ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False        # 打开注释

 

四、主机清单配置

1.单主机配置

[root@m01 ~]# vim /etc/ansible/hosts
#方式一:IP + 端口 + 用户 + 密码 (端口默认22,用户默认root,ansible_ssh_port和ansible_ssh_usr可以不写)
[web01]
10.0.0.7 ansible_ssh_port=22 ansible_ssh_usr=root ansible_ssh_pass='admin123'
[web02]
10.0.0.8 ansible_ssh_port=22 ansible_ssh_usr=root ansible_ssh_pass='admin123'
#注:ansible配置完后不需要重启

#方式二:主机名 + 密码 (必须将主机名写入hosts)
[root@m01 ~]# vim /etc/hosts    #本机配置主机名host
172.16.1.7 web01
172.16.1.8 web02

[root@m01 ~]# vim /etc/ansible/hosts
[web1]    #这里web1和web01不能一致,否则告警组名和主机名不能一致
web01 ansible_ssh_pass='admin123'
[web2]
web02 ansible_ssh_pass='admin123'

#方式三:主机名 + 变量密码 (必须将主机名写入hosts)   (很鸡肋,没什么用)
[root@m01 ~]# vim /etc/hosts    #本机配置主机名host
172.16.1.7 web01
172.16.1.8 web02

[root@m01 ~]# vim /etc/ansible/hosts
[web1]    #这里web001和web01不能一致,否则告警组名和主机名不能一致
web01
[web1:vars]
ansible_ssh_pass='admin123'

2.基于秘钥连接

1)生成密钥对

#1.生成密钥对
[root@m01 ~]# ssh-keygen

#2.推送公钥
[root@m01 ~]# ssh-copy-id [email protected]
[root@m01 ~]# ssh-copy-id [email protected]

2)配置主机清单

[root@m01 ~]# vim /etc/ansible/hosts

#方式一:主机ip + 秘钥
[web001]
10.0.0.7
[web002]
10.0.0.8

#方式二:主机名 + 秘钥 (必须将主机名写入hosts)
[web1]
web01
[web2]
web02

3.主机组配置清单

[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web02
[lb_group]
172.16.1.4 ansible_ssh_pass='admin123'
172.16.1.5 ansible_ssh_pass='admin123'

#测试
[root@m01 ~]# ansible 'web_group' -m ping

#查看指定组的主机
[root@m01 ~]# ansible web_group --list-host
  hosts (2):
    web01
    web02
[root@m01 ~]# ansible all --list-host    #all为内置变量,表示配在主机清单里的所有主机
  hosts (4):
    172.16.1.4
    172.16.1.5
    web01
    web02
[root@m01 ~]# ansible 'web_group' -m shell -a 'df -h'    # 查看磁盘
[root@m01 ~]# ansible 'lb_group' -m shell -a 'free -m'    # 查看内存

#查看不同组不同机器的配置
#方式一:使用逗号隔开多主机
[root@m01 ~]# ansible '172.16.1.4,web01' -m shell -a 'free -m'
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         134         680          25         158         664
Swap:          1023           0        1023
172.16.1.4 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:            972         110         738           7         124         715
Swap:          1023           0        1023

#方式二:使用-i参数指定临时hosts
[root@m01 ~]# vim hosts        #配一个临时的hosts文件
[web_group]
web01
172.16.1.4 ansible_ssh_pass='admin123'

[root@m01 ~]# ansible 'web_group' --list-host -i ./hosts
  hosts (2):
    web01
    172.16.1.4
[root@m01 ~]# ansible 'web_group' -i ./hosts -m shell -a 'df -h'

4.定义多组整合

[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web02
[lb_group]
172.16.1.4 ansible_ssh_pass='admin123'
172.16.1.5 ansible_ssh_pass='admin123'
[db_group]
172.16.1.51 ansible_ssh_pass='admin123'
172.16.1.52 ansible_ssh_pass='admin123'

#定义多组,整合web_group组合lb_group组
[nginx_group:children]    #如果不加:children,下面的组名会被当成主机名
web_group
lb_group

#测试
[root@m01 ~]# ansible 'nginx_group' -m ping
#查多组整合的主机列表
[root@m01 ~]# ansible nginx_group:children --list-host
[WARNING]: Could not match supplied host pattern, ignoring: children
  hosts (4):
    web01
    web02
    172.16.1.4
    172.16.1.5

 

测试主机清单连接

[root@m01 ~]# ansible 'web01' -m ping
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false,     # 没有变化
    "ping": "pong"
}
[root@m01 ~]# ansible '*' -m ping    #*代表所有
...
[root@m01 ~]# ansible 'all' -m ping    #all代表所有 
[root@m01 ~]# ansible 'web01,web02' -m ping    #支持逗号

 

标签:配置文件,46,172.16,ansible,hosts,ssh,m01,root
From: https://www.cnblogs.com/ludingchao/p/17985668

相关文章

  • Mysql配置文件
    部分段落  [mysqld]#配置字符集 排序规则character-set-server=utf8mb4collation-server=utf8mb4_0900_ai_ci #导出文本路径 导出大文件使用 require_secure_transport=ONsecure_file_priv=/var/lib/mysql-files/  #slow_sql 慢SQL查询开启 slow_query......
  • Ubuntu安装Ansible AWX
    环境:AWSEC2,UbuntuServer22.04+桌面环境1.-安装dockersudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-commoncurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-sudoadd-apt-repository"deb[arch=amd64]......
  • Ansible - Roles
      前言Q1:什么是Roles在实际生产环境中,会编写大量的playbook文件来实现不同的功能。而且,每个playbook还可能会调用其他文件(变量文件),对于海量的、无规律的文件,管理是个问题。Ansible从1.2版本开始支持Roles,Roles是管理ansible文件的一种规范(目录结构),Roles会按照标准的规范,自......
  • sudo提权,ansible批量给所有主机创建系统账户,授权
    sudo(superuseroranotherdo)让普通用户可以以超级管理员或其他人的身份执行命令。sudo基本流程如下:1.管理员需要先授权(修改/etc/sudoers文件)2.普通用户以sudo的形式执行命令3.可以通过sudo-l查看授权情况修改/etc/sudoers的方法如下:1.visudo(带语法检查,默认没有颜色提示)2......
  • arcengine GP调用PolygonToLine 报错 -2147467259
    这个原因是传参数问题;GP调用面转线工具时,不能利用该方式传入参数IGpValueTableObjectgpValueTableObject=newGpValueTableObject();//对一个及以上要素类进行相交运算gpValueTableObject.SetColumns(2);objecto1=pFeatureClass2;//输入IFeatureC......
  • vscode的配置文件
    vscode的配置文件总述:vscode中一般会在项目文件夹下自动生成.vscode文件夹,其中存放若干配置文件(.json),一般有如下文件:下面将解释每个文件的用途与表现。1.c_cpp_propertries.json这个文件是使用vscode进行C++开发时会产生的文件,非C++用户可以直接跳过。其内容大致如下:{......
  • CF-461-B-树形DP
    461-B题目大意给定一棵\(n\)个节点的树,节点编号从\(0\)开始,每个节点要么为白色要么为黑色,你需要删除一些边,使得剩下的各个连通块中有且仅有一个黑色节点。问有多少种删边方案数,答案对\(10^9+1\)取模。Solution考虑树形DP,令\(dp[x][0/1]\)表示节点\(x\)属于无黑色节点/有黑色......
  • Go语言核心36讲 46 | 访问网络服务
    你真的很棒,已经跟着我一起从最开始初识Go语言,一步一步地走到了这里。在这之前的几十篇文章中,我向你一点一点地介绍了很多Go语言的核心知识,以及一些最最基础的标准库代码包。我想,你已经完全有能力独立去做一些事情了。为了激发你更多的兴趣,我还打算用几篇文章来说说Go语言的网......
  • [EFI]ASUS Tuf Gamming B550m Plus+AMD Ryzen 5 4650G电脑 Hackintosh 黑苹果efi引导
    硬件型号驱动情况主板AsusTUFGammingB550mPlus+WIFI处理器AMDRyzen54650G已驱动内存32GB(4x8GB)AsgardRGB@3200已驱动硬盘Samsung970Pro512Gb已驱动显卡SapphireRX6600XT已驱动声卡ALCS-1200A已驱动网卡RTL81252.5GbE已驱动无线网卡+蓝牙BCM94360CDSonoma及......
  • LG8466
    题意十分简单:找出你的手牌中是否有炸弹(有炸弹定义为有大小王各一张或有四张数码相同的牌)。这题因为手牌已经有序,且牌的种类很少,所以直接依次判断是否存在王炸或者四个连续的数码即可。代码见下:#include<iostream>#include<cstdio>usingnamespacestd;intmain(){ intT......