Ansible 快速入門到放棄 最是人間留不住,朱顏辭鏡花辭樹。 1-Ansible 簡介 Ansible是一個配置管理和配置工具,它使用SSH 連接到伺服器並運行配置好的任務,伺服器上只需要開啟ssh,所有工作都交給client 端的ansible 負責。 當我們有批量部署的需求時,我們可以自己寫 ...
Ansible 快速入門到放棄
最是人間留不住,朱顏辭鏡花辭樹。
1-Ansible 簡介
- Ansible是一個配置管理和配置工具,它使用SSH 連接到伺服器並運行配置好的任務,伺服器上只需要開啟ssh,所有工作都交給client 端的ansible 負責。
- 當我們有批量部署的需求時,我們可以自己寫腳本,但是更推薦使用 Ansible。使用 Ansible 無需編碼只需要配置 yaml 文件,並且 Ansible 已經內置了冪等性、併發度控制等功能,大大減少了批量部署時的工作量。
Ansible 是基於模塊工作的,本身沒有批量部署的能力,真正具有批量部署的是ansible 所運行的模塊,ansible只是提供一種框架。主要包括:
- 連接插件connection plugins:負責和被監控端實現通信;
- host inventory:指定操作的主機,是一個配置文件裡面定義監控的主機;
- 各種模塊核心模塊、command模塊、自定義模塊;
- 藉助於插件完成記錄日誌郵件等功能;
- playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
Ansible 特點,主要有以下幾點:
- 不需要安裝客戶端,通過sshd去通信;
- 安裝簡易,centos上可直接yum安裝;
- 基於模塊工作,模塊可以由任何語言開發;
- 不僅支持命令行使用模塊,也支持編寫yam l 格式的playbook,易於編寫和閱讀。
Ansible 大致原理,主要一下三點:
- hosts 配置文件,作用是告訴 Ansible 你的程式要部署到哪些機器。
- yaml 文件,作用是告訴 Ansible 在目標機器上執行哪些操作。
- Ansible 不需要在目標機器上安裝客戶端,它通過 SSH 把指令和要部署的程式發送到目
2-Ansible 安裝
Ansible 支持集群,資源有限本示例僅在本地虛擬機使用兩台機器進行演示,角色如下。
- 192.168.8.135 角色-服務端
- 192.168.8.136 角色-客戶端
只需要在服務端上安裝ansible,安裝命令如下。
yum list |grep ansible
或
python3 -m pip install --user ansible==2.5.4
查看安裝是否成功
-
ansible --version
使用ssh-keygen 命令在服務端上生成密鑰對。
[tanjintao@localhost ~]$ ssh-keygen -t rsa
建立服務端與客戶端的連接,也就是配置密鑰認證的SSH連接。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [root@localhost ~]# ssh-copy-id root@192.168.8.136 # 拷貝ssh key到客戶端 2 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" 3 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed 4 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys 5 root@192.168.8.136's password: 6 7 Number of key(s) added: 1 8 9 Now try logging into the machine, with: "ssh '[email protected]'" 10 and check to make sure that only the key(s) you wanted were added. 11 12 [root@localhost ~]# ssh root@192.168.8.136 # 測試在服務端上能否通過密鑰登錄客戶端 13 Last login: Tue Feb 21 02:43:53 2023 from 192.168.8.136 14 [root@localhost ~]# logout 15 Connection to 192.168.8.136 closed. 16 [root@localhost ~]#View Code
補充步驟,配置密鑰認證的SSH連接。
編輯服務端上的配置文件,配置遠程主機組。
# serviceA 是集群名稱 [serviceA] # 枚舉 serviceA 集群的 ip 地址,這裡配置了一個客戶端的IP 192.168.8.136
3-Ansible 執行遠程命令1
完成了ssh 密鑰認證以及主機組的配置之後就可以通過ansible 對客戶端遠程執行命令了,但是我這邊還是報錯UNREACHABLE Permission denied,暫時加上如下配置後可以正常執行遠程命令。
-
[root@flask-mysql ansible]# cat /etc/ansible/hosts 192.168.8.136 ansible_ssh_port=22 ansible_ssh_pass=123456 ansible_ssh_user=root
4-Ansible 執行遠程命令2
首先在服務端上創建一個簡單的shell 腳本 tjt.sh 用來測試。
#!/bin/bash echo `date` > /home/tjt/ansible_test.txt
然後把腳本 tjt.sh 分發到遠程機器上,具體路徑是/home/tjt 目錄下。
-
[root@localhost ~]# ansible serviceA -m copy -a "src=/opt/SERVER/pkg/tjt.sh dest=/home/tjt/tjt.sh mode=0755"
最後通過shell 模塊執行遠程機器上的shell 腳本。
-
[root@localhost ~]# ansible serviceA -m shell -a "/home/tjt/tjt.sh"
查看遠程機器上,是否執行了 tjt.sh 腳本,並且生成了/home/tjt/ansible_test.txt文件。
如上,可以看到腳本被正常執行了。
-
5-Ansible 執行 yml 文件
編輯 YAML 文件
- yml 文件是告訴 Ansible 在目標機器上執行哪些操作,Ansible 把這類文件稱為 “playbook”。
- playbook 相當於可以把模塊命令都寫入到配置文件裡面,這樣就可以直接執行配置文件了,類似腳本的意思。
下麵編寫一個為名 tjtAnsibleDemo.yml 的 playbook,這個 playbook 的作用是把 helloWorld.java 文件發送到 serviceA 集群。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # hosts 是要部署服務的集群 2 - hosts: serviceA 3 # remote_user 是以 root 用戶登錄遠程機器 4 remote_user: root 5 # vars 是定義一些變數。這些變數可以在接下來的 tasks 中使用。 6 vars: 7 src: /opt/SERVER/pkg 8 # tasks 是在遠程機器上具體的執行動作。 9 tasks: 10 # name 是該動作的名稱 11 - name: "一個簡單的Absible腳本:把 helloWorld 文件發送到 serviceA 集群" 12 # copy 是要具體執行的動作。copy 是 Ansible 模塊,它的作用是把本地文件上傳到目標機器上去。 13 # {{ src }} 是 Jinja2 模板語法 14 copy: src={{ src }}/helloWorld.java dest=/home/tjt 15 16View Code
執行Ansible 腳本
[root@localhost pkg]# ansible-playbook tjtAnsibleDemo.yml
檢查遠程機器是否成功收到 helloWorld.java 文件。
如上,代表執行成功。
最是人間留不住
朱顏辭鏡花辭樹