Day1-上午-Part1: ansible简介及安装, inventory配置及引用

  • 2020-03-18
  • 216
  • 0

自动化管理介绍


一.运维自动化能帮我们干什么

1. 基础运维(系统运维):

  • 采购服务器、网络设备、租用idc、购买带宽、云主机。。。
  • 配置网络设备
  • 安装操作系统 — PXE/cobbler
  • 系统初始化 — ansible

    • 网络配置
    • 修改主机名
    • dns
    • yum/apt
    • 安装基础软件包(sysstat/vim)
    • 修改文件描述符(1024 –> 65535)
    • 设置环境变量(PS1/HISTORY)
    • 修改内核参数(sysctl)
    • 配置时间同步
    • 关闭selinux
    • 关闭firewalld
    • 安装zabbix_agent/node_exporter

2. 业务运维:

  • 部署中间件(nginx/tomcat/mysql/redis) — ansible

  • php服务 –> lamp(linux/apache(nginx)/mysql/php)

  • java服务 –> jdk/tomcat/resin/jboss/nginx/lvs

  • DBA:

    • redis/mysql — mysql
  • 发布代码

    • 发布 –> 发布系统(jenkins/ansible)
  • 域名配置(web服务)

    • 设置域名
  1. 日常维护(修改配置、故障排查)

  2. 日常发布、配置变更、

  3. 监控

  • prometheus/zabbix/open-falcon/apm

[以上这些都可用自动化运维工具实现]

二.主流自动化管理工具

1. ansible

  • 延续了saltstack的优点,但是不用部署agent,而是直接使用SSH下发指令
  • 基于python开发,会直接在ansible控制端实现模块化,然后将相关指令通过不同的模块翻译成py文件,最后将py文件通过SSH传递到目标端通过python直接执行
  • ansible不是完全的agent-less,因为他想要客户端安装SSH和python
  • ansible存在的缺陷:
    • 客户端不能自动发现,需要ansible服务器本地维护inventory列表
    • 性能问题:高并发场景下,会比saltstack慢,毕竟SSH天然不是拿来干高并发自动控制用的(似乎一次性500台是极限?但是老师讲:慢一点就慢一点,用还是能用的,几秒钟而已)

2. Saltstack,也需要需要安装agent,经过配置会主动向主控端进行注册.是由python语言写的,agent只看读的懂python语言

  • 客户端组件叫salt-minion
  • 主控端组件叫salt-master
  • saltstack和下面冷门的需要agent的自动化工具相比好处是是实现了模块化
    • shell:servcie httpd restart
    • cmd.run servcie httpd restart← 这里的cmd.run就是saltstack的模块,作用是讲shell语言翻译成python脚本,这样虽然saltstack的agent只看读的懂python语言,但是通过cmd.run模块来直接给他shell命令也能运行了
    • 还有各种很多常用功能都模块化了

[还有一些冷门的]

3. Puppet,基于ruby的,需要在要被控机器上部署agent,经过配置会主动向主控端进行注册,主控向被控机器下发指令实际上是向被控机器的agent下发指令,但是指令必须是ruby语言的,因此想puppet玩得好,必须要熟练掌握ruby语言

4. cfengine

5. chef

三.云原生概览

https://landscape.cncf.io/

https://github.com/cncf/landscape

1584519891(1)

Ansible概述


一.ansible特性

  • Agentless:不需要在被管理节点上安装客户端,只要有sshd即可(实际上按照前边讲的,并非是完全的agentless,因为至少需要sshd和python)
  • Serverless:在服务端不需要启动任何服务,只需要执行命令即可
  • Modules in any language:基于模块工作,可以使用任何语言开发ansible模块
  • YAML: not code:使用yaml语言定时playbook
  • SSH by default:默认使用ssh控制各节点
  • Strong multi-tier solution:可实现多级控制(多地域多二级主控端被总的主控端进行管理)

二.ansible的自管理

  • 大规模生产环境的做法是,每个客户端都安装ansible变成一个主控端,然后进行自我管理,也就是没有inventory,直接ansible localhost xxxx,好处是性能好,解决ansible高并发下的性能问题
    • 预先定义好很多功能的playbook在本地,有新增功能的就下发一波
    • 直接ansible主控端远程通知ansible的client执行ansible localhost xxxx,就是运行控制操作下放到每个节点去并发执行,解决性能问题

Image

三.ansible基本组件

Image(1)

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):把需要完成的多个任务定义在剧本中
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件.如果是windows主机应该是winRM模块
  • 主机群(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作

四.ansbile的工作机制

Image(3)

  • 一个playbook实际上就是声明了不同的阶段和命令该调用哪些模块,然后ansible运行一句,就调用一次模块(冲着角度看,还是ansible localhost确实性能高一些)

ansible安装


yum install ansbile

一.官方安装步骤:

  • 这里存一个适配python2.7的python-argcomplete包,可以直接安装的

python2-argcomplete-1.7.0-4.el7.noarch.rpm

二.安装完成后查看版本

inventory配置


一.默认inventory文件的位置

二.inventory的语法

1. 直接写IP清单或hostname

  • 这里的hosts的记录是强匹配的,如果一个IP或hostname实际上可达,但是没有写入到/etc/ansible/hosts中,那么ansible <这个ip> -m -ping也是会报错,提示找不到这个IP
  • 如果没有配置公私钥,可以直接指定用户密码的方式,举例:ansible all -u liuqd -k -m ping← 这里的-u就是指定用户的,-k是代表手动输入密码
  • 不使用-u,默认是ansible运行命令的用户去执行,如果指定了-u不想输入密码,可以使用ssh-keygen和ssh-copy-id去配置跨用户的免密登录
  • 这样的的inventory,如果想指定全部客户端,直接使用all关键字,如果想指定部分多个客户端,就没有办法了,必须要在命令行将所有主机IP/hostname都写一遍,这自然是不合适的

2. 主机组

  • 一个主机可以属于多个组,也可以直接放在那里不属于任何一个组

3. 主机组配合正则表达式

  • server[a:e],可以匹配servera,serverb,serverc,serverd,servere
  • server[1:3],可以匹配server1,server2,server3

4. 嵌套主机组

  • [my:children]里边的主机组也可以是一个父组,也就是所谓的多级嵌套(主机组嵌套主机组)

inventory的匹配引用


一.采用逗号分隔的多类型选择主机

  • 采用逗号分割,可以匹配多个组,多个主机或主机组混合

二.关键字选择主机

三.通配符匹配

四.表达式匹配

  • 表达式匹配inventory,表达是必须要加引号(单引号,双引号都行)
  • 引号中间的冒号分隔符也可以换成逗号,ansible ‘nginx,!server’ -m ping这样子也对
  • 表达式可以和通配符结合来使用

五.正则表达式匹配

  • 正则表达式匹配必须要以~开头
  • 正则表达式可以不需要用引号括起来
  • 实际使用场景很低

六.总结针对inventory的引用

Description Pattern(s) Targets
All hosts all (or *)
One host host1
Multiple hosts host1:host2 (or host1,host2)
One group webservers
Multiple groups webservers:dbservers all hosts in webservers plus all hosts in dbservers
Excluding groups webservers:!atlanta all hosts in webservers except those in atlanta
Intersection of groups webservers:&staging any hosts in webservers that are also in staging

Note

You can use either a comma (,) or a colon (:) to separate a list of hosts. The comma is preferred when dealing with ranges and IPv6 addresses.

七.–limit的用法

  • –limit的常见用法是如果有task失败,ansible会生成retry文件,然后直接–limit这个retry文件可以减少重复调度和缩小操作范围,从而加快速度

评论

还没有任何评论,你来说两句吧

津公网安备 12010302001147号 津ICP备18003766号