През Тъмните векове (т.е. миналата седмица), лъвският дял от логиката на Tilt се основава на ограничението, че има само един контейнер на капсула, за който си струва да се грижим. Това беше контейнерът, от който получихме рестартиране, който наблюдавахме за остарял код и който актуализирахме на място. Ако изпълнявате кода си на повече от един контейнер на под, добре, можехме да актуализираме на живо¹ само първия, защото това беше единственият, който Tilt поддържаше. Всички промени в другите контейнери ще доведат до пълен docker build && kubectl apply.

Но, както каза Бардът: „Има повече работни потоци на небето и на Земята, Хорацио, отколкото сте мечтали в първоначалната ви продуктова спецификация.“ (Или нещо подобно.) И така, разработихме нова функционалност: от Tilt v0.10.0 можете да използвате Актуализация на живо на колкото искате контейнери на под! Тази функция не се промени много на повърхността на Tilt, но включваше куп преструктуриране и пренаписване под капака – трябваше да променим куп вътрешни предположения, за да отчетем няколко пъти на под. Това засегна всичко - от регистрационни файлове ( kubectl get logs podabc -c mycontainer) до проверки на готовността на ресурсите до мониторинг на здравето - но смятаме, че си заслужаваше!

„Ето едно примерно репо“, което можете да вземете за завъртане, въз основа на предпоставката, че може да искате да повторите приложението си и своя домашно валцуван кош едновременно. В този Kubernetes YAML можете да видите, че имаме два различни контейнера, работещи на един под:

apiVersion: apps/v1
kind: Deployment
...
spec:
  ...
    spec:
      containers:
        - name: randword
          image: randword
          ...
        - name: log-ingester
          image: log-ingester

Приложението се нарича randword и всяка секунда регистрира произволна дума във файл. Инструментът за поглъщане на регистрационни файлове изпълнява същия модул като приложението, чете лог файла на приложението чрез споделен том и „поглъща“ регистрационните файлове (тук просто ги отпечатва в stdout).

Tiltfile изглежда прост, защото вероятно е това, което сте очаквали, че можете да пишете през цялото време, чак до момента, в който сте опитали и сте получили грешката: „Tilt поддържа само актуализации на живо за първия контейнер, изграден от Tilt в под.“ Но сега работи!

k8s_yaml('deploy.yaml')

# instructions for how to a. build and b. quickly update the app image
docker_build('randword', '.', dockerfile='Dockerfile.app',
             live_update=[
                 # detect changes to ./app, copy them to the
                 # running container, and restart the app
                 sync('./app', '/app'),
                 run('/restart.sh'),
             ])

# instructions for how to a. build and b. quickly update the sidecar image
docker_build('log-ingester', '.', dockerfile='Dockerfile.sidecar',
             live_update=[
                 # detect changes to ./app, copy them to the
                 # running container, and restart the app
                 sync('./sidecar', '/'),
                 run('/restart.sh'),
             ])

Хакването на вашия кош вече е също толкова бързо, колкото хакването на вашето приложение: направете промяна във вашия редактор и пуф, то работи във вашия клъстер. По дяволите, сега можете да настроите приложението и коша си едновременно и да видите как си взаимодействат! Това е развитие, каквото трябва да бъде.

Какво следва?

Информираността за множество контейнери в един пакет ни настройва за осъзнаване на множество контейнери в множество пакети – оттук ще бъде много по-лесно да внедрим Актуализации на живо на едно изображение в множество пакети. Искате да изпълнявате множество реплики на pod в dev? "Информирай ни"!

Междувременно опитайте тази нова функционалност и се насладете на вятъра в косите си, докато актуализирате всички ваши контейнери със скорост. Както винаги, ако срещнете проблеми или имате случай на употреба, който искате да подкрепим, „свържете се“.

1: Актуализацията на живо е начинът на Tilt за актуализиране на работещ контейнер на място, което ви позволява да заобиколите docker build / docker push / kubectl apply. „Прочетете повече за актуализацията на живо тук“.

Първоначално публикувано на адрес https://blog.tilt.dev на 27 август 2019 г.