Ansible的安裝部署很是簡單,其僅依賴於 Python 和 SSH,而系統默認均已安裝。html
Ansible 被 RedHat 紅帽官方收購後,其安裝源被收錄在 epel 中,如已安裝 epel 可直接 yum 安裝。node
經過 pip 和 easy_install 的 Python 第三方包管理器也能夠便捷安裝 Ansible。python
推薦使用yum方式安裝。nginx
[root@localhost]# yum install epel-release -y # 安裝epel源 [root@localhost]# yum install ansible -y # yum安裝ansible便可,很是簡單方便 [root@localhostins]# ansible --version # 驗證安裝是否成功 [root@localhost]# ansible help # help能夠查看ansible的命令參數
[root@localhost]# yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y # 安裝前確保服務器的gcc、glibc開發環境均已安裝 [root@localhost]# yum install python-pip python-devel -y # 安裝 python-pip 及 python-devel 程序包 [root@localhost]# pip install --upgrade pip # 升級本地 pip 至最新版本 [root@localhost]# pip install --upgrade ansible # 安裝ansible
配置文件 | 做用 |
---|---|
/etc/ansible/ansible.cfg | 主配置文件 |
/etc/ansible/hosts | 機器清單,進行分組管理 |
/etc/ansible/roles/ | 存放角色的目錄 |
[root@localhost]# vim /etc/ansible/ansible.cfg # 修改主配置文件
[defaults] #inventory = /etc/ansible/hosts # 默認主機文件 #library = /usr/share/my_modules/ # 庫文件存放目錄 #forks = 5 # 默認開啓的併發數 #remote_user = root # 默認palybooks用戶 #sudo_user = root # 默認sudo用戶 #ask_sudo_pass = True # 是否須要sudo密碼 #ask_pass = True # 是否須要密碼 #remote_port = 22 # 默認遠程主機的端口號 #host_key_checking = False # 是否檢查host_key,推薦關閉 #deprecation_warnings=False # 是否開啓「不建議使用」警告,該類型警告大多屬於版本更新方法過期提醒 #command_warnings=False # 當shell和命令行模塊被默認模塊簡化的時,Ansible 將默認發出警告 #timeout = 10 # 鏈接主機的時間 #log_path=/var/log/ansible.log # 開啓ansible日誌 #private_key_file = /path/to/file(/root/.ssh/id_rsa) # 基於密鑰認證的文件 [privilege_escalation] # 默認以root身份運行ansible become=True become_method=sudo become_user=root become_ask_pass=False
[root@localhost]# vim /etc/ansible/hosts #修改主機清單配置文件(Inventory)
# Ex 1: Ungrouped hosts, specify before any group headers. #未分組的主機清單 ## green.example.com #定義主機爲主機名 ## blue.example.com ## 192.168.100.1 #定義主機爲IP ## 192.168.100.10
## [webservers] #組名爲webservers的主機 ## alpha.example.org #定義主機爲主機名 ## beta.example.org ## 192.168.1.100 #定義主機爲IP ## 192.168.1.110 ## www[001:006].example.com #若主機名有規律,也能夠範圍性的簡寫
## [dbservers] #同上,此組名爲dbserver ## db01.intranet.mydomain.net ## db02.intranet.mydomain.net ## 10.25.1.56 ## 10.25.1.57 ## db-[99:101]-node.example.com
## [all:vars] # 爲全部主機設置變量(可用於首次批量推送密鑰) ## ansible_ssh_user=wushuaishuai # 用戶名 ## ansible_ssh_pass=123456 # 密碼
https://docs.ansible.com ansible官方首頁可針對性看一些模板和實例web
[root@localhost]# vim /etc/ansible/ansible.cfg # 修改主配置文件 host_key_checking = False # 關閉host_key檢查 [root@localhost]# vim /etc/ansible/hosts # 修改主機清單 [test] 10.0.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 10.0.1.8 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 #10.0.1.7 # 主機IP #ansible_ssh_user=root # 主機用戶 #ansible_ssh_pass=123456 # 主機密碼 #ansible_ssh_port=22 # 主機ssh端口
[root@localhost]# ansible test -a "df -h" # 批量查看主機的磁盤分區 10.0.1.8 | SUCCESS | rc=0 >> # test主機組名稱 Filesystem Size Used Avail Use% Mounted on # -a指定模塊參數 /dev/sda2 30G 2.4G 28G 9% / # "df -h" 輸入的命令 devtmpfs 3.9G 0 3.9G 0% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 3.9G 106M 3.8G 3% /run tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 497M 81M 417M 17% /boot /dev/sdb1 40G 49M 38G 1% /mnt/resource tmpfs 797M 0 797M 0% /run/user/0 10.0.1.7 | SUCCESS | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/sda2 30G 3.4G 27G 12% / devtmpfs 3.4G 0 3.4G 0% /dev tmpfs 3.4G 0 3.4G 0% /dev/shm tmpfs 3.4G 330M 3.1G 10% /run tmpfs 3.4G 0 3.4G 0% /sys/fs/cgroup /dev/sda1 497M 81M 417M 17% /boot /dev/sdb1 281G 65M 267G 1% /mnt/resource tmpfs 696M 0 696M 0% /run/user/0
以wushuaishuai sudo至root用戶執行ping存活檢測shell
[root@localhost]# ansible all -m ping -u wushuaishuai -b
以wushuaishuai sudo至junpserver用戶執行ping存活檢測編程
[root@localhost]# ansible all -m ping -u wushuaishuai -b --become-user jumpserver
Playbooks (劇本)與 ad-hoc(臨時任務) 相比,是一種徹底不一樣的運用 ansible 的方式,是很是之強大的.vim
Playbooks:是一種簡單的配置管理系統 ,適合管理配置應用及部署複雜的工做。基於易讀的YAML編程語言。centos
[root@localhost]# vim /etc/ansible/ansible.cfg host_key_checking = False
[root@localhost]# ssh-keygen -t rsa -b 2048 -P '' -f /root/.ssh/id_rsa # root用戶 [root@localhost]# ssh-keygen -t rsa -b 2048 -P '' -f /home/wushuaishuai/.ssh/id_rsa # 也但是其餘用戶
[root@localhost ansible]# vim /etc/ansible/hosts # hosts [web] 192.168.77.129 ansible_ssh_pass=1234567 192.168.77.130 ansible_ssh_pass=123456
[root@localhost]# vim ssh-addkey.yml
# ssh-addkey.yml --- - hosts: all gather_facts: no tasks: - name: install ssh key authorized_key: user=root key="{{ lookup('file', '/home/wushuaishuai/.ssh/id_rsa.pub') }}" state=present
[root@localhost]# ansible-playbook -i hosts ssh-addkey.yml
這樣,管理節點的公鑰就會添加到節點的authorized_keys文件中,再把主機清單裏的ansible_ssh_pass去掉,執行ansible all -m ping 就不須要密碼了。服務器
注意:須要切換到你生成密鑰的用戶下才能免密去執行playbook
[root@localhost]# vim nginx.yml
# nginx.yml --- - hosts: test vars: hello: Ansible tasks: - name: yum repo yum_repository: name: nginx description: nginx repo baseurl: http://nginx.org/packages/centos/7/$basearch/ gpgcheck: no enabled: 1 - name: Install nginx yum: name: nginx state: latest - name: Copy nginx configuration file copy: src: /etc/ansible/ansible-playbook/ansible.conf dest: /etc/nginx/conf.d/site.conf - name: Start nginx service: name: nginx state: started - name: Create wwwroot directory file: dest: /var/www/html state: directory - name: Create test page index.html shell: echo "hello {{hello}}" > /usr/share/nginx/html/index.html
附加:須要建立一個nginx的新配置文件,以下:
[root@localhost]# vim ansible.conf #在當前目錄下建立nginx新配置文件 server { listen 81; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } }
[root@localhost]# vim /etc/ansible/hosts [test] 10.0.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 10.0.1.8 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
[root@localhost ansible-playbook]# ansible-playbook nginx.yml PLAY [test] *************************************************************************************************************************************************** TASK [Gathering Facts] **************************************************************************************************************************************** ok: [10.0.1.8] ok: [10.0.1.7] TASK [yum repo] *********************************************************************************************************************************************** ok: [10.0.1.8] ok: [10.0.1.7] TASK [Install nginx] ****************************************************************************************************************************************** changed: [10.0.1.8] changed: [10.0.1.7] TASK [Copy nginx configuration file] ************************************************************************************************************************** ok: [10.0.1.8] ok: [10.0.1.7] TASK [Start nginx] ******************************************************************************************************************************************** changed: [10.0.1.8] changed: [10.0.1.7] TASK [Create wwwroot directory] ******************************************************************************************************************************* ok: [10.0.1.8] ok: [10.0.1.7] TASK [Create test page index.html] **************************************************************************************************************************** changed: [10.0.1.8] changed: [10.0.1.7] PLAY RECAP **************************************************************************************************************************************************** 10.0.1.7 : ok=7 changed=3 unreachable=0 failed=0 10.0.1.8 : ok=7 changed=3 unreachable=0 failed=0
到agent端查看,nginx安裝完成,訪問nginx ip:81,頁面顯示hello Ansible !!!