如何从现有kubernetes资源配置中查找不可移植字段?

如何从现有kubernetes资源配置中查找不可移植字段?,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,群集信息: Kubernetes版本:GCP上的v1.12.8-gke.10 问题: 我现在正在做应用程序迁移。我要做的事情是获取相关资源的所有配置,然后将它们部署到新集群。从shell命令kubectl get-o yaml获取信息后,我注意到有很多信息是部署yaml所没有的 我删除了.spec.clusterIP、.metadata.uid、.metadata.selfLink、.metadata.resourceVersion、.metadata.creationTimestamp、.me

群集信息: Kubernetes版本:GCP上的v1.12.8-gke.10

问题: 我现在正在做应用程序迁移。我要做的事情是获取相关资源的所有配置,然后将它们部署到新集群。从shell命令
kubectl get-o yaml
获取信息后,我注意到有很多信息是部署yaml所没有的

我删除了
.spec.clusterIP、.metadata.uid、.metadata.selfLink、.metadata.resourceVersion、.metadata.creationTimestamp、.metadata.generation、.status、.spec.template.spec.securityContext、.spec.template.spec.dnsPolicy、.spec.template.spec.terminationGracePeriodSeconds、.spec.template.spec.restartPolicy

  • 我不确定是否有其他字段会影响我需要删除的新部署
  • 有没有办法找到我可以删除的所有不可移植字段
  • 另一个问题是:所有相关资源都重要吗?现在,我只需从
    kubectlapi资源
    中获取一个资源列表,然后逐一获取它们的信息。我是否应该忽略一些资源(如ReplicaSet)来迁移整个应用程序
  • 例如,nginx部署的输出配置如下:

      kind: Deployment
      metadata:
        annotations:
          deployment.kubernetes.io/revision: "1"
        creationTimestamp: "2019-07-16T21:55:39Z"
        generation: 1
        labels:
          app: nginx
        name: nginx-deployment
        namespace: default
        resourceVersion: "1482081"
        selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
        uid: 732377ee-a814-11e9-bbe9-42010a8a001a
      spec:
        progressDeadlineSeconds: 600
        replicas: 2
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: nginx
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: nginx
          spec:
            containers:
            - image: nginx:1.7.9
              imagePullPolicy: IfNotPresent
              name: nginx
              ports:
              - containerPort: 80
                protocol: TCP
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            terminationGracePeriodSeconds: 30
      status:
        availableReplicas: 2
        conditions:
        - lastTransitionTime: "2019-07-16T21:55:41Z"
          lastUpdateTime: "2019-07-16T21:55:41Z"
          message: Deployment has minimum availability.
          reason: MinimumReplicasAvailable
          status: "True"
          type: Available
        - lastTransitionTime: "2019-07-16T21:55:39Z"
          lastUpdateTime: "2019-07-16T21:55:41Z"
          message: ReplicaSet "nginx-deployment-5c689d88bb" has successfully progressed.
          reason: NewReplicaSetAvailable
          status: "True"
          type: Progressing
        observedGeneration: 1
        readyReplicas: 2
        replicas: 2
        updatedReplicas: 2```
    

    立即,无法自动检测哪些字段是集群特定的,
    kubectl get[resource]-o yaml
    正在输出资源的当前RESTful状态。但是,您可以使用一些LinuxBash操作集群转储的输出,以获得所需的字段。看一看

    至于“是否所有资源都重要”,答案是否定的。如果您有部署,您不需要replicaSet或pod资源,因为部署将在部署后管理和创建这些资源。您只需要顶级控制器资源(对于守护程序集和状态集也是如此)


    另一个注意事项是,
    spec
    部分中的字段大部分都可以保留,您要删除的值可能是您最初从未设置过的默认值,但删除这些值并没有真正的好处

    立即,无法自动检测哪些字段是集群特定的,
    kubectl get[resource]-o yaml
    正在输出资源的当前RESTful状态。但是,您可以使用一些LinuxBash操作集群转储的输出,以获得所需的字段。看一看

    至于“是否所有资源都重要”,答案是否定的。如果您有部署,您不需要replicaSet或pod资源,因为部署将在部署后管理和创建这些资源。您只需要顶级控制器资源(对于守护程序集和状态集也是如此)


    另一个注意事项是,
    spec
    部分中的字段大部分都可以保留,您要删除的值可能是您最初从未设置过的默认值,但删除这些值并没有真正的好处

    是的,这正是我引用的关于删除哪些字段的博客。我想知道它们是我需要删除的最小集吗?没有其他字段会影响新的部署,对吗?其他所有内容都是资源的当前状态。关键是要从元数据中删除特定于集群的字段,您已经完成了这项工作。规范字段中的任何内容都不需要删除,即使是集群默认添加的规范字段?因为这些规范字段在我的原始yaml文件中不存在。哦,我明白了,也许应用程序使用了这些默认规范?是的,这些字段是k8s的默认值,所以无论你是否添加它们,都没有区别。如果你删除了它们,它们就会在你部署的时候被添加回来。是的,这正是我参考的博客中要删除的字段。我想知道它们是我需要删除的最小集吗?没有其他字段会影响新的部署,对吗?其他所有内容都是资源的当前状态。关键是要从元数据中删除特定于集群的字段,您已经完成了这项工作。规范字段中的任何内容都不需要删除,即使是集群默认添加的规范字段?因为这些规范字段在我的原始yaml文件中不存在。哦,我明白了,也许应用程序使用了这些默认规范?是的,这些字段是k8s的默认值,所以无论你是否添加它们,都没有区别。如果删除它们,则在部署时它们将被重新添加