Ansible 自動化運維實戰

1、abstract-簡介

1.logo:Ansible 自動化運維實戰
2.介紹:
(1)ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,
實現了批量系統配置、批量程序部署、批量運行命令等功能。
無客戶端。
(2)咱們要學一些Ansible的安裝和一些基本概念,而後咱們會開始研究一些真正有意思的東西 – playbook,配置管理,部署以及語法編排.咱們將會學習如何使用/usr/bin/ansible執行ad-hoc並行命令,咱們還會學習ansible的核心有什麼樣的模塊可供使用.固然之後你也能夠寫你本身的模塊,咱們會在後期講到.
(3)工做原理:Ansible 自動化運維實戰html

2、instal-部署:

1.環境:ansible服務器 10.8.162.86
ansible客戶機:10.8.162.60
2.ansible服務器:域名解析:nginx

vim /etc/hosts
10.8.162.86 ansible
10.8.162.60 host1
Ansible 自動化運維實戰
注:anisble客戶機只需準備好ip 和yum源環境便可web

3.anisble服務器下載ansible及相關擴展包docker

yum install -y epel-relea
注:安裝epel源,若是您在非學校環境,請使用下方阿里YUM
(1):rm -rf /etc/yum.repos.d/*
(2):wgrt -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
(3)wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4.>yum install -y ansible
(1)部署是否完成:
Ansible 自動化運維實戰shell

5.ansible服務器基礎:
(1)定義主機清單:apache

vim /etc/ansible/host
host1
Ansible 自動化運維實戰vim

(2)測試連通性:ansible host1 -m ping 服務器

ansible host1 -m ping 結果失敗了
Ansible 自動化運維實戰
(3)ansible host2 -m ping -u root -k -o 增長用戶名選項 增長用戶名選項
Ansible 自動化運維實戰
(4)去掉(yes/no)的詢問 第一次連通會提示輸入yes,因爲我已經作過好幾回了,因此沒顯示,請見諒!
vim /etc/ssh/ssh_config
StrictHostKeyChecking no
重啓sshd:systemctl restart sshd
Ansible 自動化運維實戰
測試
Ansible 自動化運維實戰
(5)特殊狀況:
Ansible 自動化運維實戰併發

(6)ssh-key(可選)
免密碼ssh-key的方式。
ssh-keygen
ssh-copy-id IP地址 推送公鑰
ansible host1 -m ping -o 簡介輸出,直接能成功app

3、Inventory -主機清單

1.含義:清查;存貨清單;財產目錄;主機清單
2.增長主機組:因爲個人只有一臺客戶機,因此我就只把host1拉一個組 >vim /etc/ansible/hosts

[webserver]
host1
Ansible 自動化運維實戰
輸出這個主機組就能夠了。主機組能夠有多個anisbile客戶機
ansible webserver -m ping -u root -k -o
Ansible 自動化運維實戰

3.增長用戶名,密碼

(1)vim /etc/ansible/hosts
一臺客戶機這樣寫
[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='666666'
Ansible 自動化運維實戰
測試,不須要密碼了
Ansible 自動化運維實戰

(2)假入有四臺客戶機這樣寫:

[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
四臺需密碼一致,用戶一致
Ansible 自動化運維實戰

(3)請思考主機和主機的用戶名密碼不一樣。如何設置?
[webservers]
host1 ansible_ssh_user='root' ansible_ssh_pass='777777'
host[2:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
Ansible 自動化運維實戰

4.增長端口:
(1)請將host1的sshd程序端口修改成2222

vim /etc/ssh/sshd_config
port 222
重啓sshd systemctl restart sshd
Ansible 自動化運維實戰
ansible webservers -m ping -o 失敗,由於默認端口已更改
Ansible 自動化運維實戰
(2)解決辦法 配置文件增長端口:
[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222'
Ansible 自動化運維實戰
測試: 成功
Ansible 自動化運維實戰
請將用戶名密碼和端口回覆原狀

5.組:變量
(1)ansible內部變量能夠幫助咱們簡化主機清單的設置

vim /etc/ansible/hosts 多臺客戶機狀況
[webserver]
host[1:4]
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
Ansible 自動化運維實戰

經常使用變量:Ansible 自動化運維實戰

6.子分組:在把多個組的組名合到一個組裏面,更利於管理,用於本機硬件問題,就不演示了 ,寫下來給大家看看

(1)vim /etc/ansible/hosts
[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
Ansible 自動化運維實戰

自定義主機列表:
(2)>vim hostlist
[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
ansible -i hostlist dockers -m ping -o

7.Ad-Hoc-點對點模式
(1)簡介:臨時的,在ansible中是指須要快速執行的單條命令,而且不須要保存的命令。對於複雜的命令則爲 playbook。
(2)shell模塊:

①:ansible webserver -m shell -a 'hostname' -o //獲取主機名
Ansible 自動化運維實戰
②:ansible webserver -m shell -a 'hostname' -o -f 2 //-f 2 指定線程數
-f FORKS, --forks=FORKS Ansible一次命令執行併發的線程數。NUM被指定爲一個整數,默認是5
specify number of parallel processes to use
(default=5)
③ansible host1 -m shell -a 'yum -y install httpd' -o //給host1部署apache
④ansible host1 -m shell -a 'uptime' -o //查看負載信息

(3)複製模塊 :幫助:ansible-doc copy
①:案列1:ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
//把服務器上的/etc/hosts裏的文件拷貝到webserver組的全部客戶端

客戶端的文件Ansible 自動化運維實戰
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
Ansible 自動化運維實戰
組裏的客戶機收到的文件Ansible 自動化運維實戰
②案例:若是文件有多份,能夠進行備份。
再次修改hosts文件Ansible 自動化運維實戰
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'
Ansible 自動化運維實戰
查看客戶機Ansible 自動化運維實戰
(3)用戶模式:幫助:ansible-doc user
①建立用戶:ansible webserver -m user -a 'name=xiaowang123 state=present'
Ansible 自動化運維實戰
客戶機驗證Ansible 自動化運維實戰
②:修改密碼:生成加密密碼:echo '777777' | openssl passwd -1 -stdin
生成密碼值:$1$ROZP4CHD$xz0E.6.d1H.8EUAag4JXR1
Ansible 自動化運維實戰
修改密碼:ansible webserver -m user -a 'name=xiaowang123 password="$1$ROZP4CHD$xz0E.6.d1H.8EUAag4JXR1"'
Ansible 自動化運維實戰
客戶機驗證:登陸成功
Ansible 自動化運維實戰
③:修改shell
ansible webserver -m user -a 'name=xiaowang123 shell=/sbin/nologin append=yes'
刪除用戶:
ansible webserver -m user -a 'name=xiaowang123 state=absent'
Ansible 自動化運維實戰
客戶機驗證
Ansible 自動化運維實戰

(4)軟件包管理:

①:幫助:ansible-doc yum
②:ansible host1 -m yum -a 'name="*" state=latest' //升級全部包
③:ansible host1 -m yum -a 'name="httpd" state=latest'//安裝apache

(5)服務模塊
①:ansible host1 -m service -a 'name=httpd state=started'//啓動
②:ansible host1 -m service -a 'name=httpd state=started enabled=yes'//開機自啓
③:ansible host1 -m service -a 'name=httpd state=stopped'
//中止
④ansible host1 -m service -a 'name=httpd state=restarted' //重啓
⑤:ansible host1 -m service -a 'name=httpd state=started enabled=no' //開機禁止啓動

(6):文件模塊:
①:幫助:ansible-doc file
②:ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' //建立文件
③:ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory' //建立目錄

(7)收集模塊
①:幫助:ansible-doc file

②:ansible host1 -m setup //查詢全部信息
③:ansible host1 -m setup -a'filter=ansible_all_ipv4_addresses'
Ansible 自動化運維實戰

(8)YAML-YAML Ain’t Markup Language-非標記語言
①:語法:列表:
fruits:

  • Apple
  • Orange
  • Strawberry
  • Mango
    ②:martin:
    name: Martin D'vloper
    job: Developer
    skill: Elite

③:實例:
ansible服務器:
準備共做
ansible all -m yum -a 'name=httpd state=removed' -o //清理環境
Ansible 自動化運維實戰
yum install -y httpd //準備配置文件
mkdir apache
cd apache
cp -rf /etc/httpd/conf/httpd.conf .
grep '^Listen' httpd.conf Listen 8080 修改配置,用做推送
Ansible 自動化運維實戰

編寫劇本
vim apache.yaml

  • hosts: host1
    tasks:
  • name: install apache packages
    yum: name=httpd state=present
  • name: copy apache conf
    copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
  • name: ensure apache is running
    service: name=httpd state=started enabled=yes
    注:裏邊的文件必定要照好,不行能夠複製個人,而後修改裏邊的東西
    Ansible 自動化運維實戰
    ansible-playbook apache.yaml --syntax-check //檢測語法
    ansible-playbook apache.yaml --list-tasks //列出任務
    ansible-playbook apache.yaml --list-tasks //列出主機
    ansible-playbook apache.yaml
    Ansible 自動化運維實戰
    測試:http://10.8.162.62:8080 //http的測試頁面
    Ansible 自動化運維實戰

注:列出客戶機爲什麼起不來的httpd服務
查看端口:是否80端口和別的程序80端口衝突
netstat -tunlp |grep :80 //查看端口 ,若是端口衝突,修改端口
vim /etc/httpd/conf/httpd.conf //修改端口
systemctl start httpd //啓動httpd
systemctl stuts httpd //查看狀態 ,
Ansible 自動化運維實戰

④:handlers:
下載

若是配置文件發生變化 :Listen 8888
[root@xiaoliu apache]# vim httpd.conf
Ansible 自動化運維實戰
ansible-playbook apache.yaml //再次執行,命令成功,但配置未生效,因此要增長處理程序。設置觸發器
Ansible 自動化運維實戰
須要在寫入處理程序;
vim apache.taml
Ansible 自動化運維實戰
若是配置文件再發生變化。 Listen 9080

[root@xiaoliu apache]# vim httpd.conf
Ansible 自動化運維實戰
ansible-playbook apache.yaml :再次執行,配置生效,觸發成功
測試成功:
Ansible 自動化運維實戰

(9):Role-角色扮演 yum -y install tree
①:簡介:roles則是在ansible中,playbooks的目錄組織結構。
將代碼或文件進行模塊化,成爲roles的文件目錄組織結構,
易讀,代碼可重用,層次清晰。
②:目標:經過role遠程部署nginx並配置
③:目錄結構:
④:準備目錄結構

mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
echo 1234 > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
查看: tree roles/
Ansible 自動化運維實戰
⑤:編寫任務 :vim roles/nginx/tasks/main.yaml

  • name: install epel-release packge
    yum: name=epel-release state=latest

  • name: install nginx packge
    yum: name=nginx state=latest

  • name: copy index.html
    copy: src=index.html dest=/usr/share/nginx/html/index.html

  • name: copy nginx.conf template
    template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: restart nginx

  • name: make sure nginx service running
    service: name=nginx state=started enabled=yes
    Ansible 自動化運維實戰
    ⑥:準備配置文件: vim roles/nginx/templates/nginx.conf.j2
    worker_processes {{ ansible_processor_cores }}; //調用內部已知變量
    worker_connections {{ worker_connections }}; //自定義變量
    修改前:Ansible 自動化運維實戰
    修改後:Ansible 自動化運維實戰
    ⑦:編寫變量:vim roles/nginx/vars/main.yaml //worker_connections: 10240
    Ansible 自動化運維實戰
    ⑧:編寫處理程序:vim roles/nginx/handlers/main.yaml
    ’---
    ‘- name: restart nginx
    service: name=nginx state=restarted‘
    Ansible 自動化運維實戰
    ⑨:編寫劇本:vim roles/site.yaml
    • hosts: host4
      roles:
  • nginx
    Ansible 自動化運維實戰
    ⑩:實施:
    cd roles
    ansible-playbook site.yaml --syntax-check //測試
    ansible-playbook site.yaml //實施劇本
    Ansible 自動化運維實戰
    驗證host1Ansible 自動化運維實戰
相關文章
相關標籤/搜索