How to correctly export kubernetes resources?

9/3/2019

I've created several resources using k8s Ansible module. Now I'd like to export the resources into Kubernetes manifests (so I don't need to use Ansible anymore). I've started by exporting a Service:

$ kubectl get svc myservice -o yaml --export > myservice.yaml
$ kubectl apply -f myservice.yaml 
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
service/myservice configured

Why do I get the the warning? And why there's service/myservice configured and not service/myservice unchanged? Is there a better way to export resources?

-- jreisinger
kubernetes

3 Answers

9/4/2019

You get the warning because you're using kubectl apply on a resource that you previously created with kubectl create. If you create the initial Service with kubectl apply, you shouldn't get the warning.

The configured instead of unchanged might be because of some metadata or generated data that is also included in the output of kubectl get svc myservice -o yaml --export.

-- weibeld
Source: StackOverflow

9/3/2019

You're doing right, don't worry about the warning.

If you want to get rid of it, you have to delete all the generation, selfLink and so on keys.

-- prometherion
Source: StackOverflow

9/4/2019

Yes, you are doing it right. Let me show you small trick:

kubectl get svc myservice -o yaml --export | sed -e '/status:/d' -e '/creationTimestamp:/d' -e '/selfLink: [a-z0-9A-Z/]\+/d' -e '/resourceVersion: "[0-9]\+"/d' -e '/phase:/d' -e '/uid: [a-z0-9-]\+/d' > myservice.yaml

Will generate proper yaml file without status, creationTimestamp, selfLink, resourceVersion, phase and uid.

-- VKR
Source: StackOverflow