Skip to content

Instantly share code, notes, and snippets.

@mtilson
Created March 26, 2024 14:12
Show Gist options
  • Save mtilson/9664835d451084b65dd62dfd744a2679 to your computer and use it in GitHub Desktop.
Save mtilson/9664835d451084b65dd62dfd744a2679 to your computer and use it in GitHub Desktop.
How different yaml constructions for k8s pod's 'command' and 'args' influence container 'cmdline'

Option 1 - WORKING

deploy.yaml content

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tpd
  template:
    metadata:
      labels:
        app: tpd
    spec:
      containers:
      - name: tpd
        image: nginx
        command:
        - sh
        - -c
        args:
        - |
          sleep 130
          echo start
          sleep 130
          echo proceed
          sleep 130
          echo done

Resultant container command line

root@tpd-6f946c5fd4-l9gn5:/# ps auxfwwww
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          10  0.0  0.0   4188  3444 pts/0    Ss   13:25   0:00 bash
root         199  0.0  0.0   8100  4068 pts/0    R+   13:26   0:00  \_ ps auxfwwww
root           1  0.0  0.0   2576   904 ?        Ss   13:25   0:00 sh -c sleep 130 echo start sleep 130 echo proceed sleep 130 echo done
root           9  0.0  0.0   2484   880 ?        S    13:25   0:00 sleep 130

root@tpd-6f946c5fd4-l9gn5:/# cat /proc/1/cmdline
sh-csleep 130
echo start
sleep 130
echo proceed
sleep 130
echo done

root@tpd-6f946c5fd4-l9gn5:/# cat /proc/1/cmdline  | sed -ne 'l'
sh\000-c\000sleep 130$
echo start$
sleep 130$
echo proceed$
sleep 130$
echo done$
\000$

Option 2 - WORKING

deploy.yaml content

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tpd
  template:
    metadata:
      labels:
        app: tpd
    spec:
      containers:
      - name: tpd
        image: nginx
        command:
        - sh
        - -c
        args:
        - |
          sleep 130;
          echo start;
          sleep 130;
          echo proceed;
          sleep 130;
          echo done;

Resultant container command line

root@tpd-5469644dd4-6chsc:/# ps auxfwwww
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           8  0.0  0.0   4188  3388 pts/0    Ss   13:17   0:00 bash
root         198  0.0  0.0   8100  3968 pts/0    R+   13:17   0:00  \_ ps auxfwwww
root           1  0.0  0.0   2576   904 ?        Ss   13:16   0:00 sh -c sleep 130; echo start; sleep 130; echo proceed; sleep 130; echo done;
root           7  0.0  0.0   2484   880 ?        S    13:16   0:00 sleep 130

root@tpd-5469644dd4-6chsc:/# cat /proc/1/cmdline
sh-csleep 130;
echo start;
sleep 130;
echo proceed;
sleep 130;
echo done;

root@tpd-5469644dd4-6chsc:/# cat /proc/1/cmdline | sed -ne 'l'
sh\000-c\000sleep 130;$
echo start;$
sleep 130;$
echo proceed;$
sleep 130;$
echo done;$
\000$

Option 3 - NOT working

deploy.yaml content

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tpd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tpd
  template:
    metadata:
      labels:
        app: tpd
    spec:
      containers:
      - name: tpd
        image: nginx
        command:
        - sh
        - -c
        args:
        - sleep 130;
        - echo start;
        - sleep 130;
        - echo proceed;
        - sleep 130;
        - echo done;

Resultant container command line

root@tpd-76fdb94f8d-zg8c8:/# ps auxfwww
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           8  0.0  0.0   4188  3448 pts/0    Ss   14:08   0:00 bash
root         200  0.0  0.0   8100  3992 pts/0    R+   14:08   0:00  \_ ps auxfwww
root           1  0.0  0.0   2576   908 ?        Ss   14:07   0:00 sh -c sleep 130; echo start; sleep 130; echo proceed; sleep 130; echo done;
root           7  0.0  0.0   2484   896 ?        S    14:07   0:00 sleep 130

root@tpd-76fdb94f8d-zg8c8:/# cat /proc/1/cmdline ; echo
sh-csleep 130;echo start;sleep 130;echo proceed;sleep 130;echo done;

root@tpd-76fdb94f8d-zg8c8:/# cat /proc/1/cmdline | sed -ne 'l'
sh\000-c\000sleep 130;\000echo start;\000sleep 130;\000echo proceed;\
\000sleep 130;\000echo done;\000$

root@tpd-76fdb94f8d-zg8c8:/# command terminated with exit code 137
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment