一篇帶你快速入門ansible和使用

 

 

 #基本概述

ansible是一款開源自動化工具,基於python paramiko模塊開發,分佈式,無需客戶端
官網網址://www.ansible.com
官方文檔://docs.ansible.com/ansible/latest/user_guide/become.html

 

#應用場景

批量執行和分發任務
#如:同時在1000台服務器上安裝apache服務,並在安裝後啟動服務
#如:將某一個文件一次性拷貝到1000台服務器上

 

#特點

部署簡單,只需要在ansible控制端部署
默認使用SSH協議進行管理
主從集中化管理
配置簡單,擴展性強
支持API及自定義模塊,可通過python擴展
通過playbooks劇本來定製強大的配置

 

#架構圖

 #安裝

#1.設置epel倉庫(ansible倉庫默認不在yum倉庫中,所以要啟用epel倉庫)
yum install epel-release -y

#2.使用yum進行安裝
yum install ansible -y

#3.查看版本
Ansible --version

 

#ansible命令參數

ansible - Define and run a single task 'playbook' against a set of hosts 
#針對一組主機定義並運行單個任務「劇本」
ansible命令語法:ansible [-i:主機文件] [-f:批次] [組名] [-m 模塊名稱] [-a:模塊參數]

 

#ansible常用參數

 -v,–verbose               #  詳細模式,如果命令執行成功,輸出詳細的結果 (-vv –vvv -vvvv)
 -i PATH, -inventory=PATH  #  指定 host 文件的路徑,默認是在 /etc/ansible/hosts 
inventory  [ˈɪnvəntri]  庫存
 -f NUM,-forks=NUM       # NUM 是指定一個整數,默認是 5 ,指定 fork 開啟同步進程的個數。
 -m NAME,-module-name=NAM    #   指定使用的 module 名稱,默認使用 command模塊
 -a,MODULE_ARGS              #指定 module 模塊的參數
 -k,-ask-pass                #提示輸入 ssh 的密碼,而不是使用基於 ssh 的密鑰認證
 -sudo                       # 指定使用 sudo 獲得 root 權限
 -K,-ask-sudo-pass           #提示輸入 sudo 密碼,與 -sudo 一起使用
 -u USERNAME,-user=USERNAME  # 指定移動端的執行用戶
 -C,–check                   #測試此命令執行會改變什麼內容,不會真正的去執行

 

#ansible查看幫助

ansible-doc -l           #列出所有的模塊列表
ansible-doc -s 模塊名    #查看指定模塊的參數
ansible-doc 模塊名 #查看指定模塊的詳細參數
#示例:ansible-doc yum | ansible-dco firewalld

 

#基本使用

#實驗拓撲圖

 一:定義主機清單(有兩種方式:一種基於端口,用戶名密碼,一種基於SSH密鑰)

1、基於端口、用戶名、密碼定義清單

格式:ansible_ssh_port:指定ssh端口  ansible_ssh_user:指定用戶  ansible_ssh_pass:指定密碼 ssh_sudo_pass:指明sudo時候的密碼

 

2、基於SSH密鑰來訪問定義清單

在ansible服務端生成秘鑰,並且複製公鑰到節點中
#ssh-keygen  一直回車
#一鍵生成
  ssh-keygen -f ~/.ssh/id_rsa -P '' -q
​
使用ssh-copy-id命令複製ansible公鑰到節點
  ssh-copy-id  [email protected]
​
#使用sshpass批量分發密鑰到服務器
[root@game scripts]# cat scp_isa.sh 
#!/bin/bash
ip=(130 131 132 133)
for i in ${ip[@]}
do
    sshpass -p"Skills39" ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" [email protected].$i 
done
​
#服務端查看效果
[root@game ~]# cat /root/.ssh/known_hosts 
192.168.228.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhL.....AuHi+n9iVPC0Of9D/MKK8lWuGHg=
192.168.228.131 ecdsa-sha2-nistp256 AAAAE2VjZHNh...d8FX4mqoYCp43E2knM9t8YAZGg/k08=
192.168.228.132 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....y6U2tCs+SU/Sg+rGR8E76lqC316Q=
192.168.228.133 ecdsa-sha2-nistp256 AAAAE2....iTuiJ+0VNOYrhh2gqW36XJVlW1+p6pj2dbo=
​
#服務端測試面密鑰登錄
ssh 192.168.228.130
​
#配置清單
#/etc/ansible/hosts
  [db-server]
  192.168.186.142
  192.168.186.135
#網段範圍寫法
  [all]
  192.168.228.[130:133]
    
#如果寫主機名,需要在/etc/hosts裏面寫
  [a]
  k8s-master
#/etc/hosts
[root@game ~]# cat /etc/hosts
192.168.228.130 k8s-master

 

二:在ansible服務端運行命令
#提示:
#首次運行如果不進行什麼修改的話會提出警告,可以按照將deprecation改為False
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, 
this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
#[root@k8s-master ~]# vim /etc/ansible/ansible.cfg
deprecation_warnings=False

1、使用ping檢查k8s-node節點機器的連通性
[root@k8s-master ~]# ansible k8s-node -m ping
#提示:也可以指定hosts文件,但是默認就是讀取那個文件,所以不指定也是可以的# ansible -i /etc/ansible/hosts k8s-node -m ping
192.168.86.133 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.86.132 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
 

2、檢查ansible節點的運行時間

[root@k8s-master ~]# ansible k8s-node -m command -a 'uptime'
192.168.86.133 | CHANGED | rc=0 >>
 23:16:34 up 5 min,  2 users,  load average: 0.00, 0.03, 0.03
192.168.86.132 | CHANGED | rc=0 >>
 23:16:34 up 31 min,  2 users,  load average: 0.00, 0.01, 0.04

 

3、檢查節點的內核版本

[root@k8s-master ~]# ansible k8s-node -a 'uname -r'
192.168.86.132 | CHANGED | rc=0 >>
3.10.0-1062.el7.x86_64
192.168.86.133 | CHANGED | rc=0 >>
3.10.0-1062.el7.x86_64

 

Tags: