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

提交評論