我知道如何列出特定命名空间的 pod,如下所示:
kubectl get pods -n mynamespace
清单上有一个我感兴趣的
POD
。我希望能够看到使用什么 yaml
部署文件来创建该 pod 及其内容。此外,编辑此类 kubectl
文件的 yaml
命令是什么?
要获取用于生成 pod 的部署,必须查看 pod yaml 或描述 pod:
kubectl get pod -n {namespace} {pod-name} -o yaml
查找“
ownerReferences
”部分。这将告诉您什么“拥有”该 Pod。这可能是一个 ReplicaSet(由 Deployment 生成)。例如,这是我的 canonical-service-controller-manager pod 中的一个:
$ kubectl get pod -n asm-system canonical-service-controller-manager-67c8f5fff5-dzd4t -o yaml
apiVersion: v1
kind: Pod
metadata:
...
namespace: asm-system
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: canonical-service-controller-manager-67c8f5fff5
uid: 2504c96b-9ef7-45fa-b5d2-2a20f09486e1
resourceVersion: "13507"
uid: 54748cf7-26f8-4e8a-996a-725dbc89c66b
...
然后您可以找到副本集并执行相同的操作。在我的示例中,副本集称为“
canonical-service-controller-manager-67c8f5fff5
”
$ kubectl get replicaset -n asm-system canonical-service-controller-manager-67c8f5fff5 -o yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
annotations:
...
generation: 1
labels:
...
name: canonical-service-controller-manager-67c8f5fff5
namespace: asm-system
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: Deployment
name: canonical-service-controller-manager
uid: eafe2590-5005-492f-9673-0f02ac74a4d5
spec:
replicas: 1
...
所以你可以在这里看到,创建副本集的部署,进而创建了我的 pod 是
canonical-service-controller-manager
现在我可以使用
获取部署yaml$ kubectl get deployment -n asm-system canonical-service-controller-manager -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
...
creationTimestamp: "2022-06-14T06:35:58Z"
generation: 1
labels:
...
name: canonical-service-controller-manager
namespace: asm-system
spec:
...
如果我想编辑部署,我可以使用以下命令:
kubectl edit deployment -n asm-system canonical-service-controller-manager
请记住,编辑部署将循环部署中的所有 Pod,因为它们都是副本。
要获取 yaml 文件,请尝试
kubectl get deploy deploymentname -o yaml
要使用新的 yaml 文件更新 pod,请首先查找并编辑 yaml 文件,或者复制内容并进行所需的更改,然后运行:
kubectl apply -f newDeployment.yaml
使用您的更改更新集群。