1

kubernetes中,如果某个 pod 出于某种原因宕机,准入控制器将重新启动它。

我们称这种机制为自我修复。

我从未使用过docker-compose,但我想知道:是一样的吗?

4

3 回答 3

3

当使用docker-compose或现在docker compose(使用空格)部署时,您将部署到单个节点。您可以使用处理崩溃应用程序的重启策略将服务定义为自动重启。但是,在某些情况下,网络或卷等外部因素未处于良好状态,我已经看到导致定义被 docker 视为无效,此时它停止尝试重新启动服务。

还有 Swarm Mode,它是一个类似于 Kubernetes 的编排器,它可以使用docker-compose.yml来定义目标状态,它会继续重新启动服务以从中断中恢复,并在集群中的一个节点出现故障时将它们迁移到另一个节点。

于 2021-12-21T15:19:01.757 回答
1
  • 单独的 docker-compose 并不是真正的容器编排器。
  • 它只是一个允许您将服务及其依赖项作为 1 个单元运行的客户端。docker-compose 确实有一个重启策略,可以在容器崩溃或其他情况下重启容器
  • 如果运行容器的节点宕机,docker-compose 将无法重启容器,您将面临服务中断
  • Docker Swarm 和 Kubernetes 是服务器,而不仅仅是客户端,因此它们是更全面的编排器
于 2021-12-21T15:26:22.457 回答
1

要在 docker 的上下文中实现自愈,可以像在 Kubernetes 中一样创建服务。但是只有在 swarm 模式下使用 Docker 时才能创建服务。

要启用 swarm,请使用:docker swarm init.
然后继续创建一个服务,如:
docker service create [service-name] [--options [values]...]

如果您想利用 docker-compose 创建服务,以下是您可以为 Postgres 数据库执行此操作的方法:

version: "3.1"

services:
  psql:
    image: postgres
    secrets:
    - psql_user
    - psql_password
    environment:
      POSTGRES_USER_FILE: /run/secrets/psql_user
      POSTGRES_PSWD_FILE: /run/secrets/psql_pass

secrets:
  psql_user:
    file: ./psql_user.txt
  psql_password:
    file: ./psql_pass.txt

最后,继续并docker-compose up在 docker-compose.yaml 所在的同一目录中使用它,它将使您的 psql 服务启动并运行。

详细说明一下,docker-compose 本身并不是一个编排器。docker-compose 是一种使用单个文件和单个命令同时启动或停止多个容器的机制。

此外,必须声明 docker-compose 是一个测试实用程序,并不打算在生产中使用。对于生产用途,请查看stack

于 2021-12-22T05:23:45.870 回答