Liveness Probes

liveness probes

Container က အဆငá€ēပá€ŧေစá€Ŋá€Ŧ running ဖá€ŧစá€ēနေလá€Ŧး၊ (alive) ဖá€ŧစá€ēနေလá€Ŧး၊ ဆိုတá€Ŧကို á€žá€­á€›á€žá€­á€–á€­á€¯á€ˇáŠ action á€šá€°á€–á€­á€¯á€ˇáŠ liveness probes ကို á€Ąá€žá€¯á€ļးပá€ŧုနိုငá€ēပá€Ģတယá€ē။ á€Ąá€˛á€œá€­á€¯ စစá€ēá€†á€ąá€¸á€”á€­á€¯á€„á€ēá€–á€­á€¯á€ˇ liveness probe ကို container တစá€ēခုခá€ģငá€ēးစီ အတá€Ŋကá€ē pod definition မှá€Ŧ ထည့á€ēပá€ŧီး configure ပá€ŧုလုပá€ēရပá€Ģတယá€ē။ configure ပá€ŧုလုပá€ēပá€ŧီး pod တညá€ēဆေá€Ŧကá€ēပá€ŧီးတဲ့အခá€Ģ kubelet က configure ပá€ŧုလုပá€ēá€á€˛á€ˇá€•á€¯á€ļစá€ļ အပေá€Ģá€ēမူတညá€ēပá€ŧီးတေá€Ŧ့ liveness probe ကို အခá€ģိနá€ēမှနá€ēá€•á€­á€¯á€ˇá€•á€Ģတယá€ē။ liveness probe က Give up မလုပá€ēခငá€ē အခá€ģိနá€ēထိ Probe ဘယá€ēနှစá€ēကá€ŧိမá€ē fail၊ fail ပá€ŧသနá€Ŧ မရှိပေမဲ့ liveness probe က give up လုပá€ēတဲ့ အခá€ģိနá€ēမှá€Ŧတေá€Ŧ့ container ကို restart ခá€ģပá€Ģတယá€ē။ အဲ့တေá€Ŧ့ liveness probe give up မလုပá€ēခငá€ēမှá€Ŧ probe success ဖá€ŧစá€ēမှသá€Ŧ pass ဖá€ŧစá€ēမှá€Ŧပá€Ģ။ liveness probe ကို method သုá€ļးမá€ģိုးဖá€ŧင့á€ē check နိုငá€ēတယá€ē။ ဒá€Ģတá€Ŋေကတေá€Ŧ့ -

  • An HTTP GET probe - HTTP probe က container ရဲ့ IP၊ Port နဲ့ Path ကို Get Request á€•á€ąá€¸á€•á€­á€¯á€ˇá€•á€ŧီးတေá€Ŧ့ application မှ ပá€ŧနá€ēလá€Ŧတဲ့ HTTP response code 2xx နဲ့ 3xx ကလá€Ŋဲပá€ŧီး အခá€ŧá€Ŧးသေá€Ŧ error code မá€ģá€Ŧး ဒá€Ģမှ မဟုတá€ē လုá€ļး၀ response မပá€ŧနá€ēတဲ့အခá€Ģ probe fail တယá€ēá€œá€­á€¯á€ˇ ယူဆပá€Ģတယá€ē။

  • A TCP Socket probe - TCP probe ကတေá€Ŧ့ container ကို TCP connection နဲ့ သတá€ēမှတá€ēထá€Ŧးတဲ့ Port ကို ကá€ŧိုးစá€Ŧးပá€ŧီး connect လုပá€ēပá€Ģတယá€ē။ အဲ့အခá€ģိနá€ēမှá€Ŧ connection က established ဖá€ŧစá€ēသá€Ŋá€Ŧးရငá€ē probe success ဖá€ŧစá€ēပá€ŧီး á€Ąá€˛á€œá€­á€¯á€™á€ž မဟုတá€ēရငá€ēတေá€Ŧ့ fail တယá€ēá€œá€­á€¯á€ˇ ယူဆပá€Ģတယá€ē။

  • An Exec probe - ဒီ probe ကတေá€Ŧ့ container အထဲမှá€Ŧ command ကို executes လုပá€ēပá€ŧီးတေá€Ŧ့ á€Ąá€žá€¯á€ļးပá€ŧုပá€Ģတယá€ē။ တကယá€ēá€œá€­á€¯á€ˇ command ရဲ့ exit status code က 0 မဟုတá€ēá€á€˛á€ˇá€˜á€°á€¸á€†á€­á€¯á€›á€„á€ē fail ဖá€ŧစá€ēတယá€ēá€œá€­á€¯á€ˇ ယူဆပá€Ģတယá€ē။

hola-liveness-probe.yaml
apiVersion: v1
kind: Pod
metadata:
  name: hola-liveness
spec:
  containers:
  - image: quay.io/dther/hola:unhealthy
    name: hola
    livenessProbe:
      httpGet:
        path: /
        port: 8080

ဒá€Ģကတေá€Ŧ့ liveness probe ကို HTTP GET နညá€ēးလမá€ēးဖá€ŧင့á€ē စမá€ēး run ကá€ŧည့á€ēနိုငá€ēမဲ့ manifest ပá€Ģ။ ဒီ pod ကို create လုပá€ēလိုကá€ēပá€ŧီးတေá€Ŧ့ kubectl get pod -w(watch) ဒီ command ကို run လိုကá€ēလá€ģှငá€ē အေá€Ŧကá€ēကပုá€ļá€Ąá€á€­á€¯á€„á€ēး အခá€ģိနá€ēနဲ့ á€Ąá€œá€­á€¯á€€á€ē pod ရဲ့ အခá€ŧေအနေနဲ့ restart count တá€Ŋá€ąá€€á€­á€¯ တá€Ŋေ့ရမှá€Ŧပá€Ģ။

restart ကá€ģရတဲ့ အကá€ŧေá€Ŧငá€ēးအရငá€ēးမှá€Ŧ statuscode: 500 နဲ့ liveness probe ရဲ့ HTTP probe failed သá€Ŋá€Ŧá€¸á€œá€­á€¯á€ˇ ဖá€ŧစá€ēပá€Ģတယá€ē။ အေá€Ŧကá€ēကပုá€ļက Event ကို ကá€ŧည့á€ēပá€ŧီး သိနိုငá€ēပá€Ģတယá€ē။ ဒá€Ģပေမဲ့ HTTP status code 500 ကá€ŧေá€Ŧင့á€ē container က အမှနá€ēတကယá€ē restart ကá€ģသá€Ŋá€Ŧးတá€Ŧ မဟုတá€ēပá€Ģဘူး။

ပထမ အကá€ŧိမá€ē restart ကá€ģတဲ့ အခá€ģိနá€ēမှá€Ŧ kubectl command ဖá€ŧင့á€ē describe လုပá€ēကá€ŧည့á€ēမယá€ēဆိုရငá€ē အေá€Ŧကá€ēက ပုá€ļကို မá€ŧငá€ēရမှá€Ŧပá€Ģ။ Liveness: á€†á€­á€¯á€á€˛á€ˇ အကá€ŧေá€Ŧငá€ēးမှá€Ŧ Liveness probe ကို ဘယá€ēလို configure ခá€ģထá€Ŧá€¸á€œá€˛á€†á€­á€¯á€á€Ŧနှင့á€ē တခá€ŧá€Ŧး properties ကို ဖေá€Ŧá€ēပá€ŧထá€Ŧးပá€Ģတယá€ē။ အဲဒီမှá€Ŧ delay=0s ဆိုတá€Ŧကတေá€Ŧ့ container စပီး start ဖá€ŧစá€ēတá€Ŧနှငá€ē့ ခá€ģကá€ēခá€ģငá€ēး probe ကို စပá€ŧီး á€•á€­á€¯á€ˇá€œá€Ŋှတá€ēတá€Ŧဖá€ŧစá€ēပá€Ģတယá€ē၊ timeout=1s ဆိုတá€Ŧကတေá€Ŧ့ probe လုပá€ēတဲ့ ကá€ŧá€Ŧခá€ģိနá€ēပá€Ģ (á€Ĩပမá€Ŧ - probe ကို ၁ စက္ကန့á€ē အတá€Ŋငá€ēး response မပá€ŧနá€ēနိုငá€ēရငá€ē probe fail တယá€ēá€œá€­á€¯á€ˇ သတá€ēမှတá€ēတá€Ŧပá€Ģ)၊ period=10s ကတေá€Ŧ့ ၁၀ စက္ကန့á€ē တိုငá€ēးမှá€Ŧ probe ကို kubelet á€€á€”á€ąá€•á€­á€¯á€ˇá€•á€ŧီး စစá€ēပá€Ģတယá€ē။ #failure=3 ကတေá€Ŧ့ ခုနက period ၃ခá€Ģ (၁၀ x ၃ = ၃၀ စက္ကန့á€ē) ပá€ŧည့á€ēတဲ့အခá€Ģမှá€Ŧ give up ဖá€ŧစá€ēပá€ŧီး container ကို restart ခá€ģသá€Ŋá€Ŧးတá€Ŧပá€Ģ (#success=1 ကတေá€Ŧ့ ဒá€Ģရဲ့ ဆန့á€ēကá€ģင့á€ēဘကá€ēပá€Ģ)။ အဲ့တေá€Ŧ့ အခá€ģိနá€ēတစá€ēခု ရေá€Ŧကá€ēတဲ့အခá€Ģမှá€Ŧ ပထမဆုá€ļးအကá€ŧိမá€ē probe က HTTP status 500 response ကို ရရှိတဲ့အခá€Ģမှá€Ŧ တစá€ēခá€Ģ စပá€ŧီးတေá€Ŧ့ probe fail ပá€Ģတယá€ē။ နေá€Ŧကá€ē ၁၀ စက္ကန့á€ē ကá€ŧá€Ŧတဲ့ အခá€ģိနá€ēမှá€Ŧ 500 response ကိုထပá€ēပá€ŧီး လကá€ēခá€ļရရှိတဲ့အခá€Ģမှá€Ŧ probe fail တá€Ŧ ၂ ကá€ŧိမá€ē ဖá€ŧစá€ēသá€Ŋá€Ŧးပá€Ģပá€ŧီ၊ နေá€Ŧကá€ē ၁၀ စက္ကန့á€ēမှá€Ŧ ထပá€ē fail ရငá€ē ၃ ကá€ŧိမá€ē ပá€ŧည့á€ēá€œá€­á€¯á€ˇ probe က action ယူပá€ŧီး container ကို restart ခá€ģမှá€Ŧ ဖá€ŧစá€ēပá€Ģတယá€ē။

နေá€Ŧကá€ēတခုထပá€ēပá€ŧေá€Ŧခá€ģငá€ēတá€Ŧကတေá€Ŧ့ describe result မှá€Ŧ Exit Code: 137 ပá€Ģ၊ ဒá€Ģကတေá€Ŧ့ external signal á€•á€­á€¯á€ˇá€œá€Ŋှတá€ēပá€ŧီးတေá€Ŧ့ process ကို terminated ပá€ŧုလုပá€ēခဲ့တယá€ē၊ kill ခဲ့တယá€ē á€†á€­á€¯á€á€˛á€ˇ အဓိပ္ပá€Ģယá€ēမá€ģိုးပá€Ģ၊ 137 သညá€ē 128 + n ဖá€ŧစá€ēပá€Ģတယá€ē။ ဒီနေရá€Ŧမှá€Ŧ n တနá€ēá€–á€­á€¯á€¸á€€á€á€ąá€Ŧ့ 9 ဖá€ŧစá€ēပá€Ģတယá€ē။ 9 သညá€ē ကá€ģá€Ŋနá€ēတေá€Ŧá€ēá€á€­á€¯á€ˇ process တá€Ŋá€ąá€€á€­á€¯ Kill တဲ့ အခá€Ģ á€Ąá€žá€¯á€ļးပá€ŧá€¯á€á€˛á€ˇ SIGKILL signal number ဖá€ŧစá€ēပá€Ģတယá€ē။ ဒá€Ģကá€ŧေá€Ŧင့á€ēá€™á€­á€¯á€ˇá€œá€­á€¯á€ˇ process က force လုပá€ēပá€ŧီးတေá€Ŧ့ kill ခá€ļရတá€Ŧဖá€ŧစá€ēပá€Ģတယá€ē။ ဒá€Ģသညá€ē probe က ၃ ကá€ŧိမá€ē fail á€œá€­á€¯á€ˇ give up လုပá€ēသá€Ŋá€Ŧးတဲ့အခá€Ģမှá€Ŧ container ကို kill လိုကá€ēတá€Ŧ ဖá€ŧစá€ēပá€Ģတယá€ē။ Container ကို kill လိုကá€ēတယá€ēဆိုတá€Ŧက လုá€ļး၀အသစá€ēတစá€ēခု ပá€ŧနá€ēတညá€ēဆေá€Ŧကá€ēလိုကá€ēခá€ŧငá€ēးဖá€ŧစá€ēပá€Ģတယá€ē။ ဒá€Ģဟá€Ŧ ကá€ģá€Ŋနá€ēတေá€Ŧá€ēá€á€­á€¯á€ˇ အလá€Ŋယá€ēပá€ŧေá€Ŧပá€ŧေá€Ŧနေတဲ့ probe fail တဲ့ အခá€Ģမှá€Ŧ container restart ခá€ģသá€Ŋá€Ŧးခá€ŧငá€ēးဖá€ŧစá€ēပá€Ģတယá€ē။

Exit Code Number

Meaning

Example

Comments

128

Invalid argument to exit

exit 3.14159

exit takes only integer args in the range 0 - 255 (see first footnote)

128+n

Fatal error signal "n"

kill -9 $PPID of script

$? returns 137 (128 + 9)

တစá€ēခá€ģá€­á€¯á€ˇ application အမá€ģá€­á€¯á€¸á€Ąá€…á€Ŧးတá€Ŋေက application startup time ကá€ŧá€Ŧကá€ŧပá€Ģတယá€ē။ မá€ģá€Ŧးသေá€Ŧအá€Ŧးဖá€ŧင့á€ē java application တá€Ŋေမှá€Ŧ တá€Ŋေ့ရတတá€ēပá€Ģတယá€ē။ ဒဎလို အခá€ŧေအနေမá€ģိုးမသá€Ŧ container create လုပá€ēလုပá€ēခá€ŧငá€ēး (delay=0s) probe ကို စလုပá€ēတá€Ŧ အဆငá€ēမပá€ŧá€ąá€”á€­á€¯á€„á€ēပá€Ģဘူး၊ á€’á€Žá€œá€­á€¯á€Ąá€á€ŧေနေမá€ģá€­á€¯á€¸á€Ąá€á€Ŋကá€ē application startup time ကို စေá€Ŧင့á€ēá€–á€­á€¯á€ˇ probe ရဲ့ properties တစá€ēခုဖá€ŧစá€ēတဲ့ initialDelaySeconds: 30s ဖá€ŧင့á€ē probe စလုပá€ēမဲ့ အခá€ŧá€ąá€”á€ąá€€á€­á€¯ ထိနá€ēးထá€Ŧးနိုငá€ēပá€Ģတယá€ē။ ဒီ properties သá€Ŧ pod manifest ထဲ ထည့á€ēပá€ŧီး pod ကို create လုပá€ēခဲ့မယá€ēဆိုရငá€ē kubelet က container တညá€ēဆေá€Ŧကá€ēပá€ŧီး ၃၀ စက္ကန့á€ēကá€ŧá€Ŧမှ ပထမဆုá€ļး probe ကို စတငá€ēá€•á€­á€¯á€ˇá€œá€Ŋှတá€ēမှá€Ŧ ဖá€ŧစá€ēပá€Ģတယá€ē။ ဒá€Ģကတေá€Ŧ့ kubernetes ကနေ kubelet မှတဆင့á€ē container တစá€ēခု ကေá€Ŧငá€ēးမá€Ŋနá€ēစá€Ŋá€Ŧ အသကá€ēရှိမရှိ၊ health check နိုငá€ēတဲ့ liveness probe ရဲ့ အကá€ŧမá€ēးဖá€ģငá€ēး ဖá€ŧစá€ēပá€Ģတယá€ē။

Last updated

Was this helpful?