目前我正在研究如何在 AWS 上编排我们的 dockerised 微服务。ECS 的 Fargate 选项看起来很有希望消除管理 EC2 实例的需要。
尽管在 Fargate 中启动“任务”所需的时间出奇地长,即使是简单的单容器设置也是如此。60 秒到 90 秒对于我们的 Docker 应用程序镜像来说是典型的。我听说这可能需要更多的时间,比如几分钟左右。
所以问题是:虽然 Docker 容器通常可能会在几秒钟内启动,但在 Fargate 情况下,这种开销的确切原因是什么?
PS 相关问题的搜索返回这样的选项:
但即使在没有部署负载均衡器的最简单的配置中并假设 Docker 镜像未缓存在 ECS 中,在 Fargate 中使用单个 Docker 镜像启动任务(约 60 秒)仍然比启动相同的 Docker 慢至少约 2 倍裸 EC2 实例上的映像(25 秒)
出于调试和测试目的,我希望找到一种最方便的方法来启动 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 …