集群信息: Kubernetes版本:GCP上的v1.12.8-gke.10
问题:
我正在进行应用程序迁移。我要做的是获取相关资源的所有配置,然后将它们部署到新集群中。从shell命令kubectl get <resource> -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
个字段。
kubectl api-resources
中获取资源列表,然后逐一获取它们的信息。我应该忽略诸如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```
答案 0 :(得分:0)
立即采取行动,无法自动检测哪些字段是特定于集群的,kubectl get [resource] -o yaml
正在输出资源的当前RESTful状态。但是,您可以使用一些Linux bash来操纵群集转储的输出以获取所需的字段。看看this blog post on medium。
对于“所有资源都重要”,答案是否定的。如果您有部署,则不需要plicateSet或pod资源,因为部署将在部署后对其进行管理和创建。您只需要顶层控制器资源(对于守护程序集和状态集也是如此)。
另一方面,spec
部分中的字段几乎都可以保留,要删除的值可能是您最初从未设置的默认值,但是删除它们并没有真正的好处。