精选文章 大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介

大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介

作者:SshikSsh 时间: 2021-02-05 09:43:15
SshikSsh 2021-02-05 09:43:15
【摘要】一、ansible基础 6台虚拟机(2cpu,1.5G以上内存,10G以上硬盘,1块网卡)     主机名      IP地址             角色     ansible40   192.168.4.40/24    管理主机     web41       192.168.4.41/24    托管主机     web42       192.168.4.42/24    托管主...


一、ansible基础
6台虚拟机(2cpu,1.5G以上内存,10G以上硬盘,1块网卡)
主机名 IP地址 角色
ansible40   192.168.4.40/24 管理主机
web41 192.168.4.41/24 托管主机
web42 192.168.4.42/24 托管主机
db43 192.168.4.43/24 托管主机
db44 192.168.4.44/24 托管主机
cache45 192.168.4.45/24 托管主机
1)ansible简介
1.什么是ansible
ansible是2013年推出的一款IT自动化和DevOps软件,2015年被RedHat收购,是基于python研发,糅合很多老运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能
ansible可以实现:
自动化部署APP
自动化管理配置项
自动化持续交付
自动化(AWS)云服务管理

2.为什么选择ansible
选择一款配置管理软件,无外乎从以下几点来权衡利弊
活跃度(社区)
学习成本
使用成本
编码语言
性能
使用是否广泛
ansible优点:
只需要SSH和Python即可使用
无客户端
ansible功能强大,模块丰富
上手容易,门槛低
基于Python开发,做二次开发更容易
使用公司比较多,社区活跃

3.ansible特性
模块化设计,调用特定的模块完成特定任务
基于Python语言实现
paramiko
PyYAML(半结构化语言)
Jinja2
其模块支持JSON等标准输出格式,可以采用任何变成语言重写
部署简单
主从模式工作
支持自定义模块
支持playbook
易于使用
支持多层部署
支持异构IT环境

4.工作流程

2)ansible安装
1.软件依赖关系
对管理主机
要求Python 2.6或2.7
ansible使用以下模块,都需要安装
paramiko 
PyHAML
Jinja2 
httplib2
six
对于被托管主机
ansible默认通过SSH协议管理机器
被管理主机要开启ssh服务,允许ansible主机登录
在托管节点上也需要安装Python2.5或以上的版本
如果托管节点上开启了SELinux,需要安装libselinux-python

2.安装ansible
[root@ansible40 ~]# vim /etc/hosts
192.168.4.40 ansible40
192.168.4.41 web41
192.168.4.42 web42
192.168.4.43 db43
192.168.4.44 db44
192.168.4.45 cache45
安装及验证
在ansible托管主机上配置yum配置文件
安装 yum install ansible 
验证ansible --version
[root@ansible40 ~]# cd ansible/
[root@ansible40 ansible]# yum -y install *.rpm
[root@ansible40 ~]# ansible --version

二、ad-hoc
1.主机定义与分组
安装ansible之后可以做一些简单的任务
ansible配置文件查找顺序
首先检测ANSIBLE_CONFIG变量定义的配置文件
其次检查当前目录下的./ansible.cfg文件
再次检查当前用户家目录下的~/ansible.cfg文件
最后检查/etc/ansible/ansible.cfg文件
/etc/ansible/ansible.cfg是ansible的默认配置文件路径
ansible.cfg配置文件:
inventory定义托管主机地址配置文件路径名
inventory指定的配置文件,写入远程主机的地址
格式:
#表示注释
[组名称]
主机名称或ip地址,其他参数
ansible.cfg配置文件:
ssh主机key验证配置参数
host_key_checking = False
如果为False,不需要输入yes
如果为True,等待输入yes
分组定义,范围定义样例
[web]
web1
web2

[db]
db[1:2]

[other]
cache  
[root@ansible40 ~]# vim /etc/ansible/ansible.cfg
 14 inventory = /etc/ansible/hosts
 61 host_key_checking = False
[root@ansible40 ~]# vim /etc/ansible/hosts
 44 [web]
 45 web41
 46 web42
 47 
 48 [db]
 49 db43
 50 db44
 51 
 52 [other]
 53 cache45

2.ansible命令基础
ansible主机集合 -m 模块名称 -a 模块参数
主机集合 主机名或分组名,多个使用逗号分隔
-m 模块名称,默认command模块
-a or --args 模块参数
-i inventory文件路径,或可执行脚本
-k 使用交互式登录密码
-e 定义变量
-v 显示详细信息
列出要执行的主机
ansible all --list-hosts
[root@ansible40 ~]# ansible all --list-hosts
  hosts (5):
web41
web42
cache45
db43
db44

[root@ansible40 ~]# ansible web,db43 --list-hosts
  hosts (3):
web41
web42
db43

批量检测主机
ansible all -m ping -k
[root@ansible40 ~]# ansible web -m ping -k
SSH password: 

3.部署证书文件
ansible是通过SSH在远程执行命令的
ssh远程执行命令必须通过认证才行
密码写入配置文件安全性很差
使用key认证
给所有主机部署公钥
没有密钥命令执行会出错
ansible web -a 'uptime'
[root@ansible40 ~]# cd /root/.ssh/
[root@ansible40 .ssh]# ssh-keygen -t rsa -b 2048 -N '' -f key
[root@ansible40 .ssh]# ssh-copy-id -i key.pub cache45  ==>>拷贝给所有主机
[root@ansible40 .ssh]# ssh web41 -i key ==>>指定私钥

4.inventory扩展参数
ansible_ssh_port
ssh端口:如果不是默认的端口号,通过此变量设置
ansible_ssh_user
默认的ssh用户名
ansible_ssh_pass
ssh密码(这种方式不安全,建议采用--ask-pass或SSH密钥)
ansible_ssh_private_key_file
ssh使用的私钥文件,适用于有多个密钥,

vars变量定义,用于组名后面
例如:[all:vars]
ansible_ssh_private_key_file="/root/.ssh/key"
children子组定义,用于引用其他组名称
例如:[app:children]
web
db
[root@ansible40 ~]# cat -n /etc/ansible/hosts 
44 [web]
45 web41
46 web42
47
48 [db]
49 db43
50 db44 ansible_ssh_port=22 ==>>给单个主机定义变量
51
52 [other]
53 cache45
54
55 [all:vars]
56 ansible_ssh_private_key_file="/root/.ssh/key"   ==>>给所有主机定义变量
57
58 [app:children]
59 web
60 db
自定义配置文件
创建文件夹myansible
创建配置文件ansible.cfg 
[root@ansible40 ~]# mkdir /myansible
[root@ansible40 myansible]# touch ansible.cfg
[root@ansible40 myansible]# vim ansible.cfg 
  1 [defaults]
  2 inventory = myhosts
  3 host_key_checking = False
[root@ansible40 myansible]# vim myhosts
1 [app1]
2 web41
3 db43
4
5 [app2]
6 web42
7 db44
8 cache45

5.动态主机
无限可能
ansible Inventory包含静态和动态的Inventory,静态Inventory指在文件/etc/ansible/hosts中指定的主机和组,动态Inventory指通过外部脚本获取主机列表,按照其要求格式返回给ansible命令
Json
JSON(JavaScript Object Notation,Javascript对象表示法),一种基于文本独立于语言的轻量级数据交换格式

三、批量配置管理
1.ansible-doc和ping模块
ansible-doc
模块的手册相当与shell的man,很重要
ansible-doc -l   列出所有模块
ansible-doc modulename  查看帮助
ping模块
测试网络连通性,ping模块没有参数
[root@ansible40 ~]# ansible-doc -l
[root@ansible40 ~]# ansible-doc lineinfile
[root@ansible40 ~]# ansible all -m ping ==>>测试ssh的连通性

2.command模块
默认模块,远程执行命令
用法;
ansible host-pattern -m command -a '[args]'
[root@ansible40 ~]# ansible all -m command -a 'uptime' ==>>查看所有机器负载
[root@ansible40 ~]# ansible all -m command -a 'date +%F_%T'  ==>>查看日期和时间
注意事项:
该模块通过-a跟上要执行的命令可以直接执行,若命令里有如下字符则执行不成功,<,>,|,&。
command模块不能解析系统变量
该模块不启动shell直接在ssh进程中执行,所有使用到shell的命令执行都会失败

3.shell模块
shell模块用法基本和command一样,区别是shell模块是通过/bin/sh进行执行命令,可以执行任意命令
不能执行交互式的命令,如vim,top
[root@ansible40 ~]# ansible all -m shell -a 'uptime'   ==>>查看所有机器负载
变量解析
ansible执行命令是二次解析
第一次在本机解析,第二次在执行机器解析
需要二次解析的变量要转义(\)
文件在哪里
文件在用户家目录
ansible是使用ssh多次连接执行
连接退出之后之前的状态就全部失效了
解决办法:使用chdir代替cd命令
[root@ansible40 ~]# ansible cache45 -m shell -a 'chdir=/tmp touch testfile'
[root@ansible40 ~]# ansible cache45 -m shell -a 'touch /tmp/testfile1'
[root@ansible40 ~]# ansible web41,db44 -m shell -a 'useradd nb'
[root@ansible40 ~]# ansible web41,db44 -m shell -a 'echo 123456 |passwd --stdin nb'

4.scripts模块
在本地写脚本,然后使用scprit模块批量执行
注意:该脚本包含但不限于shell脚本,只要指定Sha-bang解释器的脚本都可运行
[root@ansible40 ~]# vim userwk.sh
#!/bin/bash
id nb
if [ $? != 0 ];then
  useradd wk
  echo 123456 | passwd --stdin wk
fi
[root@ansible40 ~]# ansible web -m script -a 'userwk.sh'

5.yum模块
使用yum包管理器来管理软件包
name:要进行操作的软件包名字
state:动作(installed,removed)
install === installed
remove === removed
[root@ansible40 ~]# ansible db -m yum -a 'name="mariadb-server" state=installed'  ==>>给所有db主机安装mariadb
[root@ansible40 ~]# ansible cache45 -m yum -a 'name="lrzsz" state=removed'   ==>>cache45主机删除lrzsz

6.service模块
name:必选项,服务名称
enabled:是否开机启动 yes|no
sleep:执行restarted ,会在stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止,重启,重新加载等操作(started,stopped,restarted,reloaded)
[root@ansible40 ~]# ansible cache45 -m service -a 'name="sshd" enabled="yes" state="started"'

7.copy模块
复制文件到远程主机
src:复制本地文件到远程主机,绝对路径和相对路径都可以,路径为目录时会递归复制。若路径以“/”解为,只复制目录里的内容,若不以“/”结尾,则复制包含目录在内的整个内容,类似rsync
dest:必选项,远程主机的绝对路径,如果源文件是一个目录,那该路径必须是目录
backup:覆盖前先备份原文件,备份文件包含时间信息。有两个选项:yes|no
force::若目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在该文件时财富值,默认为yes
[root@ansible40 ~]# ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'  ==>>复制文件
[root@ansible40 ~]# ansible all -m copy -a 'src=/root/ dest=/root/'

8.lineinfile模块
类似sed的一种行编辑替换模块
path  目标文件
regexp 正则表达式,要修改的行
line 最终修改的结果
[root@ansible40 ~]# ansible db -m lineinfile -a 'path="/etc/my.cnf" regexp="^binlog-format" line="binlog-format = row"'

9.replace模块
类似sed的一种行编辑替换模块
path  目标文件
regexp 正则表达式
replace 最终修改的结果
[root@ansible40 ~]# ansible db -m replace -a 'path="/etc/my.cnf" regexp="row" replace="mixed"'

10.setup模块
主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块常用filter参数
filter过滤所需信息
[root@ansible40 ~]# ansible cache45 -m setup -a 'filter=ansible_distribution'

四、ansible七种武器
1.第一种武器
ansible命令,用于执行临时性的工作,必须掌握

2.第二种武器
ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明及应用案例介绍,功能和Linux系统man命令类似,必须掌握 

3.第三种武器
ansible-console是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端上像shell一样使用ansible内置的各种命令,这位习惯使用shell交互方式的用户提供了良好的使用体验

4.第四种武器
ansible-galaxy从github上下载管理Roles的一款工具,与python的pip类似

5.第五种武器
ansible-playbook是日常应用中使用频率最高的命令,工作机制:通过读取先编写好的playbook文件实现批量管理,可以理解为按一定条件组成的ansible任务及,必须掌握 

6.第六种武器
ansible-vault主要用于配置文件加密,如编写好的playbook文件中包含敏感信息,不想他人随意查看,可用它加密/解密这个文件

7.第七种武器
ansible-pull
ansible有两种工作模式pull/push,默认使用push模式工作,pull和push工作模式机制正好相反
适用场景:有大批量机器需要配置,即便使用高并发线程依旧要花费很多时间
通常在配置大批量机器的场景下使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求

五、JSON简介
1.JSON是什么
JSON是JavaScript对象表示法,它是一种基于文本独立于语言的轻量级数据交换格式
JSON中的分割符号限于,单引号',小括号(),中括号[],大括号{},冒号:,逗号,。

2.JSON特性
JSON是纯文本
JSON具有“自我描述性”(人类可读)
JSON具有层级结构(值中存在值)
JSON可通过JavaScript进行解析


3.JSON语法规则
数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组

4.JSON数据的书写格式是:名称/值对 
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:"诗仙":"李白"

5.JSON语法规则之数组
{"诗人":
["李白","杜甫","白居易","李贺"]
}
复合复杂类型
{"诗人":
[{"李白":"诗仙","年代":"唐"},
{"杜甫":"诗圣","年代":"唐"},
{"李贺":"诗鬼","年代":"唐"}
]
}
六、YAML简介
1.YAML是什么
是一个可读性高,用来表达数据序列的格式
YAML(YAML Ain't Markup Language)
YAML参考了多种语言,如:C语言,Python,Perl等,并从XML,电子邮件的数据格式中获得灵感,Clark Evans在2001年首次发表了这种语言,目前已有数种编程语言或脚本语言支持这种语言

2.YAML语法简介
YAML的结构通过空格来展示
数组使用-表示
键值对使用:表示 
YAML使用一个固定的缩进风格表示数据层级结构关系
一般每个缩进级别由两个以上空格组成
#表示注释
注意事项:
不要使用tab,缩进是初学者容易出错的地方之一
同一层级缩进必须对齐

3.YAML的键值表示方法
采用冒号分隔
:后面必须有一个空格
例如:
"诗仙": "李白"
或 
"李白":
"诗仙"
复杂YAML的键值对嵌套
例如:
"诗人":
"李白": "诗仙"
或 
"诗人":
"李白":
"诗仙"

4.YAML数组表示方法
使用一个端横杠加一个空格
例如:
- "李白"
- "杜甫"
- "李贺"
哈希数组复合表达式
"诗人":
- "李白"
- "杜甫"
- "李贺"

5.高级复合表达式
例如:
"诗人":

"李白": "诗仙"
"年代": "唐"

"杜甫": "诗圣"
"年代": "唐"

"李贺": "诗鬼"
"年代": "唐"

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:Caffe源码精读 - 8 - Caffe Layers之yolov3_layer(yolov3 loss计算层)

下一篇:小程序性能与体验优化(一)

您可能感兴趣

  • Win32汇编的环境和基础

    (罗云彬)1.32位环境简介在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把...

  • TCP/IP基础文章(安全篇)

    TCP/IP基础文章(安全篇)来源:wuhanman转贴TCP/IP的层次不同提供的安全性也不同,例如,在网络层提供虚拟私用网络,在传输层提供安全套接服务。下面将分别介绍TCP/IP不同层次的安全性和提高各层安全性的方法。 一、Internet层的安全性 对Internet层的安全协议进行标准化的想法早就有了。在过去十年里,已经提出了一些方案。例如,"安全协议3号(SP3)"就是美国国家安全...

  • Apusic Application Server技术白皮书

    什么是应用服务器? 所有的企业级应用系统必须构建在一个完整的系统框架中,这个系统框架提供企业级计算所必须的五项关键技术: 交易完整性 可靠性 互用性 安全性 可伸缩性 提供这些底层关键服务的服务器叫应用服务器。应用服务器的出现使得应用软件开发商在开发企业级应用时,不需要考虑交易实现、安全管理等底层技术实现,而把精力集中在商业逻辑的设计上,降低了开发风险和成本,缩短了开发时间。 J...

  • VXD技术漫谈(1)

    VXD技术漫谈(1)        说起VxD技术,很多接触电脑的人都会感到陌生,不过提起CIH病毒,我相信您一定不再摇头。  有过一定Windows编程经验的人可能听说过VxD这个词。80386的保护模式给了我们非常多的“保护”,对于一个不懈地追求自由的人来说,“镀金的笼子也是笼子”,翻遍Windows编程的书籍,也许最终只找到这样一扇通向自由的门:试一试VxD。  VxD是什么?为什么C...

  • VXD技术漫谈(2)

    VXD技术漫谈(2)    VxD的明天依然美好吗?  1996年的Windows Hardware Engineering Conference(WinHEC)会议上,Microsoft宣布了一种新的Windows设备驱动程序模型——Win32 Driver Model(WDM)。这种新的设备驱动程序模型将成为Windows 2000(即Windows NT 5.0)的核心。  这个消息令...

  • 会议电视技术介绍

    会议电视技术介绍   在今天的世界里,企业与他们的合作伙伴及客户间需要高效、可靠的交流工具。通过传统交换网络、IP网络以及I nternet上的信息,人们可以实现包含视频、音频和同步多媒体在内的丰富协同工作状态,这就是我们经常使用的会议电视技术。   PictureTel公司致力于提供包括视频、音频、数据、视频流技术、网络管理等在内的全方位协作方案。其产品Venue2000 Model...

  • LINUX is obsolete Linux的技术过时了 Date: 29 Jan 92 12:12:50 GMT

    *** EOOH *** 来自Newsgroup的论争From: ast@cs.vu.nl (Andy Tanenbaum)Newsgroups: comp.os.minixSubject: LINUX is obsolete Linux的技术过时了Date: 29 Jan 92 12:12:50 GMTOrganization: Fac. Wiskunde & Informatica, V...

  • 一种新颖的技术:Delphi for DOS!!!

    看看题目,是不是觉得很怪?Delphi 从诞生起就是 for Windows 的,那里有 for DOS 的? 如果你过去曾用过 Borland 的 Turbo Pascal 系列编写软件,那么你应当对 Turbo Pascal 的特点了解一些。Turbo Pascal 直到 6.0 版都不支持 DOS 下的保护模式编程(DPMI)。直 到 Borland Pascal 7.0 出世,然而...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介介绍:华为云为您免费提供大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介的相关内容。| 移动地址: 大型架构及配置技术ansible(一)之ansible基础,ad-hoc,批量配置管理,ansible七种武器,JSON简介,YAML简介 | 写博客