Skip to main content

一次奇怪的 Ente Photo 自架 BUG

· 4 min read

Ente Photo 已經成為我的主力相簿軟體兩個月了,用起來比什麼 Immich 或是 PhotoPrism 什麼的都要好,但就在昨天的時候因為我在優化我寫的 deployment 檔,順便把一些 pod 轉成 deployment,結果轉完之後我就發現到為什麼 Ente 開不起來了?

我的 pod 一直卡在 ContainerCreating,通常第一個想到的就是用 kubectl describe pod 這條指令來看一下,結果我看到就是一切正常,成功的把 image 給 pull 下來,而且也沒有寫什麼問題。

到這了這裡我就去問了一下 Google 大神和 GenAI,兩邊給我的答案都差不多,像是什麼 PVC 掛載失敗、網路無法連接等等,但老實說這些我一看到就直接跳過了,因為我知道不可能是這些。我之前也有發生過這種錯誤,通常在第一步的時候用指令一看就會很明顯的看到了。

最後我想到的一個方法就是我把 deployment 裡面的 containers 一個一個拿掉,看看到底是哪裡卡住,這個方法也確實生效了。最後我發現到 minio 壞掉,好消息是發現了什麼壞掉,壞消息是我不知道怎麼處理。我進一步研究,發現是 minio 的 lifecycle 有問題。

lifecycle:
postStart:
exec:
command:
- sh
- -c
- |
#!/bin/sh
while ! mc config host add h0 http://localhost:3200 $(MINIO_ROOT_USER) $(MINIO_ROOT_PASSWORD) 2>/dev/null
do
echo "Waiting for minio..."
sleep 0.5
done
cd /data
mc mb -p b2-eu-cen

但到了這裡還不夠,我再次使用相同的方法,就是一點一點的刪,看哪裡可行就知道哪裡有問題,最後找到這段:

while ! mc config host add h0 http://localhost:3200 $(MINIO_ROOT_USER) $(MINIO_ROOT_PASSWORD) 2>/dev/null

等等,為什麼一個迴圈會突然壞掉?這個問題讓我想了很久,因為 Ente 也用了兩個月了,而且更氣人的是我發現到只要使用 systemctl restart k3s.service 把 k3s 整個重啟,一切就像什麼事都沒發生一樣,所有的 log 一切都正常。

接下來我就仔細的想了一下,我想到會不會是 minio 有更新?因為我在一次又一次的檢查我的 deployment.yml 檔的時候,我發現到我的 minio 沒有固定版本。如果有固定版本會像下面這樣:

有固定版本的 minio 範例

可以發現到有一段 RELEASE...30Z,那個就是固定版本,而之前是沒有的,因此我就去 docker hub 看看,果然是昨天有新的版本。

新版本的 docker hub image

因為預設 k8s 會自動發現有沒有新版的,如果有就把目前的版本更新上去,結果一更就壞掉了。

因為此我就把版本換回到一個月前的,之後就好了。

舊版本的 docker hub image

這樣的問題我居然卡了快十個小時,沒想到原因這麼簡單,算是學到了一課。