您好,登錄后才能下訂單哦!
Ansible其實(shí)一個(gè)it運(yùn)維自動(dòng)化工具,主要是完成it基礎(chǔ)設(shè)施的配置應(yīng)用的部署,可以對(duì)百十臺(tái)的主機(jī),上千臺(tái)的主機(jī)進(jìn)行管理,它一直強(qiáng)調(diào)的是:
簡(jiǎn)單易用,所以我們就能很快的上手它,所以不需要好的基礎(chǔ)能力
簡(jiǎn)單-----減少學(xué)習(xí)的成本:它使用易讀的描述語(yǔ)言部署的文件。
無(wú)需特殊編碼技能:也就是它不需求你會(huì)開(kāi)發(fā),你就能很快的上手使用。
任務(wù)按順序執(zhí)行:ansible執(zhí)行就是按你的任務(wù)從上到下依次去執(zhí)行,所以很好去理解,很好的去寫(xiě)這個(gè)配置文件。
強(qiáng)大-----協(xié)調(diào)應(yīng)用程序生命周期,因?yàn)橐粋€(gè)應(yīng)用程序的生命周期分為多個(gè)階段,例如從代碼的拉取到構(gòu)建,然后再到部署,然后再到測(cè)試,一個(gè)應(yīng)用的周期大概是這樣的,ansible可以在這個(gè)應(yīng)用周期中完成一系列任務(wù)
應(yīng)用部署
配置管理
工作流程編排
我們可以通過(guò)剛才的那幾個(gè)階段去寫(xiě)配置文件,這樣就能很清晰的看出這個(gè)應(yīng)用程序到底要做哪些事,根據(jù)我們做那些事,我們?cè)僦鹨坏娜シ纸?br/>這也就是ansible的主要的功能
無(wú)代理----可預(yù)測(cè),可靠和安全
無(wú)代理架構(gòu),也就是在一臺(tái)服務(wù)器上安裝ansible就可以了,而不需要在客戶端再安裝一個(gè)agent,
使用openssh通信,確保了安全性,
沒(méi)有代理維護(hù)成本
Ansible相對(duì)比同類(lèi)的saltstack他們都是使用python去編寫(xiě)的,在早些年saltstack市場(chǎng)占有率是遠(yuǎn)超ansible,而近幾年市場(chǎng)占有率是遠(yuǎn)超saltstack的,其實(shí)主要的原因呢,就是跟它這個(gè)設(shè)計(jì)模式有關(guān)系,因?yàn)閍nsible最初呢講究的就是無(wú)代理架構(gòu),而saltstack要在被管理端,要裝一個(gè)agent,裝一個(gè)很簡(jiǎn)單,要考慮后期的維護(hù),所以根據(jù)現(xiàn)在的市場(chǎng)需求,很多情況下,在某些機(jī)器上安裝一些復(fù)雜的agent和其他的一些工具,對(duì)于現(xiàn)在的企業(yè)it環(huán)境中,每個(gè)服務(wù)器上面都安裝了很多的agent,有可能自己研發(fā)了被監(jiān)控端的agent,日志的agent,回頭再安裝一些其他的agent,要初始化要舒適化四五個(gè)agent,久而久之就會(huì)增加很多額外的負(fù)載,而且不易于我們后期對(duì)服務(wù)器的管理,所以根據(jù)這個(gè)現(xiàn)狀呢,ansible就用的it企業(yè)很多,而且ansible在它本身的這個(gè)配置下就是這么設(shè)計(jì)的,而且根據(jù)這種形態(tài)去擴(kuò)展更多模塊和功能,而saltstack,雖然已經(jīng)支持了這種無(wú)代理架構(gòu),但是它是后來(lái)支持的,有很多功能的還是難于ansible去使用的。
Ansible的架構(gòu)
![]
Users就是我們這個(gè)管理員用戶,也就是我們,我們?nèi)ヅ抗芾碇鳈C(jī),有兩種方式,一個(gè)是執(zhí)行命令,例如查看磁盤(pán)空間
第二種方式呢,就是playbook去管理比較復(fù)雜的任務(wù),例如一個(gè)應(yīng)用的部署
這個(gè)ansible引擎有4部分,第一個(gè)就是inventory,這個(gè)就是管理我們主機(jī)的一個(gè)清單,你去管理誰(shuí),就是在這體現(xiàn)的,包括主機(jī)的ip地址,端口,賬戶密碼都是在這個(gè)inventory去輸寫(xiě)的
第二個(gè)就是ansible的Api,它有api來(lái)供我們?nèi)フ{(diào)用,當(dāng)我們?nèi)ラ_(kāi)發(fā)運(yùn)維自動(dòng)化平臺(tái)的時(shí)候,不用去造輪子,就可以直接使用ansible的api去使用來(lái)完成你的批量管理。
第三個(gè)就是模塊modules,ansible是一個(gè)自動(dòng)化引擎,它很多的功能呢都是通過(guò)模塊去實(shí)現(xiàn)的,例如去創(chuàng)建一個(gè)用戶,那么它就有這個(gè)user這個(gè)賬戶,那么去管理一個(gè)服務(wù),去啟動(dòng)一個(gè)服務(wù)那么久有這個(gè)service,強(qiáng)調(diào)之初呢就是它有非常多的模塊。
第四個(gè)就是plugins,這個(gè)就是插件,這個(gè)相當(dāng)于ansible來(lái)完成內(nèi)部的一些操作,例如ansible怎么去管理這些主機(jī),那么它就有這個(gè)contation的一個(gè)插件,通過(guò)這個(gè)插件呢去連接你這個(gè)主機(jī),所以這個(gè)plugins是ansible的核心功能,而模塊是ansible核心之外的擴(kuò)展功能。
而ploybook可以通過(guò)這些模塊去編寫(xiě)應(yīng)用的生命周期,它就相當(dāng)于一個(gè)文本,我們要在里面輸寫(xiě)我們要做哪些事
如果要實(shí)現(xiàn)一個(gè)CMDB的一個(gè)功能,配置中心管理數(shù)據(jù)庫(kù),這個(gè)功能呢就記錄了你的it基礎(chǔ)設(shè)施中,一些主機(jī)的一些信息,通過(guò)這些信息呢,以供其他人去使用,供其他的項(xiàng)目去調(diào)用,有了ansible的話就能很快去獲取這些信息,因?yàn)閍nsible可以在你的目標(biāo)主機(jī)上去獲取當(dāng)前主機(jī)所有的一些硬件資源了,一些配置,各個(gè)信息都會(huì)幫你收集,只需要將你的數(shù)據(jù)收集到你的CMDB當(dāng)中就可以了
而且ansible也有很多的模塊和插件來(lái)對(duì)接這個(gè)云平臺(tái),不管是私有云還是公有云都會(huì)幫我們?nèi)プ鲆恍┦拢?,這個(gè)就是一個(gè)ansible的一個(gè)架構(gòu)
管理員通過(guò)操作ansible,ansible去調(diào)用一些模塊和插件來(lái)讀取,inventory的配置主機(jī)清單,去操作你操作的主機(jī)組。
Ansible的安裝
我們可以直接通過(guò)yum去安裝
[root@ansible ~]# yum -y install ansible
安裝之后就是配置ansible,這里就是配置ansible的主機(jī)清單,這里可以使用把密碼寫(xiě)上去,也可以提前做好免交互登錄,就直接寫(xiě)ip也可以
[root@ansible ~]# vim /etc/ansible/hosts
[webservers]
10.4.7.12 ansible_ssh_user=root ansible_ssh_pass=666666
10.4.7.21 ansible_ssh_user=root ansible_ssh_pass=666666
對(duì)我們執(zhí)行的命令添加不需要指紋的交互
[root@ansible ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False
查看我們多主機(jī)節(jié)點(diǎn)的磁盤(pán)狀態(tài)
[root@ansible ~]# ansible webservers -a "df -h"
10.4.7.12 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 1.4G 49G 3% /
devtmpfs 858M 0 858M 0% /dev
tmpfs 870M 0 870M 0% /dev/shm
tmpfs 870M 8.4M 861M 1% /run
tmpfs 870M 0 870M 0% /sys/fs/cgroup
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 73G 33M 72G 1% /data
tmpfs 174M 0 174M 0% /run/user/0
10.4.7.21 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 1.4G 49G 3% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.4M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 73G 33M 72G 1% /data
tmpfs 779M 0 779M 0% /run/user/0
Ansible的使用要求
服務(wù)端的要求
Python2.6/2.7/3.x
Redhat,Debian,centos,os x等,不支持windows
因?yàn)閍nsible是python寫(xiě)的所以要有python的環(huán)境,ansible是在15年的10月份被redhat收購(gòu)的,默認(rèn)centos已經(jīng)將python安裝了
被管理端要求
Openssh,linux發(fā)行版一般也使用openssh,也需要python,會(huì)使用python的腳本,執(zhí)行我們使用的模塊,最終封裝我們使用的腳本,在被管理端執(zhí)行,結(jié)果返回給ansible
Python2.6/2.7/3.x
安裝ansible的方式支持yum,也是推薦的方式,像redhat核debian都支持他們本身的軟件包去安裝ansible
也可以通過(guò)pip去安裝,其實(shí)ansible也是python的一個(gè)模塊
也可以通過(guò)源碼包去安裝
? https://releases.ansible.com/ansible or https://github.com/ansible/ansible.git
ansible的配置文件
[root@ansible ~]# vim /etc/ansible/ansible.cfg
some basic default values...
#inventory = /etc/ansible/hosts
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
有這幾個(gè)重要的簡(jiǎn)單說(shuō)一下,inventory -/etc/ansible/hosts
這是被管理端的主機(jī)清單
Fork是ansible工作進(jìn)程的并發(fā)數(shù),它默認(rèn)是5個(gè),可以根據(jù)自己管理主機(jī)的數(shù)量調(diào)整這個(gè),同時(shí)提高這個(gè)并發(fā)數(shù)也會(huì)對(duì)你的服務(wù)器的負(fù)載增加消耗
Sudo_user:就是提權(quán),在linux下如果你是普通用戶,如果想root方式去執(zhí)行操作時(shí),那你是不是需要sudo,或者su -切到root用戶操作,那這就稱(chēng)為提權(quán)。
Remote_port=22,操作目標(biāo)主機(jī)的端口,ssh 默認(rèn)22,這里也默認(rèn)22
Host_key_checking=false 這個(gè)開(kāi)啟的話就會(huì)實(shí)現(xiàn)我們第一次登錄一個(gè)主機(jī)時(shí),可以免去敲yes/no,但是開(kāi)啟這個(gè)也有不好的,就是當(dāng)我們的服務(wù)端重裝系統(tǒng)了,那么這個(gè)地方就會(huì)失效報(bào)錯(cuò),當(dāng)然也可以解決,把know_hosts下的歷史登錄記錄清除就可以,不過(guò)這個(gè)也不影響使用。
Log_path=/var/log/ansible.log 就是記錄日志的,記錄一些基本操作,可以開(kāi)啟一下
Private_key_file=/root/.ssh/id_rsa,這是指定密鑰認(rèn)證的私鑰,連接linux的認(rèn)證方式就是基于密碼的認(rèn)證,一個(gè)是基于密鑰對(duì)的認(rèn)證,基于密鑰對(duì)的認(rèn)證是相對(duì)于比較安全的,進(jìn)行數(shù)字證書(shū)的效驗(yàn),基于ssh的容易被破解,但是滿足密碼的復(fù)雜性也很難破解。
inventory主機(jī)清單
[root@ansible ~]# vim /etc/ansible/hosts
像ansible在操作我們基礎(chǔ)設(shè)施主機(jī)的時(shí)候,都是通過(guò)這個(gè)/etc/ansible/hosts去操作的
這個(gè)配置中有屬于這種未分組的組,它會(huì)分配到auto的組中,也就是默認(rèn)組,我們可以根據(jù)IP,或者主機(jī)名進(jìn)行配置,
Ex 1: Ungrouped hosts, specify before any group headers.
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
Ansible的執(zhí)行命令的使用方法
[root@ansible ~]# ansible --help
Usage: ansible <host-pattern> [options]
主機(jī)的模式->選項(xiàng),就是在你的主機(jī)清單中匹配
這個(gè)all就是匹配你所有的主機(jī)組,不加主機(jī)組也會(huì)匹配上
-m command可以省略,這是默認(rèn)的
[root@ansible ~]# ansible all -a "free -m"
10.4.7.12 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 1738 121 1475 8 141 1456
Swap: 3839 0 3839
10.4.7.21 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 7785 162 7479 8 143 7403
Swap: 3839 0 3839
10.4.7.22 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 7785 159 7482 8 144 7406
Swap: 0 0 0
也可以使用直接輸入ip同樣也可以查看到
[root@ansible ~]# ansible 10.4.7.12 -a "df -h"
10.4.7.12 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 1.4G 49G 3% /
devtmpfs 858M 0 858M 0% /dev
tmpfs 870M 0 870M 0% /dev/shm
tmpfs 870M 8.4M 861M 1% /run
tmpfs 870M 0 870M 0% /sys/fs/cgroup
/dev/sda2 1014M 179M 836M 18% /boot
/dev/sda1 200M 12M 189M 6% /boot/efi
/dev/mapper/centos-home 73G 33M 72G 1% /data
tmpfs 174M 0 174M 0% /run/user/0
然后就是變量,能與用戶動(dòng)態(tài)的交互,傳參,來(lái)讓ansible來(lái)做指定的事情,這樣就能更靈活一些。
Ansible的官方文檔是docs.ansible.com
一般經(jīng)常用的ansible和ploybook,doc
其他的模塊也很多,暫時(shí)也用不上
比如變量的使用
[webservers]
10.4.7.21 ansible_ssh_user=root ansible_ssh_pass=666666 http_port=80
10.4.7.22 ansible_ssh_user=root ansible_ssh_pass=666666 http_port=80
[root@ansible ~]# ansible webservers -a "echo {{http_port}}"
10.4.7.22 | SUCCESS | rc=0 >>
80
10.4.7.21 | SUCCESS | rc=0 >>
80
組變量的使用,定義這個(gè)vars,使用的時(shí)候就會(huì)調(diào)用這個(gè)變量
[webservers:vars]
http_port=8080
server_name=www.devops.com
[root@ansible ~]# ansible webservers -a "echo {{http_port}}"
10.4.7.21 | SUCCESS | rc=0 >>
8080
10.4.7.22 | SUCCESS | rc=0 >>
8080
[root@ansible ~]# ansible webservers -a "echo {{server_name}}"
10.4.7.22 | SUCCESS | rc=0 >>
www.devops.com
10.4.7.21 | SUCCESS | rc=0 >>
www.devops.com
也可以單獨(dú)寫(xiě)到/etc/ansible/group_vars/webservers.yml下,它默認(rèn)會(huì)讀取你哪個(gè)組里面的變量,以yml的模式更方便
http_port: 8090
server_name: xiabanle
[root@ansible group_vars]# ansible webservers -a "echo {{http_port}}"
10.4.7.22 | SUCCESS | rc=0 >>
8090
10.4.7.21 | SUCCESS | rc=0 >>
8090
[root@ansible group_vars]# ansible webservers -a "echo {{server_name}}"
10.4.7.22 | SUCCESS | rc=0 >>
xiabanle
10.4.7.21 | SUCCESS | rc=0 >>
xiabanle
ad-hoc命令
使用shell模塊在主機(jī)組批量創(chuàng)建文件
[root@ansible ~]# ansible webservers -m shell -a "mkdir /opt/devops"
[WARNING]: Consider using file module with state=directory rather than running mkdir
10.4.7.21 | SUCCESS | rc=0 >>
10.4.7.22 | SUCCESS | rc=0 >>
[root@ansible ~]# ansible webservers -m shell -a "ls /opt/"
10.4.7.22 | SUCCESS | rc=0 >>
devops
test
10.4.7.21 | SUCCESS | rc=0 >>
devops
test
查看本次的操作設(shè)計(jì)到了哪些主機(jī)
[root@ansible ~]# ansible webservers --list-hosts
hosts (2):
10.4.7.21
10.4.7.22
查看輸出的命令遇到的詳細(xì)信息
[root@ansible ~]# ansible webservers -vvv -a "ls /opt/devops"
Ssh密鑰對(duì)的認(rèn)證
先創(chuàng)建一對(duì)密鑰對(duì)
[root@ansible ~]# ssh-keygen
這個(gè)rsa.pub是公鑰,這個(gè)放在目標(biāo)主機(jī)上,這個(gè)id_rsa是使用這個(gè)私鑰進(jìn)行登錄認(rèn)證的
[root@ansible .ssh]# ls
id_rsa id_rsa.pub known_hosts
怎么放過(guò)去,有兩種方式,第一種查看公鑰的內(nèi)容,將它復(fù)制到目標(biāo)主機(jī)認(rèn)證key中
還有一種方式就是通過(guò)ssh-copy-id,這樣的話,就能直接傳到目標(biāo)主機(jī)的authorized_keys中[root@ansible .ssh]# ssh-copy-id root@10.4.7.21
這個(gè)就是保存你ansible主機(jī)上的公鑰
[root@aaa ~]# cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRgvupMdkSCz2tP1WOig7h736iqHdFMWVdMoYnmgpe8EUp/Xmuwf66dVv/RrDvs6jyPtlnlQtBVtEYJCwsuumgLXcSp+XwyICLe5cetYGYRa3ByhIiJPxrfkLCnLGHAHKl0dBnxN2286Rsg1D1NgRLFGVS+MF1Hj6CPgHhLc+eTusDv4tZXCFGdJoyT99jJCAwpc1N/pbJhoS/t4g+fxZ7nCrRkLS49i8Mo7KuLjtfwlB4yDbh2bzdG60rzF71k8asJlBj3GcSmtEhqmw7xyv2qcqCq/CvpscUhJ4ZIrz4xs6Jq2IKBhgQiptCnDis15b6Cj6R3mY3XLf4sruX/hyh root@ansible
這樣就能實(shí)現(xiàn)免交互登錄了
這樣的話,hosts文件只需要將IP或者域名寫(xiě)上就可以了
Ansible的常用模塊
執(zhí)行shell命令(command和shell)
文件傳輸(copy和file)可以對(duì)文件拷貝和創(chuàng)建目錄
管理軟件包(yum)
用戶和組(user)
從源代碼管理系統(tǒng)部署(git)從git倉(cāng)庫(kù)拉取源代碼
管理服務(wù)(service)
收集目標(biāo)主機(jī)信息(setup)
Copy模塊將文件拷貝過(guò)去
[root@ansible ~]# ansible webservers -m copy -a "src=/root/Dockerfile dest=/tmp"
查看目標(biāo)已有
[root@ansible ~]# ansible webservers -a "ls /tmp"
File模塊在管理端去創(chuàng)建文件
創(chuàng)建目錄state=directory
創(chuàng)建文件state=touch
刪除目錄/文件state=absent[root@ansible ~]# ansible webservers -m file -a "dest=/tmp/xiaoming state=file"
Yum模塊在被管理端安裝yum的包
Yum命令state=present
卸載命令 State=absent[root@ansible ~]# ansible webservers -m yum -a "name=vim state=present"
User模塊,創(chuàng)建用戶
[root@ansible ~]# ansible webservers -m user -a "name=foo password=66666"
刪除用戶 :state=absent
Service模塊我們啟動(dòng)一個(gè)服務(wù)停止一個(gè)服務(wù),
測(cè)試一個(gè)memcache來(lái)測(cè)試服務(wù)的啟動(dòng)和停止
啟動(dòng)state=started
停止state=stopped
開(kāi)機(jī)啟動(dòng)enabled=true
重啟state=restarted
啟動(dòng)
[root@ansible ~]# ansible webservers -m yum -a "name=memcached state=present"
[root@ansible ~]# ansible webservers -m service -a "name=memcached "
[root@ansible ~]# ansible webservers -m shell -a "ps -ef |grep memcached"
停止[root@ansible ~]# ansible webservers -m service -a "name=memcached state=stopped"
給memcached加入開(kāi)機(jī)啟動(dòng)[root@ansible ~]# ansible webservers -m service -a "name=memcached enabled=true"
重啟就是restarted
Set up模塊是收集系統(tǒng)信息的
這個(gè)也會(huì)寫(xiě)一些變量,當(dāng)我們使用ploybook時(shí)當(dāng)前的主機(jī)變量[root@ansible ~]# ansible webservers -m setup
可以過(guò)濾其中的一些信息來(lái)過(guò)濾一些我們想要的系統(tǒng)信息,比如獲得主機(jī)名
[root@ansible ~]# ansible webservers -m setup -a "filter=ansible_hostname"
10.4.7.21 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "k8s-node1"
},
"changed": false
}
10.4.7.12 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "k8s-master"
},
"changed": false
}
10.4.7.22 | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "k8s-node2"
},
"changed": false
}
查看內(nèi)存使用情況[root@ansible ~]# ansible webservers -m setup -a "filter=ansible_*_mb"
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。