正在更新 swarm 上的 docker 个容器?
Updating docker containers on swarm?
docker swarm (1.12+) 如何与容器 updates 一起工作?示例:
我在一个节点上有 2 个容器,都使用 4GB 内存,总共 8 GB,等于节点大小。
如果我将一个容器的内存大小更改为例如6GB?会蜂拥而至:
- 将容器重新安排到有 6 GB 可用空间的新节点?
- 更新失败?
- 像以前一样继续使用两个容器?
我自己想不通
假设您在 Swarm 上使用服务并明确为每个容器保留内存,如果您尝试更新它以保留比可用内存更多的内存,您的服务将停留在 'allocated' 状态。
例如:docker service create --replicas 1 --name nginx --reserve-memory 256M nginx
将成功并创建 1 个容器并为其预留 256MB(如果您的 Swarm 有容量)。然后 运行 docker service update --reserve-memory 300G nginx
和 Docker 将:
- 关闭现有容器
- 尝试用请求的资源安排一个新容器
如果您没有可用 300GB 的节点,则无法安排更新的服务,它将处于 Allocated
状态,因此您的服务不会 运行宁此时。
调度程序会不断检查,因此如果资源确实可用,或者如果您 运行 一个新的 update
命令具有较低的保留,那么它将根据请求创建容器。
docker swarm (1.12+) 如何与容器 updates 一起工作?示例:
我在一个节点上有 2 个容器,都使用 4GB 内存,总共 8 GB,等于节点大小。
如果我将一个容器的内存大小更改为例如6GB?会蜂拥而至:
- 将容器重新安排到有 6 GB 可用空间的新节点?
- 更新失败?
- 像以前一样继续使用两个容器?
我自己想不通
假设您在 Swarm 上使用服务并明确为每个容器保留内存,如果您尝试更新它以保留比可用内存更多的内存,您的服务将停留在 'allocated' 状态。
例如:docker service create --replicas 1 --name nginx --reserve-memory 256M nginx
将成功并创建 1 个容器并为其预留 256MB(如果您的 Swarm 有容量)。然后 运行 docker service update --reserve-memory 300G nginx
和 Docker 将:
- 关闭现有容器
- 尝试用请求的资源安排一个新容器
如果您没有可用 300GB 的节点,则无法安排更新的服务,它将处于 Allocated
状态,因此您的服务不会 运行宁此时。
调度程序会不断检查,因此如果资源确实可用,或者如果您 运行 一个新的 update
命令具有较低的保留,那么它将根据请求创建容器。