在前一篇 ACR 的文章中提到了 Manifest 與 Tag 兩者間的關係,並簡單提到了一個 acr purge 指令來清除沒有 Tag 的 Image。而這篇就來詳細看一下 acr purge 指令的用法,並且紀錄兩組我自己常用的 acr purge 指令,最後再透過 az acr task 建立能定時清理的 Image 的排程。
這篇不會再重複建立 ACR 的過程和說明 Manifest 與 Tag 的關係,所以如果還沒看過前篇文章的朋友,建議可以先由以下連結進入觀看喔!
系列文章
acr purge
acr purge 是我們主要用來清理 Image 指令,以下直接看一個常見的範例:
參數說明:
- --filter:必要參數,Image 與其 Tag 的名稱正則表達式,例如使用 --filter 'hello-world:.*' 可以塞選出名為 hello-world 的所有 Image。
- --ago:必要參數,超過這個時間的 Image 都會被刪除,例如使用 --ago 1d2h3m 可以刪除存在超過 1 天 2 小時又 3 分的 Image。
- --untagged:刪除所有沒有 Tag 的 Image ,需要注意的是這個參數不受 --ago 影響。
- --dry-run:代表僅列出會被刪除的 Image,但不會實際執行刪除動作,是在測試時非常好用的參數。
而 acr purge 實際使用時會搭配 az acr run 指令來運行,所以一般都會使用以下這種寫法:
使用情境
因為多數遇到的使用方式都是多個專案共用一個 ACR,所以以下紀錄兩個我常用的參數組合,都是由管理者的角度,對所有 Image 有一致的刪除規則。
移除所有建立超過 7 天的 Image 並保留最新一個版本
算是一個最基本的情境,移除建立過久的 Image 外,考量到有像 AKS 這種服務,可能會有容器重啟的問題,因此不論時間長短都保留下最新版本的 Image 供使用。
立即移除所有未上 Tag 的 Image
主要就是使用 --untagged 來找到未上 Tag 的 Image,但如果直接使用 --filter '.*:.*' 與 --ago 0d 就會移除所有在 ACR 內的 Image,是一個非常可怕的組合 😖
所以這邊比較有技巧的地方就是指定一個假的 Tag 名稱,讓 --filter 永遠找不到任何符合的 Image,不過這時 --untagged 參數依舊可以正常運行。
使用 az acr task 建立排程
以上我們已經了解如何使用 acr purge 來移除 Image,再來我們一定會希望是固定時間的排程執行,一樣直接看範例
主要就是將 az acr run 更換為 az acr task create,並且使用 --schedule 參數來指定排程時間。
建立好後 Portal 上的「服務」→「工作」也可以看到排程,但目前 UI 就這樣了,看不到更進一步的資訊。
總結
在有前一篇 Manifest 與 Tag 的觀念後,再加上使用 acr purge 與 az acr task 的自動化工具,幾乎讓 ACR 的管理工作量降到最低,真是後悔沒有早點開始研究這塊 😌
留言
張貼留言