30 分鐘內從開始到入門的 Ansible
Ansible 真的是一個蠻好用的工具,不用預先塞代理程式 (Agentless) 這點真的是蠻容易上手的,這邊分享一下如果你是第一次接觸到 Ansible 的系統工程師,想要使用看看的話,但又不想要學太多相關知識的話,這篇非常適合各位
{% youtube ysqclCH9Vc0 %}
沒有 Ansible 的時候是怎麼管理伺服器的?
當遇到有一票機器需要同時間要進行操作的時候,以前我用過幾個招數,因為我是 Linux 長期使用者,故以 Linux 上能用為主
- 一個一個登入操作: 最早期,最花時間,錯誤率超高
- 寫
Shell Script
+ for 迴圈: 要會寫程式,Shell Script 真心不好多人維護 - 寫
Python
: 要會寫程式,只要會寫 Python 的才看得懂我在寫什麼 - tmux 搭配
synchronize panes
: 懶得寫程式,直接一個畫面操作全部,但如果遇到機器的參數不一樣就要一個一個操作
題外話,tmux
真的是人人必用的好工具,搭配 mosh
簡直倚天屠龍劍的組合,非常適合裝在堡壘機 (Bastion) 上使用
常見 Linux 日常維運操作
基本上常做的不外乎以下事情:
1. 對多個機器下相同的指令
,包含重開服務 (systemctl restart ooxx)、看檔案 (cat ooxx)、例行更新 (yum update -y)、執行網路指令 (ip route) 等等
2. 將一個檔案
或資料夾
放到多個機器上面
3. 修改檔案內容
這篇會針對 1 和 2 的工作項目進行討論,保證很有用,3 要額外學 Jinja2 那個就算是比較深入的部份了
30 分鐘學習開始
建議要有一台機器當作跳板機,可以是你的 Mac / Linux (很抱歉 Windows 不行),這邊的範例是透過 Ansible 下去管理三台機器
作業系統環境
- Bastion
- Red Hat Enterprise Linux 7.x 10.0.96.9/24
- Ansible 2.x
- 被控端
- ceph3-node01.ceph.internal 10.0.98.1/24
- ceph3-node02.ceph.internal 10.0.98.2/24
- ceph3-node03.ceph.internal 10.0.98.3/24
安裝 Ansible
-
MacOS
-
Ubuntu Debian
-
RHEL/CentOS
使用前準備
-
首先要先用 SSH 登入過所有受控機器,讓 host fingerprint 加入到
known_hosts
裡面,不然會噴下面的錯誤,當然最好的建議是走免密碼金鑰的方式ssh-copy-id
,但這邊不提,降低複雜性 -
Error Output
-
準備環境
任務 0: 了解是否伺服器可以被 Ansible 管理
一定要是全部都是SUCCESS
,這樣後面的才能指令使用,有任何錯誤的話,一定要先搞好,不然後面也就不用看了
任務 1: 對多個伺服器下相同指令
# ansible -i <INVENTORY FILE> <所有主機或特定主機> -m shell -k -a <指令>
ansible -i inventory all -m shell -k -a "timedatectl"
ansible -i inventory all -m shell -k -a "yum update -y"
ansible -i inventory all -m shell -k -a "systemctl status tuned"
ansible -i inventory all -m shell -k -a "cat /etc/os-release | grep PRETTY_NAME"
任務 2: 將一個檔案或資料夾傳送到多個伺服器上
# 檔案
ansible -i inventory all -m copy -k -a "src=/etc/motd dest=/etc/motd"
# 資料夾
ansible -i inventory all -m copy -k -a "src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/"
想要學更多?
恭喜各位 30 分鐘內快速上手使用 Ansible,Ansible 入手門檻真的是非常低,不需要學特別的程式語言就可以直接拿來使用,你看看前面對於多機器的操作有寫到 for 迴圈嗎? 但他的使用不單單是這樣,還可以延伸更多,以下是兩個蠻適合入門的簡報
如果你想要參加相關社群的話,也歡迎加入 Ansible 台灣使用者社群 當中的 Telegram Group 跟我們一起討論