esb*_*ych 10 kubernetes kubectl kubernetes-pod
出于调试和测试目的,我希望找到一种最方便的方法来启动 Kubernetes Pod 并即时更改其规范。
使用命令式命令启动部分非常简单。跑步
kubectl run nginx-test --image nginx --restart=Never
Run Code Online (Sandbox Code Playgroud)
给了我我想要的东西:不受 Deployment 或 ReplicaSet 等任何控制器管理的单个 Pod。易于玩耍和需要时清理。
但是,当我尝试使用以下命令编辑规范时
kubectl edit po nginx-test
Run Code Online (Sandbox Code Playgroud)
我收到以下警告:
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)
Run Code Online (Sandbox Code Playgroud)
即只有有限的 Pod 规范集在运行时是可编辑的。
到目前为止找到的选项:
将 Pod 规范保存到文件中:
kubectl get po nginx-test -oyaml > nginx-test.yaml
Run Code Online (Sandbox Code Playgroud)
编辑并重新创建
kubectl apply -f
Run Code Online (Sandbox Code Playgroud)
不过,只改变一个字段有点重。
创建部署而不是单个 Pod,然后编辑spec部署本身的部分。
缺点是:
nginx-test-xxxxxxxxx-xxxx,使用起来不太方便。那么是否有更简单的选项(或者可能是一些优雅的解决方法)来编辑Pod 规范中的任意字段?我将不胜感激任何建议。
您绝对应该在这里使用部署。
对于您描述的用例,Pod 上的大多数有趣字段都无法更新,因此您需要自己手动删除并重新创建 Pod。部署会为您管理该操作。如果某个 Deployment 拥有一个 Pod,并且您删除了该 Deployment,那么 Kubernetes 会自行删除匹配的 Pod,因此实际上不再需要任何工作。
(实际上没有任何理由想要一个裸 Pod;您几乎总是想要一个更高级别的控制器。我能想到的一个例外是kubectl run集群内的调试 shell。)
生成的 Pod 名称可能会带来一些小麻烦。此处有用的一个技巧:从最近的情况来看kubectl,您可以将部署名称指定给以下命令:kubectl logs
kubectl logs deployment/nginx-test
Run Code Online (Sandbox Code Playgroud)
还有各种“仪表板”类型的工具可让您浏览当前的 pod 集,因此您可以执行读取日志等操作,而无需复制并粘贴完整的 pod 名称。您还可以为、 和类型设置制表符补全kubectl
kubectl logs nginx-test<TAB>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15641 次 |
| 最近记录: |