Remove unexisting annotations in kubectl apply -f

4/2/2020

When applying an update to a kubernetes resource with kubectl -f apply and in the applied configuration I removed some annotations that currently exists in the deployed resource, these annotations are not being removed (but the changes in the existing ones are being properly updated). How can I force to delete the removed annotations in the update process?

BTW, I want avoid to delete and recreate the resource

-- artisan
annotations
kubectl
kubernetes

1 Answer

4/2/2020

As @Matt mentioned

Did you use kubectl apply to create this data on the resource? apply stores previous state in an annotation. If that annotation doesn't exist then it can't detect what data to delete

More about it here


You can use kubectl edit to delete those annotations.

Edit a resource from the default editor.

The edit command allows you to directly edit any API resource you can retrieve via the command line tools. It will open the editor defined by your KUBE_EDITOR, or EDITOR environment variables, or fall back to 'vi' for Linux or 'notepad' for Windows. You can edit multiple objects, although changes are applied one at a time. The command accepts filenames as well as command line arguments, although the files you point to must be previously saved versions of resources.

Editing is done with the API version used to fetch the resource. To edit using a specific API version, fully-qualify the resource, version, and group.

The default format is YAML. To edit in JSON, specify "-o json".

The flag --windows-line-endings can be used to force Windows line endings, otherwise the default for your operating system will be used.

In the event an error occurs while updating, a temporary file will be created on disk that contains your unapplied changes. The most common error when updating a resource is another editor changing the resource on the server. When this occurs, you will have to apply your changes to the newer version of the resource, or update your temporary saved copy to include the latest resource version.


I made an example with nginx pod and some annotation

apiVersion: v1
kind: Pod
metadata:
  name: annotations-demo
  annotations:
    delete: without-restart
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

I used

  • kubectl describe to check if the annotation is added.

    Annotations: delete: without-restart

  • kubectl edit to delete this annotation, it's empty now.

    Annotations:

-- jt97
Source: StackOverflow