kubernetes - 即时编辑 Kubernetes pod

标签 kubernetes kubectl kubernetes-pod

出于调试和测试目的,我想找到一种最便捷的方式来启动 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 规范集在运行时是可编辑的。

到目前为止发现的选项:
  • 将 Pod 规范保存到文件中:
    kubectl get po nginx-test -oyaml > nginx-test.yaml
    

    编辑和重新创建
    kubectl apply -f
    

    虽然只改变一个领域有点重。
  • 创建部署而不是单个 Pod 然后编辑 spec部署本身中的部分。

    缺点是:
  • 需要额外的 API 对象(部署),完成后不要忘记清理
  • Pod 名称以 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 completionkubectl , 并键入
    kubectl logs nginx-test<TAB>
    

    关于kubernetes - 即时编辑 Kubernetes pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258849/

    相关文章:

    python - 重启 AKS 节点池中规模集中的 VM

    kubernetes - 从 metric-server 收集部署所需内存的总和

    kubernetes - 是否可以将本地计算机文件夹挂载到Kubernetes进行开发,例如docker run -v

    kubernetes - kubectl输出为READY

    kubernetes - 如何在 AKS 上使用 kubectl 设置 kube-proxy 设置

    linux - 错误 CoreDNS 所需的最低内核版本为 4.14.35 (UEKR5)

    spring-boot - Kubernetes服务连接被拒绝

    kubernetes - 当 Pod 包含多个容器时,K8s 的 liveness 探测行为?

    docker - 如何通过 kubernetes pod 传递 docker run 参数

    kubernetes - Kubernetes版本已升级,但kubectl显示不同版本