[k8s] crictl

crictl์€ k8s์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ์ œ์–ด ๋„๊ตฌ๋‹ค.
์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋” ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ pod์™€ ์ปจํ…Œ์ด๋„ˆ ๋“ฑ์„ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋‹ค.

k8s ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค๋ฉด ์ถ”๊ฐ€ ์„ค์ • ์—†์ด๋„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฒ„์ „๊ณผ ์ƒํƒœ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์€ cri-o๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
์ด์™ธ์—๋Š” docker์™€ containerd๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.


ํ˜„์žฌ ์ƒํƒœ๋‹ค. ๋‹ค ์ค€๋น„์™„๋ฃŒ๋‹ค.




์ด๋ฏธ์ง€

crictl์€ k8s์˜ ์กฐ๊ธˆ ๋” ๋‚ฎ์€ ์ธํ„ฐํŽ˜์ด์Šค์ผ ๋ฟ์ด๋‹ค.
์ฟ ๋ฒ„์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ docker ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๋“ฑ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

sudo crictl pull nginx

์ด๋ ‡๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ 


์ด๋ฏธ์ง€ ๋ชฉ๋ก๋„ ๊ทธ๋ƒฅ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.




Pod

kubectl์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋‹จ์ผ ์„œ๋ฒ„์šฉ pod๋ฅผ ํ•œ๋ฒˆ ๋„์›Œ๋ณด๊ฒ ๋‹ค.

vi single-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: server-name
  labels: 
    app: server-name 
spec:
  containers:
  - name: server-name 
    image: myyrakle/node-server-for-test

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ์ž˜ ๋œฐ ๊ฒƒ์ธ๋ฐ


์ด๊ฒƒ์€ crictl์„ ํ†ตํ•ด์„œ๋„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๋ญ”๊ฐ€๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.

inspectp์— pod id๋ฅผ ๋„ฃ์œผ๋ฉด pod์˜ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ 

์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์ŠคํŠธ์—…์€ ps, ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ์„ธ์ •๋ณด ์กฐํšŒ๋Š” inspect๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฏธ์ง€๋„ ์ข€๋” ์‚ดํŽด๋ณด๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. inspecti๋ฅผ ์“ฐ๋ฉด

์ปค๋งจ๋“œ ํžˆ์Šคํ† ๋ฆฌ ๊ฐ™์€ ๊ฒƒ๋“ค๊นŒ์ง€๋„ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.




crictl๋กœ ์ง์ ‘ pod ๋„์›Œ๋ณด๊ธฐ

k8s์—์„œ pod๋ฅผ ๋„์šธ๋•Œ๋Š” ๋ณดํ†ต ๋‹จ์ผ yaml์„ ๋งŒ๋“ค์–ด์„œ apply๋กœ ๋ƒ…๋‹ค ๋„์›Œ๋ฒ„๋ฆฌ๊ณค ํ•˜๋Š”๋ฐ, ์‚ฌ์‹ค ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ฝค๋‚˜ ๊ท€์ฐฎ์€ ๋™์ž‘์„ ๊ฑฐ์นœ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด ๋Œ€๋žต ์ด๋ ‡๋‹ค.

  1. ๊ฒฉ๋ฆฌ๊ณต๊ฐ„ ๋งˆ๋ จ์„ ์œ„ํ•ด Pod Sandbox๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. Pod์™€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•œ๋‹ค.
  3. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ์ƒ์„ฑ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ๊ตฌ์„ฑ์ด๋‹ค.

vi sandbox.json

{
  "metadata": {
    "name": "nginx-sandbox",
    "namespace": "default",
    "attempt": 1,
    "uid": "hdishd83djaidwnduwk28bcsb"
  },
  "log_directory": "/tmp",
  "linux": {
  }
}

sudo crictl runp sandbox.json

runp ๋ช…๋ น์„ ํ†ตํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๊ฑด ๊ทธ๋ƒฅ ๊ป๋ฐ๊ธฐ์ผ ๋ฟ์ด๋ผ์„œ ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ˜ํ™˜๋˜๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ID๋Š” ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋ณด๊ด€ํ•ด๋‘”๋‹ค.

๊ทธ ๋‹ค์Œ์—๋Š” pod ๊ตฌ์„ฑ์„ ํ•ด์ค€๋‹ค. ์ด ์ž์ฒด๋กœ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€ ์„ค์ • ๊ฐ™์€ ๊ฑด ์—†๋‹ค.

vi pod.json

{
  "metadata": {
    "name": "nginx-pod",
    "namespace": "default",
    "attempt": 1,
    "uid": "aewi4aeThua7ooShohbo1phoj"
  },
  "log_directory": "/tmp",
  "linux": {
  }
}

๊ทธ ๋‹ค์Œ์—๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹ค์งˆ์ ์ธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ •์˜ํ•œ๋‹ค.

vi container.json

{
  "metadata": {
      "name": "nginx-container", 
      "namespace": "default",
      "attempt": 1
  },
  "image":{
      "image": "nginx"
  },
  "command": [
      "top"
  ],
  "log_path":"nginx.log",
  "linux": {
  }
}

๊ทธ๋Ÿผ crictl create ๋ช…๋ น์„ ํ†ตํ•ด pod์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

sudo crictl create ์ƒŒ๋“œ๋ฐ•์ŠคID container.json pod.json

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ID๊ฐ€ ๋ฐ˜ํ™˜๋ ํ…๋ฐ, ์ด ์ƒํƒœ์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ๋™์ž‘๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด crictl start ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

sudo crictl start ์ปจํ…Œ์ด๋„ˆID


์ฐธ์กฐ
https://github.com/containerd/cri/blob/master/docs/crictl.md#run-a-pod-sandbox-using-a-config-file
https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/
https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/