terminationGracePeriodSeconds not shown in kubectl describe result

12/30/2021

Creating a Pod with spec terminationGracePeriodSeconds specified, I can't check whether this spec has been applied successfully using kubectl describe. How can I check whether terminationGracePeriodSeconds option has been successfully applied? I'm running kubernetes version 1.19.

apiVersion: v1
kind: Pod
metadata:
  name: mysql-client
spec:
  serviceAccountName: test
  terminationGracePeriodSeconds: 60
  containers:
  - name: mysql-cli
    image: blah
    command: ["/bin/sh", "-c"]
    args:
      - sleep 2000
  restartPolicy: OnFailure
-- Piljae Chae
kubernetes
kubernetes-pod

2 Answers

12/30/2021

Assuming the pod is running successfully. You should be able to see the settings in the manifest.

terminationGracePeriodSeconds is available in v1.19 as per the following page. Search for "terminationGracePeriodSeconds" here. https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/

Now try this command:

kubectl get pod mysql-client -o yaml | grep terminationGracePeriodSeconds -a10 -b10
-- Rajesh Dutta
Source: StackOverflow

1/11/2022

How can I check whether terminationGracePeriodSeconds option has been successfully applied?

First of all, you need to make sure your pod has been created correctly. I will show you this on an example. I have deployed very simple pod by following yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  terminationGracePeriodSeconds: 60
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

Then I run the command kubectl get pods:

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          9m1s

Everything is fine.

I can't check whether this spec has been applied successfully using kubectl describe.

That is also correct, because this command doesn't return us information about termination grace period. To find this information you need to run kubectl get pod <your pod name> command. The result will be similar to below:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx","ports":[{"containerPort":80}]}],"terminationGracePeriodSeconds":60}}
  creationTimestamp: "2022-01-11T11:34:58Z"
  name: nginx
  namespace: default
  resourceVersion: "57260566"
  uid: <MY-UID>
spec:
  containers:
  - image: nginx:1.14.2
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP
    resources: {}
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: <name>
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: <my-node-name>
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 60
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: kube-api-access-nj88r
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2022-01-11T11:35:01Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2022-01-11T11:35:07Z"
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2022-01-11T11:35:07Z"
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2022-01-11T11:35:01Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: containerd://<ID>
    image: docker.io/library/nginx:1.14.2
    imageID: docker.io/library/nginx@sha256:<sha256>
    lastState: {}
    name: nginx
    ready: true
    restartCount: 0
    started: true
    state:
      running:
        startedAt: "2022-01-11T11:35:06Z"
  hostIP: <IP>
  phase: Running
  podIP: <IP>
  podIPs:
  - ip: <IP>
  qosClass: BestEffort
  startTime: "2022-01-11T11:35:01Z"

The most important part will be here:

{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx","ports":[{"containerPort":80}]}],"terminationGracePeriodSeconds":60}}

and here

  terminationGracePeriodSeconds: 60

At this moment you are sure that terminationGracePeriodSeconds is applied successfully.

-- Mikołaj Głodziak
Source: StackOverflow