GitLab 升級到 18.3 因為 registry database 而失敗的問題

| | 0 Comments| 09:26|
Categories:

GitLab 本身有提供基本的 Docker Registry 功能,方便使用者存放自己的 Docker image,對於內部的 CI/CD 流程來說,由於採用統一的認證機制,所以相當方便;而 GitLab 在 17.3 的時候也把更方便管理的「container registry metadata database」(之前升級的紀錄)轉換為正是功能,讓使用者不用手動進行資源回收,算是更好用一些。

只是,這項功能就算到現在的 18、在升級的時候好像還是很不穩定?之前在升級次版號的時候,就常常出現需要手動重新進行資料庫升級的操作,算是滿麻煩的。而 Heresy 這邊最近要升級到 18.3.0(官方介紹)、似乎又因為這項功能而導致升級失敗了…

這邊的錯誤訊息是:

Executing command:
/opt/gitlab/embedded/bin/registry database migrate up 
/var/opt/gitlab/registry/config.yml time="2025-XX-XXTXX:XX:XXZ" level=error msg=Connect
database=registry_database duration_ms=3 err="failed to connect to
`user=registry database=registry_database`: /var/opt/gitlab/postgresql/.s.PGSQL.5432
(/var/opt/gitlab/postgresql/): server error:
FATAL: the database system is starting up (SQLSTATE 57P03)"
host=/var/opt/gitlab/postgresql/ port=5432 failed to construct database connection: verification failed: failed to
connect to `user=registry database=registry_database`:
/var/opt/gitlab/postgresql/.s.PGSQL.5432 (/var/opt/gitlab/postgresql/):
server error: FATAL: the database system is starting up (SQLSTATE 57P03) STDERR: ---- End output of "bash" ---- Ran "bash" returned 1

而在官方論壇也有看到類似的報告:《Database error during upgrade from 18.2.4 to 18.3.0》,而在下面有提供對應的原因和解法。

這邊的回答者認為是因為在升級過程中自動產生的「/var/opt/gitlab/postgresql/data/pg_hba.conf」這個檔案的內容有問題造成的;這邊需要把檔案內的

local registry registry md5

修改成

local registry registry trust

才行。而他提出的解法,是另外開一個 session、定時覆蓋這個檔案。


不過這邊後來研究一下,其實 pg_hba.conf 這個設定檔的內容應該也是由 gitlab.rb 產生的,所以實際上,只要修改 gitlab.rb 的設定就可以了。

在之前升級資料庫的時候(紀錄),postgresql['custom_pg_hba_entries'] 的設定值是:

postgresql['custom_pg_hba_entries'] = {
  registry_db: [
    {
      type: 'local',
      database: 'registry_database',
      user: 'registry',
      method: 'md5'
    }
  ]
}

這邊只要把上面 methodmd5 改成 trust,然後再重跑一次升級流程就可以了?


不過後來的狀況也滿怪的,雖然第一次升級後是成功運作的,但是不知道為什麼,把電腦重開、讓 GitLab Docker 重啟後,又會出現錯誤而無法完成啟動…但是相關的設定也都還是維持在 trust 的設定,所以變成不太能確定是哪邊的問題了。

之後做了一些測試是發現:

  • 如果是重啟 Docker 容器就會出現錯誤
    • 例如 docker restart gitlab 就會無法正常開啟
  • 但是如果把容器刪除、重新建立就沒問題。
    • 如果是用 Docker Compose 的話,就是先執行 docker compose down,之後再執行 docker compose up -d,這樣看來可以正確啟動。

另外,如果以官方的《Container registry metadata database》這份文件來看,根據裡面的指令有分成「GitLab 17.5 to 18.2」和「GitLab 18.3 and later」來看,應該是認為 GitLab 在內部的實作有修改了。

18.3 的設定要修改的部分基本上簡單很多、很多設定都可以省略掉;所以理論上,應該是要把之前的設定、改成 18.3 以後的設定會比較好。

目前研究了一下,判斷大概是:

  • 官方的 registry 資料庫名稱、使用者帳號、密碼都是 registry、而由於 Heresy 之前的設定有修改,所以這邊要先改回成預設值。這邊修改的指令要在 GitLab Docker 內執行:

    gitlab-psql -c "ALTER DATABASE registry_database RENAME TO registry"
    gitlab-psql -c "ALTER USER registry WITH PASSWORD 'registry'"

    如果本來就和預設值一樣,就不需要修改。

  • gitlab.rb 的部分,如果全部都使用預設值的話,就只需要:

    registry['database'] = {
       'enabled' => false, }

    本來其他的設定都可以拿掉,像這邊造成問題的 postgresql['custom_pg_hba_entries'] 其實也變成可以完全不需要額外設定的狀況。

  • 如果 registry 的資料室儲存在本機的話,那 registry['storage'] 也不需要修改;如果路徑不是預設值的話,也只需要修改 gitlab_rails['registry_path'] 就好。

Heresy 這樣修改後,基本上是可以正常使用的。

不過,和前面碰到的問題一樣,重新啟動 Docker 的時候,就會出現資料庫存取的錯誤、而無法完成啟動…但是如果把 Docker 容器刪除重新建立、卻又沒有問題?


由於 Heresy 這次更新的比較晚,再加上又在研究問題和解法,結果在這篇寫完的時候,GitLab 也更新到 18.3.1(官方公告)了。

而目前測試,看起來在 18.3.1 也還是有同樣的狀況。也就是說在重開機、或重啟 Docker 的時候,可能還是會沒辦法正確啟動,而是需要把容器刪除重建。

這點現階段 Heresy 還是不知道該怎麼解?可能就看 GitLab 以後的更新會不會修正了。

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *