IBM Cloud Docs
在 Docker Swarm 方式下作为服务运行连接器代理程序以实现高可用性

在 Docker Swarm 方式下作为服务运行连接器代理程序以实现高可用性

除了如上例所示独立运行容器外,您还可以使用 Docker Swarm 模式在多台计算机上运行由最多 3 个容器组成的群集,以提供 Satellite Connector 代理的高可用性。

要配置 Satellite 连接器,您必须对 IAM 访问策略中的 Satellite 服务具有管理员访问权。

  • Satellite Connector 将连接到 Connector 的所有代理视为平等。
  • TCP 会话在所有代理中循环进行。
  • 建议至少使用 3 个代理作为冗余。 这使得 Satellite Connector 服务更加可靠,并且不会因增加代理而额外收费。 在 windows 上,这意味着要使用多个 Windows 主机。
  • 如果您使用的是容器,请确保您的容器不在同一个虚拟机或硬件上,因为这不是冗余的。
  • 如果运行的是高带宽工作负载,建议至少使用 6 个代理,因为这将带来更多主机和更大带宽。
  • 每个连接器的最大代理数为 9 个,但不建议采用这种设置,因为容器和虚拟机都是短暂的,当一个容器消失而另一个容器试图连接时,可能会出现延迟。 建议至少留出 3 个开放插槽,以便容器和虚拟机停止和启动。
  1. 在 Swarm 管理器系统上创建名为 connector-agent.yaml 的 Satellite Connector 代理撰写文件,并将以下内容复制到该文件中。 如果有多个环境,则需要创建多个配置文件,并按环境命名。 例如,为生产创建 connector-agent-prod.yaml,为暂存创建 connector-agent-staging.yaml。 然后,在相应文件中加入要用于每个环境的连接器 ID。

    version: '3.9'
    services:
      agent:
        image: icr.io/ibm/satellite-connector/satellite-connector-agent:latest
        environment:
        - SATELLITE_CONNECTOR_ID=/satellite-connector-id
        - SATELLITE_CONNECTOR_IAM_APIKEY=/run/secrets/satellite-connector-iam-apikey
        - SATELLITE_CONNECTOR_TAGS={{.Node.Hostname}} # You also can add other details in this field. For example, SATELLITE_CONNECTOR_TAGS="Some text"
        deploy:
          replicas: 3
          restart_policy:
            condition: any
          update_config:
            parallelism: 2
            delay: 20s
            failure_action: rollback
            order: start-first
          resources:
            limits:
              cpus: '0.40'
              memory: 500M
            reservations:
              cpus: '0.04'
              memory: 200M
        configs:
          - source: satellite-connector-id
            uid: '1000'
            gid: '1000'
            mode: 0400
          - source: satellite-connector-region
            uid: '1000'     
            gid: '1000'     
            mode: 0400      
        secrets:
          - source: satellite-connector-iam-apikey
            uid: '1000'
            gid: '1000'
            mode: 0400
        logging:
          driver: "json-file"
          options:
            max-size: ${JSON_FILE_MAX_SIZE:-1m}
            max-file: ${JSON_FILE_MAX_FILE:-10}
    
    configs:
      satellite-connector-id:
        external: true
      satellite-connector-region:
        external: true
    
    secrets:
      satellite-connector-iam-apikey:
        external: true
    
    networks:
      default:
        external: true
        name: bridge
    
  2. 使用 Satellite 连接器标识创建 Docker 配置。

    printf <satellite connector id value> | docker config create satellite-connector-id -
    
  3. 使用 Satellite 连接器区域创建 Docker 配置。

    printf <satellite connector region value> | docker config create satellite-connector-region -
    
  4. 使用 IAM API 密钥创建 Docker 私钥。

    printf <Your IAM API key> | docker secret create satellite-connector-iam-apikey -
    

缺省情况下,Swarm 组合文件将 SATELLITE_CONNECTOR_TAGS 环境变量设置为 Swarm 节点的主机名。 您可以调整此值以满足组合文件中的需求。 此外,缺省情况下,副本数设置为 3。 您可以将此数目调整为更低,但仅支持最多 3 个副本。

  1. 部署 Satellite 连接器代理程序服务。
    1. 确保您已使用 ibmcloud cr login CLI 或 API 密钥 docker login -u iamapikey -p <your apikey> icr.io 登录到 IBM Cloud® Container Registry。
    2. 部署堆栈。
      docker stack deploy --compose-file satellite-connector-agent.yaml --with-registry-auth satellite_connector
      
  2. 验证 Satellite 连接器代理程序服务是否正在运行。
    docker service ps satellite_connector_agent