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

老油條IT記發表於2020-09-23

 

 

 #基本概述

ansible是一款開源自動化工具,基於python paramiko模組開發,分散式,無需客戶端
官網網址:https://www.ansible.com
官方文件:https://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  root@192.168.186.142
​
#使用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" root@192.168.228.$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

 

相關文章