• docker知识9---docker statck


    一、docker stack介绍

      大规模场景下的多服务部署和管理是一件很难的事情。
      Docker Stack 为解决该问题而生,Docker Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。
      docker stack部署服务流程:在 Compose 文件中定义应用,然后通过 docker stack deploy 命令完成部署和管理。

       Usage: docker stack [OPTIONS] COMMAND

      Options:
      -  -orchestrator string Orchestrator to use (swarm|kubernetes|all)
      Commands:
        deploy    Deploy a new stack or update an existing stack
        ls      List stacks
        ps     List the tasks in the stack
        rm      Remove one or more stacks
        services    List the services in the stack

    二、dockers stack案例

     docker stack发布vote服务

    cat <<eof> docker-compose-vote.yml
    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]
    
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - 5000:80
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
    
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - 5001:80
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 1
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
          placement:
            constraints: [node.role == manager]
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "1080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:
    eof
    docker stack deploy example --compose-file=docker-compose-vote.yml
    docker stack ls
    docker stack services example
    

     visualizer为swarm集群可视化服务,可通过浏览器查看服务分布在哪个node。

     

     投票结果页面内容无法加载,其原因为:程序的使用了某个Android API,查看源码发现这个API的URL无法访问。

     

      

    三、dockers stack故障排查

    问题1:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --bundle-file docker-compose-wordpress.yml
    "--bundle-file" is only supported on a Docker daemon with experimental features enabled

    原因分析:dockerd不支持。

    解决方法:修改配置并重启docker。

    问题2:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --bundle-file docker-compose-wordpress.yml
    Loading bundle from docker-compose-wordpress.yml
    Error reading docker-compose-wordpress.yml: JSON syntax error at byte 1: invalid character 'v' looking for beginning of value

    原因分析:docker-compose-wordpress.yml中version错误。

    解决方法:修改docker-compose-wordpress.yml即可。

    问题3:dockers stack发布服务失败?

    [root@controller ~]# docker stack deploy wordpress --compose-file=docker-compose.yml
    Creating service wordpress_web
    failed to create service wordpress_web: Error response from daemon: rpc error: code = FailedPrecondition desc = service needs ingress network, but no ingress network is present

    原因分析:ingress网络被删除;

    解决方法:创建ingress网络即可。

    docker network create -d overlay --opt com.docker.network.mtu=1200 --ingress my-ingress

  • 相关阅读:
    「golang」go-micro指定consul地址
    「postgres」无数据则插入,有数据不做插入
    「postgres」导出数据以及分割数据
    「postgre」调整表结构
    「postgre」查看DB的物理占用空间
    「postgre」INT最大值
    「postgre」服务重启
    「golang」关于TIME_WAIT优化
    深入理解Spring Boot属性配置文件
    springboot 中的commandLineRunners接口
  • 原文地址:https://www.cnblogs.com/chalon/p/15124887.html
Copyright © 2020-2023  润新知