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)