iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
DevOps

為你自己架 Server系列 第 6

D6 Ansible

  • 分享至 

  • xImage
  •  

如同我們在第一天所說的,這三十天的文章理論上會建出一個有多台伺服器的架構。
當許多台伺服器都有相同需求 (例如要加某個使用者) 或是需要相同設定時,Ansible 就非常有用。
Ansible 的執行原理是透過自動 ssh 登入指定的機器,並下指定的指令,所以他可以避免自己要手動登入多台機器下重複指令的這種瑣事,也減少人為的失誤可能性。

安裝

Ansible 是用 Python 寫成的,所以我們可以使用 pip 來安裝。

$ python3 -m pip install --user ansible

範例及說明

以下是一個安裝 vim 和 tmux 的範例:

- name: Task
  hosts: workstations
  tasks:
    - name: Install vim
      become: yes
      apt:
        name: vim
        state: present

    - name: Install tmux
      become: yes
      apt:
        name: tmux
        state: present

這個檔案是一個 YAML 檔,裡面描述了一個 Playbook 的內容,白話來說就是 Ansible 要幫你執行什麼。
他可以隨意命名,這邊我命名為 main.yaml

稍微解釋一下這裡面的東西:

  • 這裡有兩個 task,分別代表 apt install vimapt install tmux,而他們都隸屬於 Task 這個 Play。
  • become=yes 的意思是執行這個 task 的時候要變成 root 的權限,預設的 become 方式是 sudo
    • become 方式可以另外設定,例如 sudo 可能會造成一些問題的時候就可以考慮改成 become_method=su
  • apt 代表了 Ansible 提供的 apt 模組,是 Ansible 幫我們包好的。
    • 裡面的 state: present 代表他會讓指定的套件存在,就是安裝他的意思。

剛剛沒有說明 hosts: workstations,乍看之下可能會覺得這大概就是 DNS 指向的 workstations 這個 domain,但事實上這是自己定義的。
假設我們現在有 work1work2 兩台工作站,那我們就必須在 inventory/hosts.yaml 裡面寫下:

[workstations]
work1
work2

也可以在這邊設定 ssh 需要的參數,例如:

[workstations]
work1 ansible_user=user ansible_ssh_pass=pass
work2 ansible_user=user2 ansible_ssh_pass=pass2

然後在執行 Playbook 的時候,Ansible 就會來這邊查 workstations 代表哪些主機。

執行

我們要指定 Playbook 的檔案及 hosts.yaml 檔案。

$ ansible-playbook -i inventory/hosts.yaml main.yaml --ask-become-pass

如果你要連的機器沒有辦法用 ssh key 直接連線的話,在指令的最後要加上 --ask-pass,這樣他才會問你 ssh 登入的密碼,不然會直接失敗。

最後的 --ask-become-pass 是會先問你 sudo 密碼 (或是 root 密碼,看你的 become_method) 是什麼,然後他到時候會使用這個密碼來做 privilege escalation。
執行之後就可以看到他開始跑,他會先嘗試連上機器,然後執行上述的兩個 task,沒意外的話應該會看到綠色的 ok
最後看到這樣的東西就是成功了。

結語

Ansible 有很多好玩的功能,這邊只是簡單說明一下而已,如果要用到很多不同的機器,用很多 Playbook 的話,也會有更好的架構 (有興趣的話可以查查看 ansible role),但就跟上一篇 docker 一樣,只是稍微提一下,讓大家知道有這種好東西可以幫助自己管理伺服器而已。


上一篇
D5 Docker
下一篇
D7 各種網路工具
系列文
為你自己架 Server8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言