出于调试和测试目的,我想找到一种最便捷的方式来启动Kubernetes Pod并即时更改其规范。
使用命令性命令,启动部分非常容易。 正在运行
kubectl run nginx-test --image nginx --restart=Never
完全满足了我的需求:单个pod不受任何控制器(如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规范集。
如此之众的选择:
将Pod规范保存到文件中:
kubectl get po nginx-test -oyaml > nginx-test.yaml
使用
编辑和重新创建kubectl apply -f
虽然只更改一个字段,却有点笨重。
创建一个Deployment而不是单个Pod,然后在Deployment本身中编辑spec
部分。
缺点是:
nginx-test-xxxxxxxxx-xxxx
和以下形式自动生成
方便使用。 那么在Pod规范中,有没有更简单的选择(或可能是一些优雅的解决方法)来编辑 任意 字段? 任何建议,我将不胜感激。
答案 0 :(得分:1)
您绝对应该在此处使用部署。
对于您正在描述的用例,Pod cannot be updated上的大多数有趣字段,因此您需要自己手动删除并重新创建Pod。部署由您来管理。如果一个部署拥有一个Pod,并且您删除了该部署,Kubernetes会自己知道要删除匹配的Pod,所以实际上没有更多的工作了。
(实际上并没有任何理由想要裸露的Pod;您几乎总是需要一个高层控制器。我可以想到的一个例外是kubectl run
集群内的调试外壳。)>
生成的Pod名称可能会带来一些麻烦。这里有用的一个技巧:从最近的kubectl
起,您可以为kubectl logs
kubectl logs deployment/nginx-test
还有各种“仪表板”类型的工具,可让您浏览当前的Pod集,因此您可以执行诸如读取日志之类的操作,而无需复制和粘贴完整的Pod名称。您也许还可以为kubectl
设置tab completion,然后输入
kubectl logs nginx-test<TAB>