Ansible 运维管理平台部署维护与调优常见问题及技巧_第1页
Ansible 运维管理平台部署维护与调优常见问题及技巧_第2页
Ansible 运维管理平台部署维护与调优常见问题及技巧_第3页
Ansible 运维管理平台部署维护与调优常见问题及技巧_第4页
Ansible 运维管理平台部署维护与调优常见问题及技巧_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ansiblc是基于一致性、安全性、高可靠性设计的轻量级自动化工具,功能强大、部署

便捷、描述清晰。对于管理员、开发者、IT经理等都容易上手,学习曲线较低,能够快速

理解.、掌握Ansiblc的自动化体系,满足不同技术级别的用户需求。本文分享了在Ansiblc

部署、维护、调优中常见的一些难点解决办法和技巧,帮助大家更快的掌握使用方法。

1、Ansible运维管理平台部署都可以部署在哪些系统上?对系统配置有哪些具体要求?

对管理主机的要求:

FI前,只要机器上安装了Python2.6或Python2.7(windows系统不可以做控制主机),都

可以运行Ansibleo主机的系统可以是RedHat,Debian,CentOS,OSX,BSD的各种版本,等等。

自2.0版本开始,Ansible使用了更多句柄来管理它的子进程,对于OSX系统,需要增加ulimit

值才能使用15个以上子进程,方法sudolaunchctllimitmaxfilcs10242048,否则可能会看

见"Toomanyopenfile”的错误提示。

Ansible每个版本里面有详细的设备列表你可以参考

目前常用的支持RedHai,Ubuntu,SUSE,windows(Ansible需要winrm),AIX(需要安

装python),HPUX(需要安装python)网络设备cisco,Huawei;防火墙Fl前只能连接操作需

要模块支持cisc。的,华为的目前没看到模块。

2、无法访问外网如何快速安装Ansible?是否有打包好的依赖包?

Ansiblc软件安装的方式较多,非常灵活,可以满足各种环境的部署需求。一般可以直

接用源码进行安装,包括从GiUIub源码库安装方式、TAR包安装、制作RPM包安装等。

也可用操作系统软件包管理工具进行安装,包括YUM安装(适合Fedora.RHEL、CentOS)、

APT安装(适合Ubuniu)、Homebrew安装(适合MacOSX)、PIP安装等。其中大部分安装

方式需要服务端连通公网,在无法连接外部互联网的条件下,可以通过TAR包的安装方式,

快速搭建Ansible整套环境,所有安装包的下载地址为:

yumdownload把需要的包下载到一个目录。

然后把这个目录做成yum本地源。

可以mount操作系统安装盘dvd版镜像iso文件,找到软件包目录然后将yum源设置为

该目录。

3、在编排程序执行,软件安装等过程中,Ansibleplaybook与shell脚本,各自的特点有

哪些?

【问题描述】有时候遇到linux系统批量安装程序,部分程序是公司内部开发人员编写,

会倾向写shell,再通过批量工具执行脚本。在什么情况下会选择使用ansible工具?

目前使用的是2.9.9版本,实际使用过程发现,ansible解决了大文件批最远程复制效率

低的问题,以前老版本在上传IG的大文件非常慢?

最大的三个不同:

1、Ansible内置了大量的模块,这些模块是声明式的(Declarative),只需使用这些模块

描述被管节点期望达到的状态。而Shell脚本是命令式,声明式相比命令式更智能,例如分

别使用Shell脚本和AnsiblePlaybook启动某个服务,然后再完成其他事情。如果在启动时发

现这个服务已经启动,监控端口已经被占用,Shell脚本将异常退出,返回非0,导致后面

的脚本中断执行,但使用Playbook将不会遇到这样的问题。

2、Ansible内置模块都是等幕性的(Idempotent)。等幕性对于自动化维护是非常重要的

特性,这样在被管节点上多次执行AnsiblePlaybook也能达到同样效果。相对于直接执行操

作系统Shell脚本的方式是巨大的改进,操作系统脚本再执行一次可能就会产生不同的、非

预期的结果。而Ansible具有'幕等性的特点,无论执行多少次,只要你的操作系统是同一个

版本,那么安装出来的环境绝对是一样的,这样也就保证了应用所处的底层环境的一致性,

而不会造成同一个版本的应用在不同的机器上运行出现不同的效果的问题。

3、AnsibleRolc功能,可以使用ansiblcrole来简化playbook的编写且易于生用,这点是

Shell脚本非常难以做到论。例如我们想要在主机A、B、C上部署JDK1.7的环境,主:机D、

E、F上部署JDK1.8的环想而又想在A、B上安装Nginx;C、D上部署Tomcat;E、F上

部署MySQL,这时候使用Ansible工具是最佳的。对于这种情况只需要新建5个roles,分

别是:JDK1.7、JDK1.8、Nginx、Tomcat、MySQL。对于A、B主机,安装JDK1.7和Nginx

的roles,C主机安装JDK1.7和Tomcat的roles;D主机安装JDK1.8和Tomcat的角色,E、

F主机安装JDK1.8和MySQL的角色。换句话讲,Ansible就是对于各种环境的搭积木式组

合,你需要什么环境,我就给你装上什么环境,对于系统管理员来讲,不必再去每一台机器

上根据需求名单一个一个安装,不仅效率低、劳动成本高、而且容场出错,造成环境的不一

致。

playbook,就像你坐镇指挥台指挥大家打仗,发布号令即可,最后执行的结果坐等就有

报告。

shell,就像你跑到步兵阵营,一个一个告诉他们一会儿怎么操作,然后再跑到骑兵阵营

一个一个告诉他们怎么操作。。。。执行结果你还需要一个一个记录,自己汇总。

4、Ansible批带管理主机时选择长连接还是短连接?选择长连接时资源占用高不高?

用长连接效率高,加快Ansible的执行速度,尤其是批量管理的主机上千上万时。而且

长连接可以复用,对受管主机的开销就是一个连接的开销。

开源版本的是无连接方式,每次创建ssh连接。

企业版本支持MQ,是长连接方式。

5、关于执行Ansible查看任务进度:在执行需要长时间等待的命令时,如何显示实时

任务的状态。

Ansibleplaybook执行任务时会显示当前任务执行到哪儿的。

6、Ansible告警通知功能除了邮件,现在支持微信方式吗?

用Ansible调用脚本驱动微信接口,微信接口需要开发。

7^关于Ansiblemysq]模块执行添加权限,然后mysql查看用户权限却失败?

【问题描述】在创建mysql用户时使用mysql模块,结果权限却没有执行上

•name:Config/etc/ay.cnf

Unelnffle:desta/etc/fstate^present

•7character-set-server-utf8-

name:servicestartMysql

service:nd«eM>ari4dben-bledpc$tate«$tarted

-name:createadatabaseI

•ysqV.db:|

login.host:-127.0.e,l"

login_user:"roof

Vogin^port:"3366"

naae:"keystone"

encoding:,utf8"

state:"present*

-name:createdatabaseuser

login_user:root

nene:keystone

prlv:,•.•:ALl,

用mysql_user模块授权是没问题的,您可以用selecL*frommysql.usei•看到实际用户权限

已经授予的。

只是您查看用户授权的命令有些许问题,要用showgrantsfor;去查看,因为您通过模块

去授权默认的主机是localhosl

8、如何使用Ansible使用变量在一个被控节点中,往一个文件中写入另一个被控节点

的IP?

【问题描述】在自己写ansible部署K8s的playbook时,master节点为0node

节点为12

在编写node节点时要插入master的信息,由于无法做到以变量的方式把master节点ip

信息插入到node节点的/etc/kubcrnetes/kubclct文件中,最后以var变最的方式解决。请问如

何使用ansible使用变量在一个被控节点中,往一个文件中写入另一个被控节点的IP?

(root@ansibleroles]*catk8s-node/tasks/set-config.yaml

-name:setfileconfig

replace:

path:,{{itea.path)}'

regexp:*{(ite«.regexp})*

replace:*{{it«i.replace})*

with_ite»s:

-7path:Vetc/kubernetes/config*,regexp:•127.0.6.1,,replace:,backup:yes)

-{path:Vetc/kubernetes/kubelet*,regexp:•--address-127.0.8.T,replace:1--address^.0.0.O'.backup:yes)

-(path:Vetc/kubernetes/kubelet1.regexp:*--hostnai»e-override>*,replace:•--hostnameoverride«{{host

name|quote}}'}

.i{p^fh:Vetc/kubernetes/kubelet*,regexp:•--api-servers»h11p://127.0.0.1:8080•.replace:,--api-servers»http:

/>|<(host))18080')

-TP3ih:Vetc/kubernetes/kubelet1.regexp:KUBELET-PORT',replace:•KUBELET_PORT')

•<path:Vetc/kubernetes/kubelet*,regexp:*registry.access.redhat.co^rhel7/pod-infrastructure:latest*•replac

e:docker.io/xiaotech/poa-inrrastrucTure:laiesx*)

(root^ansibleroles]#cat../

hostsk8s.ansible.tar.gzMdin.ywilroles/

JraotAanderolescatk8s-node/vars/Min.yanil

host:master|

irootsansiDieroles)*I

三种方式:

1、直接在playbook中通过“vars:变量名”的方式声明变量,并通过“{{变量名}}”的方式

使用已声明的变量的方式来带入master节点的IP地址信息。

2、在roles中用var变量文件的方式(您的方式)。

3、引用inventory文件中定义的主机变量°

9、Ansib匕能否自定义功能?

【问题描述】Ansible在使用过程中,可能会有部分功能无法满足要求,能否根据实际

情况,进行自行定义?

ANSIBLE很强大,能够支持自定义模块和自定义插件,来满足我们的实际需要,实现

现有模块和插件无法达到的效果。

Ansible自定义模块:

模块是Ansible的核心引擎,Ansible中的模块就是传输给远程主机并执行的那点代码。

它们可以使用远程主机可以执行的任何语言实现。Ansible的核心开发团队维护的Ansible

核心模块大概有150多个,涵盖了云、命令、数据库、叉件、网络、包、源控制、系统、工

具、web设施等等。另外,还有100多个其他额外模块,主要由社区贡献者维护,它们扩展

了这些类别的很多功能。真正神奇就发生在模块代码内部,它们接受传入的参数,然后建立

预期的结果。而且Ansible能够提供一种简单的机制来利用来自Ansible外部的自定义模块。

Ansible自定义插件使用场景举例:

1)除Paramiko、本机SSH、Local、Winrm连接方式外,希望Ansible基于新的通信方式

与远程主机交互;

2)除Ansible内置的with_itemsswith_fileglob循环体外,希望有新的遍历方式;

3)除了Ansible内置的hosl_vars、group_vars等变量调用方式外,希望有新的变量定义方

式;

4)除了Ansible的内置的Jinja2模板渲染、to_yaml、【o」son等过漉器外,希望有新的过

滤器;

5)定义新的回调机制,即捕获响应事件后自定义新的响应形式。

Ansible的功能自定义可以通过两个方法来解决:

方法1:自定义脚本,如果自定义功能比较简单,可以通过操作系统脚本方式来实现的

话,可以通过自定义一个shell脚本,并通过ansible的scripl模块进行调用。以实现自定义

功能

方法2:自定义模块,这个会稍微复杂一点。ansible是通过pylhon语言开发的,并且

支持通过python语言自定义模块。不过这一点需要具有一定的编程知识。

[root@tivscapinginx__was_mysql]#tree

—deploy_nginx_was_mysql.yaml

——hosts

—roles

—base.instal1

—files

1——RHEL.repo

—tasks

1——main,yaml

—templates

1-ntp.conf.j2

——mysql_instal1

—tasks

1——main,yaml

——templates

1—my.cnf.j2

——nginx_instal1

—tasks

1—main,yaml

—templates

1—nginx.cfg.j2

—was_insta11

—files

1——wasinstall.sh

—tasks

1—main,yaml

vars

«—all

其中deploy_nginx_was_mysql.yaml是roles的入口文件,例如:

-name:instal1ntpdserviceandinirbaseenvironmentforallhosts

hosts:al1

roles:

-base_install

-name:instal1mysql

hosts:mysql

roles:

-mysql_install

-name:instal1was

hosts:was

roles:

-was_insta11

-name:instal1nginx

hosts:nginx"

roles:

-nqinx_install

这里就可以根据hosts文件中定义的不同主机组来引用不同的roles进行相关的配置部

署,并通过:

ansible-playbook-ihostsdeploy_nginx_was_mysql.yaml来调用。

hosts文件中定义了nginx、mysql和was主机组相关信息。

vars目录下的文件中定义playbook中需要引用到的变量。

roles目录下则编制了base_install、mysqUnstall、was_install、nginx_instaH等四个不同

roles的playbook,配置模板和文件等内容。

通过这样分拆的方式,一个复杂的playbook大大简化、清晰化,而且rolesFI录下的所

有子roles都可以更用到其他项目中去使用,我们的任务就是编写一个个小型的playbook,

最后再用role的方式去整合,形成一个大的复杂的功能逻辑。

使用Ansiblc实现自动化运维的一些技巧

最近一年才有机会在生产环境上使用Ansibleo用的过程中,想把一些小技巧记录下来,

避免自己忘记。如果能帮助到其他同学就更好了。如果有同学指出有更好的方法,就更更好

了。

技巧1:校验你的模板文件是否正确

通常我们会使用tcmplatcmodulc来生成应用的配置,比如生成Nginx的配置或者sudocrs

配置。而像sudoers文件内的配置错误可能直接导致无法登录。所以,我们希望在生成这些

配置文件后能校验一下它的正确性。如果校验失败,直接停止,不生成该配置文件。

而templatemodule有一个属性validate就是为了实现这一需求的:

-template:

src:"user-sudoers"

dest:'7etc/sudoers.d/abc"

validate:visudo-cf%s

校验Nginx配置文件的文件:

-namc:Copythcnginxfilc

template:

src:nginx.conf.j2

desl:/etc/nginx/nginx.conf

validate:7usr/sbin/nginx-t-c%s"

notify:

-restartnginx

校验Prometheus配置文件:

-namc:CopyPromcthcusconfig

template:

src:promelheus.yml.j2

dest:"/etc/pronietheus.yml"

validate:"prorntoolcheckconf^g%s'^

notify:

rcloadpromcthcusconfig

校验Logstash配置文件:

-naine:templateconfigs

template:

src:"logstash-filter.conf

dest:"/opt/iogstash/conf'

validate:Mlogstash-t-f%s"

environment:

JAVA_HOME:""##logstash命令需要JAVA_HOME环境变量

技巧2:使用host变量解决分布式系统中的id问题

在部署Zookeeper时,,通常会部署3台组成集群,同时每台Zooke叩er都需要在配置一

个myid的文本文件,而这个文件中只放id。而id是要求每台机器都是不同的。这时host

变量派上用场了。定义host变量有两种方式:

第一种:直接在inventory文件中定义

[zk]

linyi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论