• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    JON
    JON --- ---
    INDIAN: Mluvim spis o tom testovani - ze to bud budu testovat na docker kontejnerech coz ma svoje problemy, nebo budu muset vymyslet jak to testovat na virtualech, ale tam to neni tak dobre integrovane do toho CI (nebo aspon nevim o tom, ze by slo nejak snadno startovat VM z CI, mozna blbe hledam).
    INDIAN
    INDIAN --- ---
    JON: v cem myslis ze by gitlab CI mel delat vic? ja sem s nim docela spojenej - pouzivam ho treba docasne na provisioning bare metal serveru kterej neni uplne trivialni - nastaveni idrac + pripojeni spec. vytvorenyho ISO, deaktivace port-channel na 2 switchich, vlastni instalace systemu, nastaveni teamingu a opet nastaveni port-channels a zbejvajici provisioning.
    Jednoduchej .gitlab-ci.yml s vyhrazenym runnerem s pristupem do produkcni site, s kontejnerem s ansible (tahanej z registry) a vsechny playbooky sou v projektu, klice a hesla v secrets...
    z moji strany mu neni co vytknout z hlediska deploymentu...
    JON
    JON --- ---
    INDIAN: hezky. Ja si taky dovedu predstavit testovani tech ansiblich roli a playbooku na VM, ale museli bychom to nejak dodelat do gitlab CI, a to mi prijde jednodussi trochu si k tomu ucelu poohnout dockeri kontejnery, ale ma to sva uskali, no.
    INDIAN
    INDIAN --- ---
    JON: tehlech nesvaru sem si davno samo vedom, s kontejnerama pracuju denne.

    FYI (tl;dr) jedna se o platformu na simulaci/validaci konfiguraci sitovejch prvku od Arista... dodavaj komplexni lab na bootsraping a spravu konfiguraci jejich devices v podobe virtualnich masin, ktery je simulujou a lze tak si s tim hrat nez se to nacpe do fyzickejch switchu v produkci
    Prave ze nativne pouzivaj VM a ve veskerych prezentacich nam cpali pouze VM. O kontejnerech se vubec nezminovali, ja si mezitim nasel ze si s nima zacli hrat konecne taky, ovsem ofiko dokumentace (krom moznosti si stahnout image) nic extra nesdeluje (jen par blogu).
    Nastesti frajer od nich co ma nas na starosti je ochotnej a sam je autorem nekolika utilit co se tyce provisioningu, takze mi poslal par odkazu na projekty jejich lidi na githubu, takze uz se mam ceho chytit...
    Problem je v tom ze v pripade VM inicializace probiha pres boot (tak jako u switchu pres ZTP)... Nicmene prakticky de jenom mu nacpat zakladni konfiguraci - coz lze samo jednoduse u kontejneru vyresit bud dodatecnym provisioningem pres CLI nebo si buildnout novej image.
    (nehrabal bych se v tom tak a udelal to klidne dle jejich ofiko doporuceni na VM, ale mam pred sebou migraci cca 20 datacenter s celkovym poctem 300 devices, tak bych to rad mel vic pruznejsi)
    JON
    JON --- ---
    INDIAN: hele, klidne naznac jaks to vyresil. Jinak pracovat s kontejnerama jako s VM je rozsirenej nesvar - napr me to nakopalo s rozbehem naposled v pondeli. Rovnou pridam popis a dotaz:

    Popis:
    Cca pred rokem, kdyz jsme si zavedli nejake deploye pomoci ansible jsem spachal "jednoduchej" setup na testovani ansible roli:
    - Nastartuje se kontejner "playbook" s ansible , rolema a playbookama
    - Nastartuje se kontejner "target" s bezicim ssh a cistym systemem
    1) v playbook kontejneru se pusti ansible s tim s cim ma
    2) pytestem se overi, ze to udelalo to co melo
    3) jedna z veci co se overuje je, ze se do "targetu" nainstaloval docker, a pomoci docker-compose tam jde neco spustit a posloucha a odpovida to na nejakym portu.

    Mozna jsem tu o tom uz mluvil, ale narazel jsem na kokotsky problemy s tim, jak do tech kontejneru dostat ssh klice (aniz by musely byt zapeceny v image) - kdyz jsem si je vyzobaval z ENV v bashi, tak se tam objevovaly zalomeni radku atd.. nakonec jsem to vyresil pythonim skriptem, ktery se pousti pri startu kontejneru a ten ty netisknutelny znaky zpracovava OK.

    Ted, cca po roce, jsem to rozvrtal v ramci prechodu na python3, a ejhle - docker in docker uz neni co bejval - pri mountovani volume z docker-compose to padalo, protoze overlay nemuze slouzit jako backing container pro overlay - coz jiste pred tim cca rokem jeste slo.

    Dotaz:
    Napada vas, jak tohle elegantne resit?
    Volumovat do "targetu" socket hostitelskyho dockeru (aby to nebylo DinD, ale side by side) mi neprijde OK, pac chci otestovat i to, ze se tam tim ansiblem nainstaluje, a navic bude pritomnost toho socketu vadit pri te instalaci, ne?
    INDIAN
    INDIAN --- ---
    INDIAN: samozrejme ze se snazim podojit kozla s necim jako bootfile-name (facepalm) ... aneb kdyz se nekdo snazi pracovat s kontejnerama jako s VM (2xfacepalm)

    (reseni bez nutnosti pouziti DHCP nalezeno, takze sem to tu jen zbytecne zaplacal)
    INDIAN
    INDIAN --- ---
    RUDOLF: mno ja uz sem mezitim zjistil, ze nativne docker tuhle moznost vubec neumoznuje ...
    tyhle clanky sem uz videl taky, momentalne zkousim tenhle hack https://rollout.io/blog/connecting-docker-containers-to-production-network-ip-per-container/ a bouzel nedari se taky.

    Budu to muset principielne cely obejit bez DHCP
    RUDOLF
    RUDOLF --- ---
    INDIAN: nemám osobní zkušenost + otázka jestli jsem dobře porozuměl zadání. Jen jsem si přečetl dva texty. Přijde mi že ipam out of box neumí komunikovat s externím DHCP serverem.. Externí DHCP server řeší https://gist.github.com/nerdalert/3d2b891d41e0fa8d688c

    A tady text který mě tam navedl: http://hicu.be/docker-dhcp
    INDIAN
    INDIAN --- ---
    mam trochu specifickej pripad, potreboval bych radu ohledne macvlan kdy by nekdo vedel...

    snazim se dostat par kontejneru explicitne na do LAN... hlavne teda potrebuju aby si vyzadaly z lokalniho DHCP serveru IP, na kterym uz je ceka dle preddefinovanych MAC adres dany IP s konfiguraci (duvodem je jim injektovat konfiguraci pomoci bootfile-name).

    docker-compose.yml
    version: "2"
    
    services:
    
      ceoslab0:
        container_name: ceoslab0
        image: gitlab-registry.acme.com/network/arista-containers/ceosimage:latest
        privileged: true
        mac_address: "02:42:ac:1f:ee:00"
        networks:
          front:
    
      ceoslab1:
        container_name: ceoslab1
        image: gitlab-registry.acme.com/network/arista-containers/ceosimage:latest
        privileged: true
        mac_address: "02:42:ac:1f:ee:01"
        networks:
          front:
    
    
    networks:
      front:
        driver: macvlan
        driver_opts:
         parent: eth0
        ipam:
          config:
            - subnet: 172.16.96.0/23
              gateway: 172.16.96.1
              ip_range: 172.16.97.176/28
              aux_addresses: 
                router: 172.16.97.190
    

    A pak mu vytvorim interface:
    ip link add ceoslab link eth0 type macvlan mode bridge
    ip addr add 172.16.97.190/23 dev ceoslab
    ip link set ceoslab up
    ip route add 172.16.97.176/28 dev ceoslab 
    


    pri startu se ale na ten dhcp server venku vubec nedostane (pouze prideli nahodne adresu z uvedenyho intervalu):
    # docker exec -it ceoslab0 ip r
    default via 172.16.96.1 dev eth0 
    blackhole 127.0.0.0/8 proto gated scope nowhere 
    127.0.0.1 dev lo proto gated scope link src 127.0.0.1 
    172.16.96.0/23 dev eth0 proto kernel scope link src 172.16.97.185
    


    neresil nekdo neco podobnyho uz?
    HOUMLES
    HOUMLES --- ---
    nema nekdo zkusenost jak updatnout rucne vnitrni dns na swarmu? potreboval bych z nej smazat jeden zaznam, kterej patri sluzbe, ktera uz nebezi, ale balancer mi na ni porad preskakuje.
    nevim jak se mi to povedlo, ale je tam a musim za ho zbavit.
    bohuzel nemam moznost to cely resetovat a znovu spustit coz je mi jasny, ze by pomohlo.
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    SPACEANGEL:
    jak pise MARTEN, extra hosts...

    mam to v praci, protoze je pozadavek mit db "na železe" aby byla db "stejně jako na produkci".

    v compose to je pro
    services:
        servicename:
            extra_hosts:
                - "jmenoserveru:10.20.30.40"
            hromadadlasichparametru....
    

    pro samotny docker parametr:
    --add-host [Hostname]:[IPAddress]
    
    MARTEN
    MARTEN --- ---
    SPACEANGEL: moznosti by bylo vic. docke ma virtualni sitovku, lze se tedy pripojovat pres ip hosta (v configu daemona), nebo pridat additional hosts a delat to pak pres name.
    pripadne by mohlo jit zmenit network na host.
    nebo asi skoro nejlepe rozbehnout mysql taky v dockeru. kdyz uz v nem bezi zbytek, pro neco mit mimo nej.
    SH_PANDA
    SH_PANDA --- ---
    SPACEANGEL: asi mam lepsi google fu. Nezkousel jsem, ale tohle vypada jako to co hledas https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248
    SPACEANGEL
    SPACEANGEL --- ---
    ahoj, debilni dotaz, ale je mozny nejakej port v kontejneru presmerovat ven na hosta (proste obracene)?

    Konkretni situace: na hostitelskem pocitaci bezi mysql, a nekolik kontejneru s php. A me jde o to, aby skripty v tom kontejneru proste se pripojovali na localhost:1234 (cislo portu libivolne) a to bylo protunelovany na 3306 na tom hostilteskem.

    Jo, zkousel jsem googlit, ale moc jsem toho nevygooglil a jsem z toho takovej nemoudrej :)
    MISO
    MISO --- ---
    JON: ahoj, je to skutocne tak, jak vravis, vlastnik musi byt nastaveny na root:root. Skusal som i ine distra, tam sa to chovalo rovnako, tzn. nefungovalo. Dakujem tebe i ostatnym za vas cas.

    Riesenie pre docker compose je vlastny Dockerfile, kde sa spravne nastavia permissions.
    
    FROM alpine:latest
    COPY --chown=root:root ../etc/crontabs/root /etc/crontabs
    ENTRYPOINT crond -f -L /var/log/crond.log
    
    JON
    JON --- ---
    MISO:
    tl;dr; zkontrolovat ls -la /etc/crontabs/root uvnitr kontejneru, jestli patri rootovi a jestli ma prava 644

    Jak jsem si s tim hral:

    dovolil jsem si zmenit command v docker-compose na
    command: crond -f -d0
    abych pro cronlog nemusel lezt do kontejneru a logovalo to vic

    takhle vypadaj crontabs v cistym alpinu
    
    / # ls -la /etc/crontabs/root 
    -rw-------    1 root     root           318 Nov  5 21:58 /etc/crontabs/root
    


    takhle vypada obsah crontabu s namountovanym volume z docker-compose.yml (pote co jsem souboru ./etc/crontabs/root na host machine zmenil opravneni na 644 - na to je cron haklivej)
    
    / # ls -la /etc/crontabs/root
    -rw-r--r--    1 1000     1000            41 Nov  5 22:03 /etc/crontabs/root
    

    takze problem bude v tom, ze se do kontejneru neprevedl majitel souboru jako root, takze ho cron vyignoruje

    Kdyz jsem pak uvnitr kontejneru smazal /etc/crontabs/root a vytvoril si novej s tvym obsahem, tak zapisuje.
    Kdyz jsem na host machine chownul ./etc/crontabs/root na root a pak spustil docker-compose up, tak to zapisovalo.
    Kdyz jsem chownul v kontejneru /etc/crontabs/root na root pred prvnim wakeupem cronu, tak to zapisovalo.
    ALE! Kdyz jsem chownul v kontejneru /etc/crontabs/root na root az po prvnim wakupu cronu, tak uz si ho pamatoval jako vyignorovanej a nic neprobehlo. To je ale zdokumentovana vlastnost (nekterych) cronu.
    MISO
    MISO --- ---
    JON, MARTEN: cron bezi pod rootom, aj to echo som uz skusal :-/ skuste si to spustit, skutocne by mali stacit tie 2 subory. Subor z /etc/crontabs/root sa nalinkuje do /var/spool/cron, crontab -l vypise spravne nastavenie, len to proste neseje :)

    # ps aux
    PID   USER     TIME  COMMAND
        1 root      0:00 crond -f -L /var/log/crond.log
        6 root      0:00 sh
       18 root      0:00 ps aux
    
    MARTEN
    MARTEN --- ---
    v base containerech zadny cron vetsinou nebezi. takze bych kouknul, jestli tam je, dost bych se divil
    JON
    JON --- ---
    MISO: zkusil bych misto nejakyho commandu jen echo "prdel" >> /date.txt
    a problem muze byt v tom, ze cron nebude mit prava zapisu skoro nikam. Tak bych to daval do /pokus/date,txt a pripadne tomu /pokus menil prava.
    MISO
    MISO --- ---
    DANIELSOFT: diky za tip, bohuzial to nepomohlo :-/ skor asi nahradim distro alpine za nieco ine

    
    / # crontab -l
    * * * * * /bin/date >> /date.txt
    
    Kliknutím sem můžete změnit nastavení reklam