Ansible 運(yùn)維管理平臺(tái)部署維護(hù)與調(diào)優(yōu)常見問題及技巧_第1頁(yè)
Ansible 運(yùn)維管理平臺(tái)部署維護(hù)與調(diào)優(yōu)常見問題及技巧_第2頁(yè)
Ansible 運(yùn)維管理平臺(tái)部署維護(hù)與調(diào)優(yōu)常見問題及技巧_第3頁(yè)
Ansible 運(yùn)維管理平臺(tái)部署維護(hù)與調(diào)優(yōu)常見問題及技巧_第4頁(yè)
Ansible 運(yùn)維管理平臺(tái)部署維護(hù)與調(diào)優(yōu)常見問題及技巧_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Ansiblc是基于一致性、安全性、高可靠性設(shè)計(jì)的輕量級(jí)自動(dòng)化工具,功能強(qiáng)大、部署

便捷、描述清晰。對(duì)于管理員、開發(fā)者、IT經(jīng)理等都容易上手,學(xué)習(xí)曲線較低,能夠快速

理解.、掌握Ansiblc的自動(dòng)化體系,滿足不同技術(shù)級(jí)別的用戶需求。本文分享了在Ansiblc

部署、維護(hù)、調(diào)優(yōu)中常見的一些難點(diǎn)解決辦法和技巧,幫助大家更快的掌握使用方法。

1、Ansible運(yùn)維管理平臺(tái)部署都可以部署在哪些系統(tǒng)上?對(duì)系統(tǒng)配置有哪些具體要求?

對(duì)管理主機(jī)的要求:

FI前,只要機(jī)器上安裝了Python2.6或Python2.7(windows系統(tǒng)不可以做控制主機(jī)),都

可以運(yùn)行Ansibleo主機(jī)的系統(tǒng)可以是RedHat,Debian,CentOS,OSX,BSD的各種版本,等等。

自2.0版本開始,Ansible使用了更多句柄來管理它的子進(jìn)程,對(duì)于OSX系統(tǒng),需要增加ulimit

值才能使用15個(gè)以上子進(jìn)程,方法sudolaunchctllimitmaxfilcs10242048,否則可能會(huì)看

見"Toomanyopenfile”的錯(cuò)誤提示。

Ansible每個(gè)版本里面有詳細(xì)的設(shè)備列表你可以參考

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

裝python),HPUX(需要安裝python)網(wǎng)絡(luò)設(shè)備cisco,Huawei;防火墻Fl前只能連接操作需

要模塊支持cisc。的,華為的目前沒看到模塊。

2、無法訪問外網(wǎng)如何快速安裝Ansible?是否有打包好的依賴包?

Ansiblc軟件安裝的方式較多,非常靈活,可以滿足各種環(huán)境的部署需求。一般可以直

接用源碼進(jìn)行安裝,包括從GiUIub源碼庫(kù)安裝方式、TAR包安裝、制作RPM包安裝等。

也可用操作系統(tǒng)軟件包管理工具進(jìn)行安裝,包括YUM安裝(適合Fedora.RHEL、CentOS)、

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

方式需要服務(wù)端連通公網(wǎng),在無法連接外部互聯(lián)網(wǎng)的條件下,可以通過TAR包的安裝方式,

快速搭建Ansible整套環(huán)境,所有安裝包的下載地址為:

yumdownload把需要的包下載到一個(gè)目錄。

然后把這個(gè)目錄做成yum本地源。

可以mount操作系統(tǒng)安裝盤dvd版鏡像iso文件,找到軟件包目錄然后將yum源設(shè)置為

該目錄。

3、在編排程序執(zhí)行,軟件安裝等過程中,Ansibleplaybook與shell腳本,各自的特點(diǎn)有

哪些?

【問題描述】有時(shí)候遇到linux系統(tǒng)批量安裝程序,部分程序是公司內(nèi)部開發(fā)人員編寫,

會(huì)傾向?qū)憇hell,再通過批量工具執(zhí)行腳本。在什么情況下會(huì)選擇使用ansible工具?

目前使用的是2.9.9版本,實(shí)際使用過程發(fā)現(xiàn),ansible解決了大文件批最遠(yuǎn)程復(fù)制效率

低的問題,以前老版本在上傳IG的大文件非常慢?

最大的三個(gè)不同:

1、Ansible內(nèi)置了大量的模塊,這些模塊是聲明式的(Declarative),只需使用這些模塊

描述被管節(jié)點(diǎn)期望達(dá)到的狀態(tài)。而Shell腳本是命令式,聲明式相比命令式更智能,例如分

別使用Shell腳本和AnsiblePlaybook啟動(dòng)某個(gè)服務(wù),然后再完成其他事情。如果在啟動(dòng)時(shí)發(fā)

現(xiàn)這個(gè)服務(wù)已經(jīng)啟動(dòng),監(jiān)控端口已經(jīng)被占用,Shell腳本將異常退出,返回非0,導(dǎo)致后面

的腳本中斷執(zhí)行,但使用Playbook將不會(huì)遇到這樣的問題。

2、Ansible內(nèi)置模塊都是等幕性的(Idempotent)。等幕性對(duì)于自動(dòng)化維護(hù)是非常重要的

特性,這樣在被管節(jié)點(diǎn)上多次執(zhí)行AnsiblePlaybook也能達(dá)到同樣效果。相對(duì)于直接執(zhí)行操

作系統(tǒng)Shell腳本的方式是巨大的改進(jìn),操作系統(tǒng)腳本再執(zhí)行一次可能就會(huì)產(chǎn)生不同的、非

預(yù)期的結(jié)果。而Ansible具有'幕等性的特點(diǎn),無論執(zhí)行多少次,只要你的操作系統(tǒng)是同一個(gè)

版本,那么安裝出來的環(huán)境絕對(duì)是一樣的,這樣也就保證了應(yīng)用所處的底層環(huán)境的一致性,

而不會(huì)造成同一個(gè)版本的應(yīng)用在不同的機(jī)器上運(yùn)行出現(xiàn)不同的效果的問題。

3、AnsibleRolc功能,可以使用ansiblcrole來簡(jiǎn)化playbook的編寫且易于生用,這點(diǎn)是

Shell腳本非常難以做到論。例如我們想要在主機(jī)A、B、C上部署JDK1.7的環(huán)境,主:機(jī)D、

E、F上部署JDK1.8的環(huán)想而又想在A、B上安裝Nginx;C、D上部署Tomcat;E、F上

部署MySQL,這時(shí)候使用Ansible工具是最佳的。對(duì)于這種情況只需要新建5個(gè)roles,分

別是:JDK1.7、JDK1.8、Nginx、Tomcat、MySQL。對(duì)于A、B主機(jī),安裝JDK1.7和Nginx

的roles,C主機(jī)安裝JDK1.7和Tomcat的roles;D主機(jī)安裝JDK1.8和Tomcat的角色,E、

F主機(jī)安裝JDK1.8和MySQL的角色。換句話講,Ansible就是對(duì)于各種環(huán)境的搭積木式組

合,你需要什么環(huán)境,我就給你裝上什么環(huán)境,對(duì)于系統(tǒng)管理員來講,不必再去每一臺(tái)機(jī)器

上根據(jù)需求名單一個(gè)一個(gè)安裝,不僅效率低、勞動(dòng)成本高、而且容場(chǎng)出錯(cuò),造成環(huán)境的不一

致。

playbook,就像你坐鎮(zhèn)指揮臺(tái)指揮大家打仗,發(fā)布號(hào)令即可,最后執(zhí)行的結(jié)果坐等就有

報(bào)告。

shell,就像你跑到步兵陣營(yíng),一個(gè)一個(gè)告訴他們一會(huì)兒怎么操作,然后再跑到騎兵陣營(yíng)

一個(gè)一個(gè)告訴他們?cè)趺床僮?。。。。?zhí)行結(jié)果你還需要一個(gè)一個(gè)記錄,自己匯總。

4、Ansible批帶管理主機(jī)時(shí)選擇長(zhǎng)連接還是短連接?選擇長(zhǎng)連接時(shí)資源占用高不高?

用長(zhǎng)連接效率高,加快Ansible的執(zhí)行速度,尤其是批量管理的主機(jī)上千上萬(wàn)時(shí)。而且

長(zhǎng)連接可以復(fù)用,對(duì)受管主機(jī)的開銷就是一個(gè)連接的開銷。

開源版本的是無連接方式,每次創(chuàng)建ssh連接。

企業(yè)版本支持MQ,是長(zhǎng)連接方式。

5、關(guān)于執(zhí)行Ansible查看任務(wù)進(jìn)度:在執(zhí)行需要長(zhǎng)時(shí)間等待的命令時(shí),如何顯示實(shí)時(shí)

任務(wù)的狀態(tài)。

Ansibleplaybook執(zhí)行任務(wù)時(shí)會(huì)顯示當(dāng)前任務(wù)執(zhí)行到哪兒的。

6、Ansible告警通知功能除了郵件,現(xiàn)在支持微信方式嗎?

用Ansible調(diào)用腳本驅(qū)動(dòng)微信接口,微信接口需要開發(fā)。

7^關(guān)于Ansiblemysq]模塊執(zhí)行添加權(quán)限,然后mysql查看用戶權(quán)限卻失?。?/p>

【問題描述】在創(chuàng)建mysql用戶時(shí)使用mysql模塊,結(jié)果權(quán)限卻沒有執(zhí)行上

?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模塊授權(quán)是沒問題的,您可以用selecL*frommysql.usei?看到實(shí)際用戶權(quán)限

已經(jīng)授予的。

只是您查看用戶授權(quán)的命令有些許問題,要用showgrantsfor;去查看,因?yàn)槟ㄟ^模塊

去授權(quán)默認(rèn)的主機(jī)是localhosl

8、如何使用Ansible使用變量在一個(gè)被控節(jié)點(diǎn)中,往一個(gè)文件中寫入另一個(gè)被控節(jié)點(diǎn)

的IP?

【問題描述】在自己寫ansible部署K8s的playbook時(shí),master節(jié)點(diǎn)為0node

節(jié)點(diǎn)為12

在編寫node節(jié)點(diǎn)時(shí)要插入master的信息,由于無法做到以變量的方式把master節(jié)點(diǎn)ip

信息插入到node節(jié)點(diǎn)的/etc/kubcrnetes/kubclct文件中,最后以var變最的方式解決。請(qǐng)問如

何使用ansible使用變量在一個(gè)被控節(jié)點(diǎn)中,往一個(gè)文件中寫入另一個(gè)被控節(jié)點(diǎn)的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節(jié)點(diǎn)的IP地址信息。

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

3、引用inventory文件中定義的主機(jī)變量°

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

【問題描述】Ansible在使用過程中,可能會(huì)有部分功能無法滿足要求,能否根據(jù)實(shí)際

情況,進(jìn)行自行定義?

ANSIBLE很強(qiáng)大,能夠支持自定義模塊和自定義插件,來滿足我們的實(shí)際需要,實(shí)現(xiàn)

現(xiàn)有模塊和插件無法達(dá)到的效果。

Ansible自定義模塊:

模塊是Ansible的核心引擎,Ansible中的模塊就是傳輸給遠(yuǎn)程主機(jī)并執(zhí)行的那點(diǎn)代碼。

它們可以使用遠(yuǎn)程主機(jī)可以執(zhí)行的任何語(yǔ)言實(shí)現(xiàn)。Ansible的核心開發(fā)團(tuán)隊(duì)維護(hù)的Ansible

核心模塊大概有150多個(gè),涵蓋了云、命令、數(shù)據(jù)庫(kù)、叉件、網(wǎng)絡(luò)、包、源控制、系統(tǒng)、工

具、web設(shè)施等等。另外,還有100多個(gè)其他額外模塊,主要由社區(qū)貢獻(xiàn)者維護(hù),它們擴(kuò)展

了這些類別的很多功能。真正神奇就發(fā)生在模塊代碼內(nèi)部,它們接受傳入的參數(shù),然后建立

預(yù)期的結(jié)果。而且Ansible能夠提供一種簡(jiǎn)單的機(jī)制來利用來自Ansible外部的自定義模塊。

Ansible自定義插件使用場(chǎng)景舉例:

1)除Paramiko、本機(jī)SSH、Local、Winrm連接方式外,希望Ansible基于新的通信方式

與遠(yuǎn)程主機(jī)交互;

2)除Ansible內(nèi)置的with_itemsswith_fileglob循環(huán)體外,希望有新的遍歷方式;

3)除了Ansible內(nèi)置的hosl_vars、group_vars等變量調(diào)用方式外,希望有新的變量定義方

式;

4)除了Ansible的內(nèi)置的Jinja2模板渲染、to_yaml、【o」son等過漉器外,希望有新的過

濾器;

5)定義新的回調(diào)機(jī)制,即捕獲響應(yīng)事件后自定義新的響應(yīng)形式。

Ansible的功能自定義可以通過兩個(gè)方法來解決:

方法1:自定義腳本,如果自定義功能比較簡(jiǎn)單,可以通過操作系統(tǒng)腳本方式來實(shí)現(xiàn)的

話,可以通過自定義一個(gè)shell腳本,并通過ansible的scripl模塊進(jìn)行調(diào)用。以實(shí)現(xiàn)自定義

功能

方法2:自定義模塊,這個(gè)會(huì)稍微復(fù)雜一點(diǎn)。ansible是通過pylhon語(yǔ)言開發(fā)的,并且

支持通過python語(yǔ)言自定義模塊。不過這一點(diǎn)需要具有一定的編程知識(shí)。

[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

這里就可以根據(jù)hosts文件中定義的不同主機(jī)組來引用不同的roles進(jìn)行相關(guān)的配置部

署,并通過:

ansible-playbook-ihostsdeploy_nginx_was_mysql.yaml來調(diào)用。

hosts文件中定義了nginx、mysql和was主機(jī)組相關(guān)信息。

vars目錄下的文件中定義playbook中需要引用到的變量。

roles目錄下則編制了base_install、mysqUnstall、was_install、nginx_instaH等四個(gè)不同

roles的playbook,配置模板和文件等內(nèi)容。

通過這樣分拆的方式,一個(gè)復(fù)雜的playbook大大簡(jiǎn)化、清晰化,而且rolesFI錄下的所

有子roles都可以更用到其他項(xiàng)目中去使用,我們的任務(wù)就是編寫一個(gè)個(gè)小型的playbook,

最后再用role的方式去整合,形成一個(gè)大的復(fù)雜的功能邏輯。

使用Ansiblc實(shí)現(xiàn)自動(dòng)化運(yùn)維的一些技巧

最近一年才有機(jī)會(huì)在生產(chǎn)環(huán)境上使用Ansibleo用的過程中,想把一些小技巧記錄下來,

避免自己忘記。如果能幫助到其他同學(xué)就更好了。如果有同學(xué)指出有更好的方法,就更更好

了。

技巧1:校驗(yàn)?zāi)愕哪0逦募欠裾_

通常我們會(huì)使用tcmplatcmodulc來生成應(yīng)用的配置,比如生成Nginx的配置或者sudocrs

配置。而像sudoers文件內(nèi)的配置錯(cuò)誤可能直接導(dǎo)致無法登錄。所以,我們希望在生成這些

配置文件后能校驗(yàn)一下它的正確性。如果校驗(yàn)失敗,直接停止,不生成該配置文件。

而templatemodule有一個(gè)屬性validate就是為了實(shí)現(xiàn)這一需求的:

-template:

src:"user-sudoers"

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

validate:visudo-cf%s

校驗(yàn)Nginx配置文件的文件:

-namc:Copythcnginxfilc

template:

src:nginx.conf.j2

desl:/etc/nginx/nginx.conf

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

notify:

-restartnginx

校驗(yàn)Prometheus配置文件:

-namc:CopyPromcthcusconfig

template:

src:promelheus.yml.j2

dest:"/etc/pronietheus.yml"

validate:"prorntoolcheckconf^g%s'^

notify:

rcloadpromcthcusconfig

校驗(yàn)Logstash配置文件:

-naine:templateconfigs

template:

src:"logstash-filter.conf

dest:"/opt/iogstash/conf'

validate:Mlogstash-t-f%s"

environment:

JAVA_HOME:""##logstash命令需要JAVA_HOME環(huán)境變量

技巧2:使用host變量解決分布式系統(tǒng)中的id問題

在部署Zookeeper時(shí),,通常會(huì)部署3臺(tái)組成集群,同時(shí)每臺(tái)Zooke叩er都需要在配置一

個(gè)myid的文本文件,而這個(gè)文件中只放id。而id是要求每臺(tái)機(jī)器都是不同的。這時(shí)host

變量派上用場(chǎng)了。定義host變量有兩種方式:

第一種:直接在inventory文件中定義

[zk]

linyi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論