Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kubernetes迁移的正确YAML格式_Kubernetes_Yaml - Fatal编程技术网

kubernetes迁移的正确YAML格式

kubernetes迁移的正确YAML格式,kubernetes,yaml,Kubernetes,Yaml,我有一个YAML文件,如下所示,是从现有集群导出的: apiVersion: v1 items: - apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2019-03-20T23:17:42Z name: default namespace: dev4 resourceVersion: "80999" selfLink: /api/v1/namesp

我有一个YAML文件,如下所示,是从现有集群导出的:

apiVersion: v1
items:
- apiVersion: v1
  kind: ServiceAccount
  metadata:
    creationTimestamp: 2019-03-20T23:17:42Z
    name: default
    namespace: dev4
    resourceVersion: "80999"
    selfLink: /api/v1/namespaces/dev4/serviceaccounts/default
    uid: 5c6e0d09-4b66-11e9-b4e3-0a779a87bb40
  secrets:
  - name: default-token-tl4dd
- apiVersion: v1
  kind: ServiceAccount
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"pod-labeler","namespace":"dev4"}}
    creationTimestamp: 2020-04-21T05:46:25Z
    name: pod-labeler
    namespace: dev4
    resourceVersion: "113455688"
    selfLink: /api/v1/namespaces/dev4/serviceaccounts/pod-labeler
    uid: 702dadda-8393-11ea-abd9-0a768ca51346
  secrets:
  - name: pod-labeler-token-6vgp7
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""

如果我执行上述YAML并应用于一个新集群,我会得到一个错误,这超出了这个问题的范围

总之,我必须去掉以下属性:

uid:
selfLink:
resourceVersion:
creationTimestamp:
所以我得到了一个sed命令,如下所示

sed -i '/uid: \|selfLink: \|resourceVersion: \|creationTimestamp: /d' dev4-serviceaccounts.yaml
最终的YAML文件如下所示:

apiVersion: v1
items:
- apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: default
    namespace: dev4
  secrets:
  - name: default-token-tl4dd
- apiVersion: v1
  kind: ServiceAccount
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"pod-labeler","namespace":"dev4"}}
    name: pod-labeler
    namespace: dev4
  secrets:
  - name: pod-labeler-token-6vgp7
kind: List
metadata:
我的问题是,它是否是正确的YAML文件,因为它删除了元数据的空标记和值…(在YAML文件的最后一部分)


在这种情况下,我可以创建对象-服务帐户,但我只想确保我所做的是正确的还是其他更好的方法。

在这种特定情况下,这是正确的,但您需要小心使用它,因为对于所有类型的资源,没有一致的方法来执行此操作

从历史上看,kubectl有一个——export标志,用来生成准备好应用的YAML,但由于存在许多bug,它变得毫无用处。查看更多详细信息

如果使用
kubectl apply
创建资源,还有另一种导出资源的方法

kubectl apply view-last-applied <api-resource> <name> -oyaml
e.g.:
kubectl apply view-last-applied serviceaccount pod-labeler -oyaml
kubectl应用视图上次应用-oyaml
例如。:
kubectl应用视图上次应用的serviceaccount pod标签机-oyaml
但请记住,这对使用helm或其他工具创建的资源不起作用


您可以做的最好的事情是始终将所有源文件保存在git或类似文件中,这样您就不需要导出它。

您应该删除最后一行
元数据:
。您不需要重新创建
default
serviceCount。创建ServiceAccounts时,您不应设置其
机密
/将由处理serviceaccount创建的控制器完成。否则:应重新创建相应的机密对象。如果你应用你的文件,你的注释不是强制性的/将会被重新添加。这些对象最初来自哪里?您是否可以签出原始源代码并在源代码树中的文件上运行
helm install
kubectl apply-f
,而不尝试导出现有对象?是的,secret也将从原始群集和命名空间迁移到目标群集和命名空间。我在这里展示的是YAML文件格式。这些文件格式源自目标集群和特定集群的导出namespace@SYN我正在应用kubectl apply if secret.yaml,也适用于所有名称空间。超级,非常感谢Matt,这当然很有帮助!