iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0

.container的[Unit]是定義各服務之間的依賴關係,[Service]則是使用systemd.service的標準設定,其中最重要的key是Restart:

  • Restart 重啟策略
    • always:service結束後自動重啟。
    • no:service結束後不重啟。
    • on-failure:service異常結束後才自動重啟,比如exit code為1、收到kill signal
  • RestartSec:service掛掉後等多久自動重啟。用於Restart=always與on-failure。
  • TimeoutStartSec:systemd最多允許service啟動花多久的時間,特別是spring boot容器,初始化的時間算蠻久的,在客戶端的k8s有見識過啟動快十分鐘才完成。超過這時間當然就failure。
  • ExecStartPre / ExecStartPost:啟動前 / 後要執行的script。
  • ExecStopPost:service結束後要執行的script,通常是cleanup任務。
  • Type:service類型,通常不用在.container設定,更根據副檔名不同由podman quadlet決定。
    • notify:.container、.kube
    • forking:.pod
    • oneshot:.network、.volume、.image、.build
  • RemainAfterExit:service type為oneshot才需要,yes表示active,no表示failure,比如a2a-net在STATUS為active(exited)。
  • Environment:在[Container]與[Service]標籤都適用,若是像Spring Boot的application.yaml裡的參數,以及JAVA_OPTS設定記憶體,更適合放在[Container]下。
  • WorkingDirectory:若在[Container]下定義,是指容器裡的工作目錄;若在[Service]下定義,則是Host主機工作目錄。
  • SuccessExitStatus:修改exit code成功結束狀態值,預設值為0,通常exit code=0視為正常結束,其它值為異常結束,可以藉此改變。
  • StartLimitIntervalSec、StartLimitBurst:
    這兩個是[Unit]設定,與Restart相關,舉例如下:
[Unit]
StartLimitIntervalSec=60
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5

60秒內,最多允許5次啟動失敗,超過限制則systemd則停止重啟並報錯:Start request repeated too quickly


上一篇
.container的Unit標籤
系列文
Podman Quadlet-容器服務化(在單體系統到微服務之間)15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言