出于调试和测试目的,我想找到一种最便捷的方式来启动 Kubernetes pod 并即时更改其规范。
使用命令式命令启动部分非常简单。
运行
kubectl run nginx-test --image nginx --restart=Never
给了我我想要的:单个 pod 不受任何 Controller (如 Deployment 或 ReplicaSet)管理。在需要时易于使用和清理。
但是,当我尝试编辑规范时
kubectl edit po nginx-test
我收到以下警告:
pods "nginx-test" was not valid:
* spec: Forbidden: pod updates may not change fields other than spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSeconds or spec.tolerations (only additions to existing tolerations)
即只有有限的 Pod 规范集在运行时是可编辑的。
到目前为止发现的选项:
kubectl get po nginx-test -oyaml > nginx-test.yaml
编辑和重新创建
kubectl apply -f
虽然只改变一个领域有点重。
spec
部署本身中的部分。缺点是:
nginx-test-xxxxxxxxx-xxxx
的形式自动生成少方便工作。
那么是否有更简单的编辑选项(或者可能是一些优雅的解决方法)任意 Pod 规范中的字段?
我将不胜感激任何建议。
最佳答案
您绝对应该在这里使用部署。
对于您所描述的用例,Pod 上的大多数有趣字段 cannot be updated ,因此您需要自己手动删除并重新创建 pod。部署为您管理。如果一个 Deployment 拥有一个 Pod,而你删除了这个 Deployment,Kubernetes 自己知道要删除匹配的 Pod,所以实际上没有更多的工作了。
(真的没有任何理由想要一个裸机;你几乎总是想要一个更高级别的 Controller 。我能想到的一个异常(exception)是 kubectl run
集群内的调试 shell。)
生成的 Pod 名称可能是一个小麻烦。这里有用的一个技巧:截至最近 kubectl
,您可以为 kubectl logs
之类的命令指定部署名称
kubectl logs deployment/nginx-test
还有各种“仪表板”类型的工具可以让您浏览当前的 pod 集,因此您可以执行诸如读取日志之类的操作,而无需复制并粘贴完整的 pod 名称。您也可以设置 tab completion为
kubectl
, 并键入kubectl logs nginx-test<TAB>
关于kubernetes - 即时编辑 Kubernetes pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258849/