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

Kubernetes 如何将所有资源复制到新的命名空间?,kubernetes,namespaces,migration,Kubernetes,Namespaces,Migration,我想创建一个与旧名称空间相同的新名称空间 我的方法如下所示(下面是完整的命令): 你可以试试这个 kubectl get all -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace: NEW_NAMESPACE/' | kubectl apply -f - 这会奏效的 如果您使用的是高于1.14的K8s更高版本,sed将替换名称空间 如果kubectl get all没有添加所有资源,我们可以像 ku

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

我的方法如下所示(下面是完整的命令):

你可以试试这个

kubectl get all -n OLD_NAMESPACE -o yaml | sed -e 's/namespace: OLD_NAMESPACE/namespace:  NEW_NAMESPACE/' | kubectl apply -f -
这会奏效的

如果您使用的是高于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 -

目前还没有任何既定的方法来解决您的任务。
您可以尝试一些常见的方法。
另见讨论


如果资源是由
kubectl apply
创建的,则应用的yaml将保存在特殊注释中。
kubectl.kubernetes.io/上次应用的配置

您可以这样检索它:

kubectl get deploy example -o json | \
jq -r '.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"' | jq .
请注意,
kubectl create
kubectl replace
不保留此注释。
请参阅更多示例。
还要记住这种方法是如何实现的


或者,您可以求助于直接json/yaml处理

kubectl get deploy example -ojson | \ice 
jq 'del(.metadata.creationTimestamp, .metadata.managedFields, \
  .metadata.namespace, .metadata.ownerReferences, \
  .metadata.resourceVersion, .metadata.selfLink, \
  .metadata.uid, .status)'
确保删除所有服务字段(例如,Helm添加了很多内容)


最有可能的是
kubectl-get-all
对您不起作用。 首先,它实际上并不显示所有资源。
下面是展开
all
alias的示例

 - No cluster scoped resources
 - No namespace admin level resources (limits, quota, policy, authorization rules)
 - No resources that are potentially unrecoverable (secrets and pvc)
 - Resources that are considered "similar" to #3 should be grouped the same (configmaps)
令人困惑的是,这些信息似乎已经从kubernetes文档中删除,并且只存在于存档副本中,但仍然相关


除此之外,
kubectl get all
将同时返回POD和部署控制器(如部署或状态集),这不是您想要的,因为在大多数情况下,您不想显式地创建POD。

您可以从签入到源代码管理的工件中安装一个干净的副本吗
git clone
存储库如果您还没有,那么
kubectl apply-n NEW-NAMESPACE
helm install-n NEW-NAMESPACE
?谢谢您的回答!我在minikube 1.15.1上。它在那里似乎不起作用。我得到了卷“some token”的
MountVolume.SetUp失败:找不到secret“some secret”
spec.custerIP
这是因为已经有一个pod在运行,并且在yaml中指定了相同的clusterip。也许删除
clusterip
会起作用,k8s会分配新的IP。这不会起作用,答案实际上是误导性的
kubectl get all
既不会显示所有对象,也不会删除任何内部信息。它还将列出POD及其部署控制器(部署或状态集),在大多数情况下,您不需要这些控制器。
kubectl get deploy example -ojson | \ice 
jq 'del(.metadata.creationTimestamp, .metadata.managedFields, \
  .metadata.namespace, .metadata.ownerReferences, \
  .metadata.resourceVersion, .metadata.selfLink, \
  .metadata.uid, .status)'
 - No cluster scoped resources
 - No namespace admin level resources (limits, quota, policy, authorization rules)
 - No resources that are potentially unrecoverable (secrets and pvc)
 - Resources that are considered "similar" to #3 should be grouped the same (configmaps)