diff
Diff configurations specified by filename or stdin between the current online configuration, and the configuration as it would be if applied.
Output is always YAML.
KUBECTL_EXTERNAL_DIFF environment variable can be used to select your own diff command. By default, the “diff” command available in your path will be run with “-u” (unified diff) and “-N” (treat absent files as empty) options.
Exit status
0No differences were found.1Differences were found.>1Kubectl or diff failed with an error.
Command
$ kubectl diff -f FILENAME
Example
Input File
# deployment.yaml - online configuration
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dev
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
# deployment.yaml - local configuration
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dev
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
Notice that the local configuration refers to the latest nginx container from the registry.
Command
kubectl diff -f deployment.yaml
Output
diff -u -N /tmp/LIVE-435797985/apps.v1.Deployment.default.nginx-dev /tmp/MERGED-822429644/apps.v1.Deployment.default.nginx-dev
--- /tmp/LIVE-435797985/apps.v1.Deployment.default.nginx-dev    2020-09-20 14:50:30.160820677 +0000
+++ /tmp/MERGED-822429644/apps.v1.Deployment.default.nginx-dev  2020-09-20 14:50:30.172820784 +0000
@@ -6,7 +6,7 @@
     kubectl.kubernetes.io/last-applied-configuration: |
       {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-dev","namespace":"default"},"spec":{"selector":{"matchLabels":{"app":"nginx"}},"template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx"}]}}}}
   creationTimestamp: "2020-09-20T14:48:35Z"
-  generation: 1
+  generation: 2
   name: nginx-dev
   namespace: default
   resourceVersion: "2180"
@@ -31,7 +31,7 @@
         app: nginx
     spec:
       containers:
-      - image: nginx:1.14.2
+      - image: nginx:latest
         imagePullPolicy: IfNotPresent
         name: nginx
         resources: {}
exit status 1
Generating a Diff
Use the diff program in a user’s path to display a diff of the changes that will be
made by Apply.
kubectl diff -k ./dir/
Setting the Diff Program
The KUBECTL_EXTERNAL_DIFF environment variable can be used to select your own diff command.
By default, the “diff” command available in your path will be run with “-u” (unified) and “-N”
(treat new files as empty) options.
export KUBECTL_EXTERNAL_DIFF=meld; kubectl diff -k ./dir/
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.