如何将所有资源复制到新的命名空间?

Use*_*645 6 migration namespaces kubernetes

我想创建一个与旧名称空间相同的新名称空间。

我的方法看起来像这样(完整命令如下):

kubectl get <resources> -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f  -
Run Code Online (Sandbox Code Playgroud)

这基本上以 json 格式获取所有资源定义,用新名称空间替换旧名称空间,然后应用所有内容。

不幸的是,这不起作用,因为旧的定义包含名称空间特定的东西。为了避免这种情况,曾经有一个--export标志,但已被弃用,请参阅此处

知道我该怎么做吗?

完整命令:

kubectl get bindings,configmaps,endpoints,limitranges,persistentvolumeclaims,persistentvolumes,pods,podtemplates,replicationcontrollers,resourcequotas,secrets,mutatingwebhookconfigurations,validatingwebhookconfigurations,controllerrevisions,daemonsets,deployments,replicasets,statefulsets,tokenreviews,localsubjectaccessreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,horizontalpodautoscalers,cronjobs,jobs,certificatesigningrequests,leases,endpointslices,events,ingressclasses,networkpolicies,runtimeclasses,poddisruptionbudgets,rolebindings,roles,debugattachments,csidrivers,volumeattachments -o json --namespace OLD-NAMESPACE | jq '.items[].metadata.namespace = "NEW-NAMESPACE"' | kubectl create -f  -
Run Code Online (Sandbox Code Playgroud)

Har*_*var 3

你可以试试这个

kubectl get all -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace:  NEW_NAMESPACE/' | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)

这会起作用

如果您使用 1.14 以上的更高 K8s 版本,sed将替换命名空间

如果kubectl get all不添加所有资源,我们可以像这样应用

kubectl get bindings,configmaps,endpoints,limitranges,persistentvolumeclaims,persistentvolumes,pods,podtemplates,replicationcontrollers,resourcequotas,secrets,mutatingwebhookconfigurations,validatingwebhookconfigurations,controllerrevisions,daemonsets,deployments,replicasets,statefulsets,tokenreviews,localsubjectaccessreviews,selfsubjectaccessreviews,selfsubjectrulesreviews,subjectaccessreviews,horizontalpodautoscalers,cronjobs,jobs,certificatesigningrequests,leases,endpointslices,events,ingressclasses,networkpolicies,runtimeclasses,poddisruptionbudgets,rolebindings,roles,debugattachments,csidrivers,volumeattachments -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace:  NEW_NAMESPACE/' | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)

  • 感谢你的回答!我使用的是 minikube 1.15.1。它似乎在那里不起作用。 (2认同)