iT邦幫忙

2021 iThome 鐵人賽

DAY 22
1

今天來講講 Ansible。記得我在第二天的時候曾經講過,自動化在 SRE 裡面是很重要的一環。讓機械化的重複工作可以被電腦自動化的解決,可以大大地降低人力成本,也避免人為疏失造成的錯誤。

在目前的設計裡面,NOJ 可以連接多個沙盒存在,以提高 judge 的容量。然而目前尚且需要解決的是部署沙盒的問題,目前至少需要下列步驟:

  1. ssh 連上機器
  2. clone 沙盒 repo(如果不存在的話)
  3. 更新 repo
  4. 設定或是更新 token(第一次或是有需要的時候)
  5. 把沙盒跑起來或是重開
  6. 替 NOJ 設定新的沙盒(填 token 跟 URL)

可以看到,上面的步驟還挺麻煩的,另外惱人的一點就是它還沒有被自動化,因為之前需求不高,所以僅是我手動去處理。然而身為懶惰的資工系學生,這種事情真是做個一兩次就受不了了,所以為了後來維護的人著想(如果有的話),應該要讓它變得更簡單才行。

寫 shell script 或許是個做法,可以幫助我們把指令變成檔案,這樣每次要執行特定操作的時候,只要執行對應腳本就好了。不過這樣在某些時候會有些問題,shell script 是指令式 (imperative) 的,也就是說裡面描述的是我們希望執行那些動作,然而這在機器比較多或是比較複雜的環境下,因為我們難以掌握目前的狀態,所以多次執行腳本可能會對系統造成一些危害。

雖然可以盡量將腳本設計成冪等的 (idempotent),讓它就算被多次執行也可以達到一樣的效果,不過因為需要撰寫許多檢查的邏輯,這通常會讓腳本變得比較複雜。因此在這方面,採用宣告式 (declarative) 腳本的 Ansible 等工具便顯得較有優勢,可以方便撰寫容易用於維運的腳本。

另外還有一點比較重要的是模組化,shell script 通常就是由維運工程師等人撰寫需要執行的指令,或許有同一個人寫出來的會有一定程度的重用,但是在不同人之間,就容易產生各式各樣的寫法。然而像是 Ansible 就有提供 Ansible Galaxy 這種 market place,可以讓大家去共享一些模組,因此降低維運的門檻。

因此,這幾天的目標就是讓沙盒可以透過 Ansible 部署。


上一篇
Day 21:GitLab Container Registry
下一篇
Day 23:Ansible 的基本介紹
系列文
這個 site 就是遜啦 - SRE 30 天登大人之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言