ansible自動化運維安裝部署實踐-部署、搭建、模塊、playbook

運維⾃動化平臺介紹 
運維⾃動化平臺是由管理機器和業務機器組成的。
管理機器:任務定製及發佈;
業務機器:接收任務並執⾏任務。
運維⾃動化平臺的優勢:
1、⼀次性任務定製:任務⼀次性發布給所有機器 
2、節省任務執⾏時間:任務主機併發完成任務,節省部署時間 
3、錯誤率低:避免重複,保證⼀次任務定製準確即可

1、ansible特性

1. no agents:不需要在被管控主機上安裝任何客戶端; 
2. no server:⽆服務器端,使⽤時直接運⾏命令即可; 
3. modules in any languages:基於模塊⼯作,可使⽤任意語⾔開發模塊; 
4. yaml,not code:使⽤yaml語⾔定製劇本playbook; 
5. ssh by default:基於SSH⼯作

2、準備工作

#實驗機器
192.168.192.128  managn01
192.168.192.129  node01
192.168.192.130  node02
192.168.192.131  node03
hostnamectl set-hostname node01-永久修改主機名(vm直接拷貝虛擬機情況)
#提前確認
關閉selinux、firewalld、ntp/chronyc同步、yum update、靜態IP、主機名解析/etc/hosts
#ssh免密登陸
管理機將自己生成的公鑰傳給被管理機器,然後私鑰匹配公鑰連接
[root@manage01 ~]# ssh-keygen #創建密鑰
[root@manage01 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected] #將公鑰傳給所有被管理機
[root@manage01 ~]# for i in 129 130 131 #免密登陸證書驗證
> do
> ssh [email protected].$i hostname
> done
node01
node02
node03 
#⼩竅⻔(批量免密設置) 
免交互創建公私鑰 
[root@manage01 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ""   
-f 指定私鑰存放路徑 -N ""  新密碼設置問空 -P ""  ⽼密碼是什麼
如何可以⾮交互式傳公鑰呢 
[root@manage01 ~]# yum -y install sshpass 
[root@manage01 ~]# sshpass -p123456 ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub [email protected] 
StrictHostKeyChecking   嚴厲的主機監測=no  就不會問你yes|no了 sshpass ⾮交互式傳密碼

3、ansible部署

#yum安裝
[root@manage01 ~]# yum -y install ansible 
[root@manage01 ~]# ansible --version
#源碼安裝(推薦)
[root@manage01 ~]# wget https://releases.ansible.com/ansible/ansible2.9.0rc3.tar.gz
[root@manage01 ~]# cd /opt/ansible
#確認有沒有python和pip環境
[root@manage01 ansible]# yum -y install epel-release
[root@manage01 ansible]# yum install python-pip
[root@manage01 ansible]# pip install --upgrade pip
#因ansible爲python開發,使用pip進行環境包和軟件包安裝
[root@manage01 ansible]# pip2 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
[root@manage01 ansible]# pip2 install --user ansible -i https://pypi.tuna.tsinghua.edu.cn/simple/
#爲了日後方便
[root@manage01 ~]# ln -s /opt/ansible/bin/* /usr/bin/ 
[root@manage01 ~]# mkdir /etc/ansible
[root@manage01 ~]# cp /opt/ansible/examples/ansible.cfg /etc/ansible/
#配置主機列表並測試
[root@manage01 ansible]# cp examples/hosts /etc/ansible/ #拷貝主機列表文件供ansible讀取
[root@manage01 ansible]# cat  /etc/ansible/hosts #配置被管理機主機列表
[group1] 
192.168.192.[129:131]
[root@manage01 ansible]# ./bin/ansible -m ping group1 #測試
 192.168.192.130 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"


4、ansible常用模塊


ansible是基於模塊⼯作的,本身沒有批量部署的能⼒。真正具有批量部署的是ansible所運⾏的模塊,
雖然日常推薦使用playbook劇本,基本模塊還是需要了解的。
模塊用法:
ansible 機器 -m 模塊名稱 -a '模塊參數'
基本格式爲: ansible 操作的機器名或組名 -m 模塊名 -a "參數1=值1 參數2=值2

#file模塊-創建、刪除、權限、軟鏈接
[root@manage01 ~]# ansible -m file group1 -a "path=/tmp/tyschool state=touch"
[root@manage01 ~]# ansible -m file 192.168.192.129 -a "path=/tmp/tyschool state=absent"
[root@manage01 ~]# ansible -m file 192.168.192.129 -a "path=/tmp/tyschool owner=sko group=nobody mode=0600"
[root@manage01 ~]# ansible -m file 192.168.192.129 -a "src=/tmp/tyschool path=/tmp/tyschool_com state=link"
#copy模塊-拷貝並校驗完整性、
[root@manage01 ~]# sha1sum readme
f8182e9ccdbe6efd13eb36a056a7db203fe66e40 readme
[root@manage01 ~]# ansible -m copy group1 -a "src=/root/readme dest=/opt
checksum=f8182e9ccdbe6efd13eb36a056a7db203fe66e40 owner=sko group=sko mode=0400"
*/etc/yum.repos.d後⾯不帶/符號,則表示把/etc/yum.repos.d整個⽬錄拷⻉到/tmp/⽬錄下
[root@manage01 ~]# ansible group1 -m copy -a 'src=/etc/yum.repos.d dest=/tmp/'
*/etc/yum.repos.d/後⾯帶/符號,則表示把/etc/yum.repos.d/⽬錄⾥的所有⽂件拷⻉到/tmp/⽬錄下 
[root@manage01 ~]# ansible group1 -m copy -a 'src=/etc/yum.repos.d/ dest=/tmp/'
#cron模塊-創建定時執行任務、刪除任務
[root@manage01 ~]# ansible -m cron group1 -a 'name="cron test" user=root job="echo haha > /tmp/test" minute=23 hour=12
[root@manage01 ~]# ansible -m cron group1 -a 'name="cron test" state=absent'
#yum_repository模塊-配置yum源
[root@manage01 ~]# ansible -m yum_repository group1 -a "name=dvd description=BaseOS baseurl=file:///mnt/BaseOS gpgcheck=0 enabled=yes"
#yum模塊-yum裝包、卸載
[root@manage01 ~]# ansible -m yum group1 -a "name=vsftpd"
[root@manage01 ~]# ansible -m yum 192.168.192.129 -a "state=absent name=vsftpd"
#service模塊-啓動服務、停止
[root@manage01 ~]# ansible -m service 192.168.192.129 -a "name=vsftpd state=started enabled=on"
[root@manage01 ~]# ansible -m service 192.168.192.129 -a "name=vsftpd state=stopped enabled=false"
#shell模塊-執行命令行,不能用於vim等交互式命令
[root@manage01 ~]# ansible -m shell 192.168.192.129 -a "ls /root"


5、playbook劇本


playbook(劇本): 是ansible⽤於配置,部署,和管理被控節點的劇本。
參考:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
使⽤的格式爲yaml格式(saltstack,elk,docker等也都會⽤到yaml格式)
YAML格式規則
⽂件的第⼀⾏以 "---"開始,表明YMAL⽂件的開始.
以#號開頭爲註釋
列表中的所有成員都開始於相同的縮進級別, 並且使⽤⼀個 "- " 作爲開頭(⼀個橫槓和⼀個空格)
⼀個字典是由⼀個簡單的 鍵: 值 的形式組成(這個冒號後⾯必須是⼀個空格)
注意: 寫這種⽂件不要使⽤tab鍵,都使⽤空格
參考: https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html#yaml-syntax
#YAML格式規則
⽂件的第⼀⾏以 "---"開始,表明YMAL⽂件的開始.
以#號開頭爲註釋
列表中的所有成員都開始於相同的縮進級別, 並且使⽤⼀個 "- " 作爲開頭(⼀個橫槓和⼀個空格)
⼀個字典是由⼀個簡單的 鍵: 值 的形式組成(這個冒號後⾯必須是⼀個空格)
注意: 寫這種⽂件不要使⽤tab鍵,都使⽤空格

[root@manage01 ~]# mkdir -p /opt/ansible/playboot/web
[root@manage01 web]# cat  apache_init.yaml   
#apache安裝及業務初始化
---
- hosts: 192.168.192.129
  remote_user: root
  tasks:
  - name: create user
    user: user=haha state=present
  - name: install httpd server
    yum: name={{item}} state=latest
    with_items:
      - httpd
      - httpd-devel
  - name: start httpd server
    service: name=httpd state=started enabled=yes
  - name: copy new httpd.conf to /etc/httpd/conf
    copy: src=/opt/ansible/playbook/web/httpdnew.conf dest=/etc/httpd/conf
    notify:
    - restart httpd service
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted

 FAQ:
#警告

 [DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple
 items and specifying `name: "{{item}}"`, please use `name: ['httpd', 'httpd-devel']` and remove the loop. This feature will be removed in 
version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
#解決
[root@manage01 web]# cat  /etc/ansible/ansible.cfg | grep False
deprecation_warnings=False


6、roles(⻆⾊): 

playbook+roles自動化部署lamp環境見下章節。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章