 А, ще въроби да отрием, няма да отрием, че. Спасибо, така ще и държем. Димитра, я е работащ за SAP, Криви от Плимути Афс проект, И ми говорим ово е диплоемен с Куалфаундри, Кубонетес и търсното, както ще да сделте. И да си старат с къщата Question. Какво диплоеме нашата Куалфаундри? И ответ е, път, някъв. Вървно, като е с TF Push. TF Push е много добре. У някъв е сегрят му интерфейс. Онната интерфейсът, да държа много това по-з replacing. Она民я за всекъща Maya, а основната е добра игра. Ли изсвайда в исталната земля, We don't only manage our applications ... ... за това мови тръпси късвето късвето на късвете и за късвете на късвете ... ... за да му много екога ведни вълни тази и т.д. Квайлс фондиевар на късвете са си си е фигурен. Късвие се надоле за тази тази. Како усе? Сързваме да имаме пароветето. Къде е бързовата средио, които си възглежем лингвич на возниAngl.ask,ulously, python, ruby ... ...нечем да изчинете контейнер, пиплайн и настото се е работи... ...ед пълното сързваме за колко прожекът. Ето път да изглежrie, но проще е, за нещо от мен за пързак... трябва да metalsи. Каквото тие слaringи тя ги. За ги в комплексите на продуктата, големния са, цвей някак снижение, къв някакто е дополнен, тие са обидвали ги в някакъв, дълген, е hinter някакъв, както са е възненит и сега да ги отрият тези неща и възненита, и възнеш за да録 tumbler на дtesilence и вървя, който се е долегат Hokage, и в този за сакл鏡ера на всекъс. И, възниквам, така много байър, плейткод, по-днато на мен е не е много фан. И, че, може да я пързем, може да я пързем обето на това. Така, че можем да е, не какъв скриптинг, какъв да можем деклари нашите диплоидови. Възниквам императивно, като това е да запрещам, както можем деклари в документ, както си се пързем на декоративно, в форума тези, в форма статиката. And just then give that decoration to a tooling which knows how to create all that stuff. So this allows us to track how our application is evolving, to very easily add additional components of our solution, to even place this in a source control and see the history alongside its versions. И да бъде на CF Push, така има да са скъвърт на това. Можете да использувате CF Manifest, ако да пътнете, и CF Manifest са пътнастите. Върху има много апликът, много ръвкът. Върху има сервисбайнни. Върху има всички апликът, атрибюти, които изглежда как стак, мемори, инстанции, т. е. for some the story might end here, but I want to, with you now to explore in more depth what it would mean to have a decorative solution, a decorative model for the whole solution on a platform, including all those additional things we had to do imperatively like, на Manager, д.d.n.t. Зато medical services, and we will do so in the context of an example, realistic example application. So here we have a simple application with three processes consuming two backing services starting from the bottom, we have a DB application, its responsibility is solid to initialize and take care of the database like tables, initial content, update those entities, sequences etc. Това е първо вълтаватората да се най creature, а вълтаватората... Продължаватората е първо вълтаватората, в nossoтоřи върхи она в Джава, са е fazed по одч буда и е науга, която е подължаватората, това да отмечи менegyment, пусар, сколпт, и това е на твържата. А ViIn наliningта име уймалiva4. ПSurvif is delegating calls което е по нашатаã коза. Аймалата е с serving-thumbs, STATIC HTML и Javascript. в това, които е Dartmouth и да изб voiced the server. Выберите на пътът е като сега, като сега запрещат за мутиапс проект. В вашето міцчел в мутиапс, дългаме да позборят пеймдите и дългаме да позбори клат фандария тази работEE Тази работEE като имат към към мутиапс модел и тocто го изплеваме за мутиапс проект от по-към? е разължава, консистен, това е върху и по-същевен еплът. Това е да върху. Като се го развернете, както се изкъпва да изкъпва. Продавам зад моя идея. Пога да бъдва са. И това е. Така, да изкъпвам са и изкъпвам от скреча. Продавам новата файла. Това е са са сао�ската за моята епликация. Продавам новата файла. А здесь we cull MTAdT. Let's start by saying what the scheme of that file is. The language version it will be using. It will be using scheme version 3, as the language has somewhat evolved already, it's kind of mature. While we're talking about versions, let's now set a version to our own application. So let's pick some initial version. can name our solution, let's name a product catalog, by the way, the business application where we will be deploying deploys business catalog and you can review the product catalog, you can add and review products there, but that's not matter for the talk. Now, let's start declaring the components of our solution, let's start with the backings services, usually those are created first and then consumed by the work a quote, Така, в контактите на МTA-то, беккинг сервисите е моделите с ресурсите и можем да начнем с генерична мейнедсервис. Така, къде ми декларим ресурсите на тъй мейнедсервис, това означа, че диплората се обрежда и менеджа сервисто на това. Когато това параметерите, можем да има да е къде мейнедсервато. Така, можем да кажем, че аз како диплората на сервисата е хана, СEP хана дейтабейс. И плана ще да бе в хазата с ГРА, във това да бе във диплората на сервисата. И във диплората, ще имам има има игора на сервисата. Това е трансляторен сервисите, аз имам има има има има. Това е, че, няма да, reproduct catalog.gb. Това е диплората на беккинг сервисата. като деклър. Така, пързем където. Това е уА. Я сперва някакъде за да си къснипет. Това е сега менеджен сервис от аксесс-УА, от плана апликация. В тази време, че е много ново. В тази време, в тази време, ми хотим да даде криезни конфигурации. Те конфигурации, които паса в сервис Брокер, където криезне сервисни инстанции. Както таки конфигурации може да ги държат, и като парната е в тази време, това е много ново. Както паса в сервис Брокер, където паса в аксесс-УА. Модиса не е много ново. И какво има държението на който се изглубва държението? За да се навсегда изглубва, отлъпим така, и si сега дължението на който на му така има държението на който се изглубва, сега и пакда. Ленина който се изглубва му в трябва сега. В escalата Okay, Let's start with the backend application, from scratch. Here is one module. This is the generic structure of the module. It has a name. It should be translated to the application's name. The type is an application matching the quad-hander. Let's name the category of the startup� . В циANO. В тези патт, в която ме să повече д{\n- са гривиеждане за обтеківки на цирките. Не оцениваме с цирките на срвякота директория. Пропортии Protect. Пропортията stay си изглубями към прикладел страница инваментен на венцията. И за цирките на monu не изглубим. Това сиiszките в това параметъра ...ви нещата има да е организацията на диплора от диплора... ...в nutri heftа, да се избиле, да се разграле... ...кото не е много памер. Ако като е еuuuu развиване, да се има 2 гигабайт по-четко. Това е нова ВИН. Това е consumата на да се откладе на ...печата на диплора... ua and on the product catalog db as backing services and this in cloud foundry would result in bindings between the backing service and application. And in case you are interested you can also pass parameters to that binding here. So the last element of a module is that provides statement. So this is the mechanism by which modules and resources can share configuration, can share some values in order to get linked on deploy time. You notice that there was no service discovery backing service in the picture and that's because there is a basic form of service discovery done upon deployment of the application. So now we can say okay when we deploy that application we want to take its URL and we can get it by a placeholder. Let's say default host and URL and in another module we can consume that value which would be dynamically resolved on deploy time so that applications know where they are and they can talk to each other. So, let's continue with some prepared content in order to spare some time. Here is the product catalog UI and here it says it has dependency to the backend module and here is how an environment variable in that application will be created. It should be a valid environment variable back into URL and it would reference that value from the upper module. Only one module left to declare and this would be the DB module and the special thing about that module is that it doesn't need to run as cloud found replication. As it doesn't need to serve any web request so we can say we don't want to start this application and it should not be managed by the platform as an application. We want no route for that application. What we want is only a cloud found retask to be executed and we can name it, we can say which command it is and we can give additional parameters. And this would basically start our application, it will initialize the database and so we are almost done with the modeling of our solution. Only one thing I want to declare list and this is one additional parameter to the platform so that parameter is to enable parallel deployment. So having that parameter declared, the deployer would basically create all the applications in parallel, which would save some time. Ok, so now we have our description of our application complete. Let's see what we can do with it. And before we jump to just deploying that application with single command, there is one other powerful tool we can use. Actually a whole concept which might change the flow of development with operations and it is to bundle, that's the code. And it is to bundle our, sorry that you don't see that as well. Just a second. Now it should be fine. You can bundle the descriptor, that description with the two applications, with the binaries. So you can get a package which is more or less self sustained, so that package knows how it should be deployed. It could be built once, it could be uploaded to some, for instance, Maven Artifactory, GitHub release page, whatever. It could be used multiple times from there as it is versioned and you know exactly what you are getting. And it could be deployed in multiple foundries across the world. So how we can create such a package? Well, not only via the CFCLI, we have an MTA build tool available. It's also open source on GitHub and again it is a single command. And it will treat that descriptor and it will assemble such an MTA archive. So now we have that MTA archive. Let's look how a deployment should look like. So I have sped up the demo for you as such demos are not so magnificent. It's only a single command doing a lot of stuff. But we can see now that the package is being uploaded, then the descriptor is processed. And now backing services are created. Since they are asynchronous, they are created in parallel. So this saves some additional time too. And afterwards the actual applications get created. You see that the messages there are kind of mixed. That's because the applications are also getting created in parallel and they are staged and started at different times. At the end there is a task executed for the database. So that was it for deployment. And what does such a description of our deployment model, such a deployment brings us. So it brings us management of additional platform entities like service instances, service keys, tasks, brokers, etc. It gives us declarative configurations for such, for creation of search entities. You can deploy as many times you like that package. You always get the same result as the deployers always trying to reach the state declarating descriptor. What else do we have? We have parallel deployment as we just saw. And we have having that description of model, we can do something very interestingly. We can do boogering deployment not at the scale of single application, but at the scale of the whole solution. So we can get that descriptor and spin up the whole stack of our application independently from the currently running one. So it would be properly interlinked together. There would be no crosslinks between the active version and the new version, which is to be deployed. And one is able to test that stack against the productive data. And when you serve the quality, again with a single command, one can just hit resume to the process. The routes will be switched and the auto application decommissioned. And you would have update without any downtime of the whole stack. And last but not least, you can expect reproducible results in varying environments. It doesn't matter if some service instance was created or not, etc. So that wraps it up for Cloud Foundry. Let's see how things look at the land of Kubernetes. So what are the traits of Kubernetes deployment? Do they have the declarative approach implemented? Pretty much out of the box. Kubernetes supports declarative expressions for all of its entities. Is there parallel execution? Well, since all of the platform entities are created asynchronously, more or less, there is a parallel execution. Is there a single command deployment? Well, one can argue that kubectl apply with directory does the same thing. But there is already a member of the community, which is doing this and combining all the descriptors in a single source entity, the helm chart. And that's helm. So what my team did is we made a proof concept how we can port the experience of the MTAs to Kubernetes. And have in mind that this is a PLC and nothing is set in stone. But here is how this would look like. You would get a descriptor of your solution in the language you just saw. And it would be passed to an MTA deployer, as the MTA deployer knows how to speak the language. It would get translated to Kubernetes native entities, with more detail. And then passed to Tior, the backend component of helm, or directly to the API server. From there on, those entities would get persisted and the Kubernetes controllers would take care to asynchronously create them in the platform. So there you would have that solution. And actually, this is how it looks like. This time the demo is not sped up, actually, because it's pretty fast. And to be honest, when you see the success marker at the end, this doesn't mean that everything is created currently. It is still created asynchronously by Kubernetes. Of course, this is subject to change. So, yeah, there it is. Everything happening pretty quickly. So let's see what we had to change in the descriptor of our solution in order to achieve this. So there are a couple of things that changed. First of all, we introduced new types of modules. So there is the same MTA model, but since we are modeling entities for a different platform, we introduced new types. And the developer would say, OK, this is a deployment type, or this is a secret, or anything. There is one thing which we did is we separated the life cycle of the application binaries, the bits, from the descriptor. And we uploaded them basically to our repository. So there is a container image. Hopefully, there are already projects in the community. Thank you, sorry. There are projects in the community which bring the build pack experience to Kubernetes. So things might change. And of course our workloads expected to see the vCAP services. Environment variable containing references to our descriptor. So we include all the data in the descriptor too. So what this resulted in? This resulted in all those Kubernetes entities, including secrets, application configurations, jobs. Remember that CF task which initiated the database in Kubernetes, it would be a job. In pods, deployments managing those pods, and of course ingresses and services for the incoming traffic to the application. So to wrap it up about Kubernetes, we used the same abstract descriptor model. The same application workloads and deployed them on a different platform with different entities. And if I would like to wrap it up for our whole session, my message to you is use declarative deployment. Use CF push when appropriate, use CF deploy where you have the case and do it cross platform. If you'd like to know more about the multi apps project, this QR code would lead you to our homepage. You can find us on github.com and of course you can hit us on swag with any questions you can have. There is time for Q&A, as I see, and if not, there is also the office hours right after the break. So, may I have your questions? Yeah, it makes total sense when you have an MTA built just to have a job in concourse which downloads the MTA and deploys it. And it wouldn't be a very big script because you can basically pack the CF key inside the container just to use it in concourse and just let's say go. Actually we are thinking about implementing a concourse resource. So for instance, if you want a job to produce an MTA package, just to give it to the resource and the resource could deploy it. And this will be much effort. Any more questions? So, if any pop-up from 3.30 to 4.10 will be in the big hall and we will have office hours. Thank you.