30 分鐘內從開始到入門的 Ansible

Ansible 真的是一個蠻好用的工具,不用預先塞代理程式 (Agentless) 這點真的是蠻容易上手的,這邊分享一下如果你是第一次接觸到 Ansible 的系統工程師,想要使用看看的話,但又不想要學太多相關知識的話,這篇非常適合各位

沒有 Ansible 的時候是怎麼管理伺服器的?

當遇到有一票機器需要同時間要進行操作的時候,以前我用過幾個招數,因為我是 Linux 長期使用者,故以 Linux 上能用為主

  1. 一個一個登入操作: 最早期,最花時間,錯誤率超高
  2. Shell Script + for 迴圈: 要會寫程式,Shell Script 真心不好多人維護
  3. Python: 要會寫程式,只要會寫 Python 的才看得懂我在寫什麼
  4. 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

    1
    brew install ansible
  • Ubuntu Debian

    1
    apt install ansible -y
  • RHEL/CentOS

    1
    yum install -y ansible

使用前準備

  1. 首先要先用 SSH 登入過所有受控機器,讓 host fingerprint 加入到 known_hosts 裡面,不然會噴下面的錯誤,當然最好的建議是走免密碼金鑰的方式 ssh-copy-id,但這邊不提,降低複雜性
  • Error Output
    1
    "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
  1. 準備環境
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 新增資料夾
    mkdir ansible-workspace && cd ansible-workspace

    # 新增受控端資訊
    cat > inventory << EOF
    ceph3-node01.ceph.internal ansible_host=10.0.98.1 ansible_user=root
    ceph3-node02.ceph.internal ansible_host=10.0.98.2 ansible_user=root
    ceph3-node03.ceph.internal ansible_host=10.0.98.3 ansible_user=root
    EOF

任務 0: 了解是否伺服器可以被 Ansible 管理

1
2
# ansible -i <INVENTORY FILE> <所有主機或特定主機> -m ping -k
ansible -i inventory all -m ping -k

一定要是全部都是 SUCCESS,這樣後面的才能指令使用,有任何錯誤的話,一定要先搞好,不然後面也就不用看了

任務 1: 對多個伺服器下相同指令

1
2
3
4
5
# 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: 將一個檔案或資料夾傳送到多個伺服器上

1
2
3
4
5
# 檔案
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 跟我們一起討論

Comments