首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes迁移的正确YAML格式

kubernetes迁移的正确YAML格式
EN

Stack Overflow用户
提问于 2021-02-06 22:08:41
回答 1查看 86关注 0票数 1

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

代码语言:javascript
复制
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并应用到一个新集群,我会得到一个错误,这超出了这个问题的范围。

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

代码语言:javascript
复制
uid:
selfLink:
resourceVersion:
creationTimestamp:

所以我得到了一个像下面这样的sed命令,它可以解决这个问题

代码语言:javascript
复制
sed -i '/uid: \|selfLink: \|resourceVersion: \|creationTimestamp: /d' dev4-serviceaccounts.yaml

最终的YAML文件如下所示:

代码语言:javascript
复制
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文件的最后)

我可以在这个实例中创建对象-serviceaccount,但我只想确保我所做的是正确的或任何其他更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-08 18:40:14

在这种特定情况下,这是正确的,但您需要小心,因为对于所有类型的资源,没有一致的方法可以做到这一点。

从历史上看,kubectl有--export标志,该标志生成可供应用的yamls,但由于许多but,它被废弃了。有关更多详细信息,请查看the issue on k8s github repo

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

代码语言:javascript
复制
kubectl apply view-last-applied <api-resource> <name> -oyaml
e.g.:
kubectl apply view-last-applied serviceaccount pod-labeler -oyaml

但请记住,这不适用于使用helm或其他工具创建的资源。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66077782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档