侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

docker swarm模式指定宿主机运行服务pending问题

2023-10-01 星期日 / 0 评论 / 0 点赞 / 46 阅读 / 3813 字

问题描述使用docker compose编排服务,并做了启动约束。发现服务一直在pending状态,而删掉约束后可以正常启动。docker compose文件如下version: '3'service

问题描述

使用docker compose编排服务,并做了启动约束。发现服务一直在pending状态,而删掉约束后可以正常启动。

docker compose文件如下

version: '3'services:  elasticsearch:    image: elasticsearch:5.5    ports:      - "9200:9200"      - "9300:9300"    environment:      TZ: Asia/Shanghai    networks:       - log-efk    logging:      driver: json-file      options:        max-file: '10'        max-size: 1m    deploy:      mode: replicated      replicas: 1      update_config:        parallelism: 1        delay: 10s      restart_policy:        condition: on-failure      placement:        constraints:          - node.ip == 172.16.4.34      resources:        limits:          cpus: '0.5'          memory: 900M        reservations:          cpus: '0.001'          memory: 20M  kibana:    image: kibana:5.5    environment:      TZ: Asia/Shanghai      ELASTICSEARCH_URL: http://elasticsearch:9200/    ports:      - "5601:5601"    networks:       - log-efk    logging:      driver: json-file      options:        max-file: '10'        max-size: 1m    deploy:      mode: replicated      replicas: 1      update_config:        parallelism: 1        delay: 10s      restart_policy:        condition: on-failure      placement:        constraints:          - node.ip == 172.16.4.33      resources:        limits:          cpus: '0.1'          memory: 300M        reservations:          cpus: '0.001'          memory: 20M  fluentd:    image: fluent/fluentd:v0.12.29    ports:      - "24224:24224"    volumes:      - ./fluentd.conf:/fluentd/etc/fluentd.conf    environment:      TZ: Asia/Shanghai      FLUENTD_CONF: fluentd.conf    networks:       - log-efk    logging:      driver: json-file      options:        max-file: '10'        max-size: 1m    deploy:      mode: replicated      replicas: 1      update_config:        parallelism: 1        delay: 10s      restart_policy:        condition: on-failure      placement:        constraints:          - node.ip == 172.16.4.33      resources:        limits:          cpus: '0.1'          memory: 200M        reservations:          cpus: '0.001'          memory: 20Mnetworks:   log-efk:      driver: overlay

解决步骤

  • 检查约束条件是否书写正确

与docker compose文档进行了对比,没有问题,都是- key == value 类型

  • 检查约束条件是否存在

我原本已经把约束条件通过书写到daemon.json添加到docker引擎里面,通过docker info也可以看到相应的labels。

Labels: node.ip=172.16.4.33 node.type=db

按理说约束条件应该是没有问题的。

  • 官网查找文档

在官网搜索文档,搜索label的时候,看到这么一条信息。

Add labels to cluster nodes

点进去看了下,原来可以通过

docker node update --label-add <key>=<value> <node-id>

命令来给集群节点添加标签。

这里需要看清楚,示例里面添加的标签是stronger=ssd但是在deploy约束的时候写的是node.labels.strongger==ssd

也就是说deploy约束并不是默认使用swarm node的labels,也不是使用docker engine的labels。而是需要通过添加前缀来指定。

swarm node的labels使用node.labels前缀

docker engine的labels使用engine.labels前缀。

如果你有其他需求,你可以再测试是否还有其他前缀。目前来说,一般只需要使用swarm node的labels就可以了,至于为什么不用engine的labels,是因为修改engine的参数,需要重启docker服务,会对业务造成影响。

广告 广告

评论区