Deterministik port bağlayıcılı liman işçisi kantarı


14

wildflyDeterministik sonuçlarla birden fazla limanı açığa çıkaran bir kabı ölçeklendirmek istiyorum .

liman işçisi-compose.yml

version: '3'
services:
  wildfly-server:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        admin_user: admin
        admin_password: admin
    deploy:
      resources:
          limits:
            memory: 1.5G
            cpus: "1.5"
    restart: always
    ports:
      - "8000-8099:8080"
      - "8100-8199:9990"
      - "8200-8299:8787"
    expose:
      - "8080"
      - "9990"
      - "8787"

Dockerfile

FROM jboss/wildfly:16.0.0.Final

# DOCKER ENV VARIABLES
ENV WILDFLY_HOME /opt/jboss/wildfly
ENV STANDALONE_DIR ${WILDFLY_HOME}/standalone
ENV DEPLOYMENT_DIR ${STANDALONE_DIR}/deployments
ENV CONFIGURATION_DIR ${STANDALONE_DIR}/configuration

RUN ${WILDFLY_HOME}/bin/add-user.sh ${admin_user} ${admin_password} --silent

# OPENING DEBUG PORT
RUN rm ${WILDFLY_HOME}/bin/standalone.conf
ADD standalone.conf ${WILDFLY_HOME}/bin/

# SET JAVA ENV VARS
RUN rm ${CONFIGURATION_DIR}/standalone.xml
ADD standalone.xml ${CONFIGURATION_DIR}/

Başlatma komutu

docker-compose up --build --force-recreate --scale wildfly-server=10

Neredeyse istediğim gibi çalışıyor, ancak bazı liman tutarsızlıkları var. Kapları oluşturduğumda, her kap için aşağıdaki gibi artımlı bağlantı noktalarına sahip olmalarını istiyorum:

machine_1 8001, 8101, 82001
machine_2 8002, 8102, 82002
machine_3 8003, 8103, 82003 

Ama sonuç olarak elde ettiğim deterministik değildir ve şöyle görünür:

machine_1 8001, 8102, 82003
machine_2 8002, 8101, 82001
machine_3 8003, 8103, 82002 

Sorun, compose up komutunu her çalıştırdığımda bağlantı noktalarının her kap için farklı olmasıdır.

Örnek çıktı:

CONTAINER ID  COMMAND                  CREATED             STATUS              PORTS                                                                    NAMES
0232f24fbca4  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8028->8080/tcp, 0.0.0.0:8231->8787/tcp, 0.0.0.0:8126->9990/tcp   wildfly-server_7
13a6a365a552  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8031->8080/tcp, 0.0.0.0:8230->8787/tcp, 0.0.0.0:8131->9990/tcp   wildfly-server_10
bf8260d9874d  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8029->8080/tcp, 0.0.0.0:8228->8787/tcp, 0.0.0.0:8129->9990/tcp   wildfly-server_6
3d58f2e9bdfe  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8030->8080/tcp, 0.0.0.0:8229->8787/tcp, 0.0.0.0:8130->9990/tcp   wildfly-server_9
7824a73a09f5  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8027->8080/tcp, 0.0.0.0:8227->8787/tcp, 0.0.0.0:8128->9990/tcp   wildfly-server_3
85425462259d  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8024->8080/tcp, 0.0.0.0:8224->8787/tcp, 0.0.0.0:8124->9990/tcp   wildfly-server_2
5be5bbe8e577  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8026->8080/tcp, 0.0.0.0:8226->8787/tcp, 0.0.0.0:8127->9990/tcp   wildfly-server_8
2512fc0643a3  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8023->8080/tcp, 0.0.0.0:8223->8787/tcp, 0.0.0.0:8123->9990/tcp   wildfly-server_5
b156de688dcb  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8025->8080/tcp, 0.0.0.0:8225->8787/tcp, 0.0.0.0:8125->9990/tcp   wildfly-server_4
3e9401552b0a  "/opt/jboss/wildfly/…"   5 minutes ago       Up 5 minutes        0.0.0.0:8022->8080/tcp, 0.0.0.0:8222->8787/tcp, 0.0.0.0:8122->9990/tcp   wildfly-server_1

Soru

Liman dağıtımını deterministik yapmanın bir yolu var mı? Paralel çalışmayı devre dışı bırakmak gibi kullanılabilir bağlantı noktalarında veya başka bir yöntemde seri kontroller yapmak gibi mi? Bulduğum tek alternatif bir yml şablona sahip olmak ve gerekli tüm dosyaları oluşturmaktır (10 konteynere ihtiyacım varsa 10 gibi). Alternatif çözümler var mı?


jenkins gibi CI sunucusu kullanıyorsanız bunu basitçe yapabilirsiniz
LinPy

Ortam sabit değil. Amaç, gerektiği kadar çok yerde ortaya çıkarmaktır. Bahsedilen ymlşablonu farklı ortam değişkenleriyle çözebilirim , ancak bunu --scaleyapmak için kullanmanın herhangi bir yolu olup olmadığını merak ediyorum .
Hash

Sürü modunu kullanmanızı engelleyen bir neden var mı?
eez0

Sıralı bağlantı noktaları ve deterministik bağlantı noktası bağlama ile birden çok örnek oluşturmak için sürü modunu nasıl kullanırsınız?
Hash

Birden fazla örnek çalıştırmak istiyorsunuz, bir istek gönderdiğinizde bu istek kullanılabilir örnekten birine gidecektir. Bu istediğiniz davranış mı?
Keaz

Yanıtlar:


3

Hayır, şu anda (10/14/19) bağlantı noktası seçim dosyasında bağlantı noktası seçimini belirleyici yapamazsınız. Bu davranış, 722 ve # 1247 numaralı Github sorunlarında istendi , ancak bu sorunlar, sorun uygulanmadan kapatıldı.

Bir uygulamayı sizin gibi göründüğü gibi yarı dinamik olarak ölçeklemek istiyorsanız, bunu başka bir şekilde çözmeniz gerekir. Kişisel .ymlşablon fikri sesleri IMO en temiz çözüm gibi.

Portların deterministik olması gerektiğinden emin misiniz? Bir ana makine bağlantı noktasını dinleyen ve tüm docker kaplarınız arasındaki yükü dengeleyen nginx gibi bir ters proxy kullanıyorsanız, bu sizin kullanım durumunuz için işe yarar mı? Bir docker konteynerine nginx yük dengeleyici kurmak oldukça basittir. Bunu incelemenizi öneririm ve hala bir arayanın hizmetin bağlantı noktasını bilmesi için belirleyici bir yola ihtiyacınız varsa, belirli bir sunucuya art arda istek gönderebilir, ardından .ymlgeçici çözümünüzle veya bir tür hizmet bulma işlemiyle docker-compose yapılandırması.


Linkler için teşekkür ederim, ben bile sorunu ele bile vermedi biraz hayal kırıklığına uğradım ... Ben tamamen otomatik olarak ölçeklemek istiyorum. :) Kapsayıcılar kadar önce bazı dosyalar oluşturmak için deterministic portlara ihtiyacım var (yük dengeleme bir seçenek olmadığından önce yorumladığım gibi her port farklı bir kullanıcı için olmalıdır). Yani paylaştığınız bilgiler bir cevap değil, bir yorum gibidir.
Hash

Bu durumda, docker-compose ve docker'ın üstesinden gelebilecek şekilde gerçekten "dinamik olarak ölçeklenemezsiniz". Hizmetinizin örneklerinin tamamen değiştirilebilir olmasını bekliyorlar ve sizin durumunuzda değil ... ya bir tür hizmet keşif mekanizmasına ya da bağlantı noktalarının deterministik atamasına ihtiyacınız var ve bence .ymlcazip yaklaşımınız en hızlı, en kolay çözüm. Ve btw, teknik olarak "Liman dağıtımını belirleyici yapmanın bir yolu var mı?" :) ama daha yararlı bir çözüm öneremediğim için özür dilerim.
Brendan Goggin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.