1

牧场主:v2.2.4

在 Rancher GUI 中,我在我们的一个环境 (Dev) 中看到它包含一个命名空间“ n1 ”。不同部分(即 Workloads、LoadBalancers、ConfigMaps、Volumes 等)下的这个命名空间几乎没有条目(容器/设置等)。

我想在 Rancher 运行的新环境中创建相同的命名空间。这个环境可以说是(测试)。在获得所有必需的 docker 镜像 ( sudo docker image pull <server:port>/<imagename:imageversion>) 后,我是否需要下载每个部分下所有这些条目的 YAML 并将它们导入目标环境?(可能会更改volumes-id容器映像条目即name: <server:port>/<imagename:imageversion>位置(如果有)、控制器uid以将其保留在目标(TEST)环境中)?我的理解是,如果我在相应的部分下创建新的工作负载/添加任何内容,标签/注释将生成一个新的控制器 ID 值!所以,在导入 YAML 之前,我想知道是否应该将 controller-uid 条目值留空(不确定它是否会出错)。

是否有一种简单的方法可以在TEST环境中启动/创建整个命名空间“n1” (即测试中n1 Dev 的命名空间副本),并自动生成必要的存储位(卷类/卷和持久卷 - 所有这些都有一些与每个实体关联的 Vol ID/名称/uid)、部署位(uid/controller-uids)等?

什么是一种有效的方法来做到这一点,这样我就不必手动下载 YAML(来自 Dev)并将它们导入到每个组件级别的测试中(即卷 YAML、卷类 YAML、工作负载/部署 YAML 等 - 一个接一个) ?

4

1 回答 1

0

您可以使用以下内容从命名空间中获取所有资源并将它们应用到新的命名空间中。

#!/bin/bash
SourceNamespace="SourceNS"
TargetNamespace="TargetNS"
TempDir="./tmp"

echo "Grabbing all resources in $SourceNamespace"
for APIResource in `kubectl api-resources --verbs=list --namespaced -o name`
do
  kubectl -n "$SourceNamespace" get "$APIResource" -o yaml > "$TempDir"/"$APIResource".yaml
done

echo "Deploying all resources in $TargetNamespace"
for yaml in `ls $TempDir`
do
  kubectl apply -n "$TargetNamespace" -f "$TempDir"/"$yaml"
done
于 2020-08-09T08:55:53.470 回答