 The other day recently I was I was reading a blog. It was on the OpenShift blog Maria Shulig and Kubernetes engineer. He said something like it's almost become boring to say that Kubernetes has become boring Which is kind of interesting to hear that quote because I use Kubernetes and I don't find it boring at all So when we talk about Kubernetes We find that there is different type of users of the platform There is developers With developers I mean those developers that create applications that run on the platform Business application developers developers that work out usually customers that have Kubernetes clusters up and running they create value business applications They don't know much about the platform itself. In fact, they even don't care about the platform itself where Where their applications are running? It's not a problem for them. The thing is that they care about the code that they are creating for those applications There is a second type of users these guys operation guys They don't really care that much about the applications themselves. What they care about is how the applications are running on the clusters They need to know they need to care that the application is up and running always if there is a problem They will need to solve the problem if there is a problem specific problem with the application They probably will call the application developers team to help them out with why the application is not working but usually they will make they will take care of Everything until they figure out the problem is by the application So if if something happens with the application whether it needs more memory CPU this kind of stuff This will be the guys that deal with Kubernetes applications these guys They know a lot probably and not a lot about Kubernetes. They understand how Kubernetes resource descriptor works There's all these jambles files that Kubernetes brings to our life But they don't know about probably Java development or the application itself and then there is a third type of users which I Called the Kubernetes ecosystem engineers These guys they are developers Because they create Kubernetes or tools around the Kubernetes ecosystem. They develop applications, but they develop applications not usually not that will run on the Kubernetes cluster or If they will run on the Kubernetes cluster will be part of the inner working of the current this cluster But they are not The other type of developers and there is a huge disconnect. There is a huge difference between what ones Developers one developers need an understanding of the platform from the different the other type of developers So I think that these Kubernetes ecosystem engineers. They are like logis that Float over the air that they think they know anything that any user from Kubernetes any Kubernetes user will need Because they think they understand every component as user what they are doing is they are providing the tools for those Kubernetes users, but those tools that they are producing. They are biased Because how they work Okay, so I think that there is a huge disconnect from the tools that these guys are producing To the tools that the other guys the developers need there is a huge disconnect Sometimes as a developer even though there is a disconnect because we are only given with some tools We eventually need to learn some of those so in this talk I'm gonna talk a little bit about What is the process of developing applications on Kubernetes platforms? Some of the tools that we are given some of the pros and cons of those tools how they how they can and Enhanced our productivity as developers And I will give at the end some conclusions about how things should evolve eventually hopefully and those Kubernetes ecosystem engineers should take note and Make some changes into what they are giving us by the way. I'm my name is Jorge Morales I come from Spain. I used to be a red hat open sheet the developer advocate not anymore As you so maybe in the interest light. I went to the other side to the dark side. So I work for VMware right now That's why I don't focus on open shift. I don't say anything about open shift. I'm sorry I know this is a red hat basically conference. So Before we start with them or as we speak through what developers need In the develop whenever Comes to developing applications. I use a triangle model to illustrate three different concepts angles of things that are important to Developing applications, but before we start with that with the triangle Let's go through some definitions. So we can set the ground rules about What I say when we talk about applications first one first definition has to be an application What do we consider an application if I ask it's one of you? Probably will give me a different definition of what application is how do you understand how do you? identify what our application is if we're looking to some applications we can start with One single process binary running in isolation all the logic is built into that banner So this is an application. Of course, it's an application It's what we used to call a monolith monolithic applications. Sometimes these monolithic applications are not just one single binary But multiple binaries, but they are so bind together so Cohesively developed that they cannot work in isolation. So These two components are also an application or they can be see as two different applications depends on it's an everyone If we use storage if we use a database We would consider that the database is also part of your application when you give when you say somebody hey install my applications Do you want him to have that database available? Or if it has multiple different components multiple different databases Includes external services. Is that also part of your application? Will you consider that part of your application? And when you go into the microservices work, there is a huge myriad of different services that decompose into individual individual functionality Will you call it's an every microservice an application by itself? Or will you call all of those together an application by itself depends? And what about when we go going to functions are the functions part of your application if my application requires a function to run Is it part should I be also? Considering it's part so to me a definition of application is Any software component or a group of components that is designed for the end user? And what I mean with this It's four things it is complete It is a fully functional that means that whatever I consider my application it needs to run If it requires something else, then I think that something is missing so I Need something more to consider my application. It does have to have version so When I work on an application, I will probably work on it evolve my application Provide more functionality. I need to be able to identify those multiple different versions And this is important because at the end of the day if I identify my application in some way I want to have a version number for my complete application whether that application Internal is using different components and will have different versioning numbers. That's okay But the whole we need to have also a versioning number There can be multiple instances of my application running With different configuration why because I might need to install my application multiple times Maybe in different environments, maybe my laptop multiple applications for doing different things For example, I might have Email but email I might have it with different accounts. So that is the same application configure with different configuration That's something that is requiring my opinion for to consider a whole application And then the last thing is that it can be easily installed so if I consider my application to be this specific set of components and Configuration I need to be I need to have a way to have that easily installed and running if it's impossible to install then That to me, that's another application second definition that I will Like to introduce to you so we can set the ground rules Logical versus physical deployment what I understand by logical view of an application is how those different components that we have been talking about They relate to each other how if there is two components how they will interact Whether the communication will happen through HTTP the protocol that will use how they will connect if it requires maybe storage to save some files How it will work But then there is a different View of your application, which is the physical view, which is how your application will be deployed Into the platform who will be deployed how is Set up, okay, whether it will require specific type of storage whether it would require more or less memory This kind of stuff how if they will be in containers or in BMS that is the physical view So when we talk about developers, I think that we usually care about the logical view of an application operation guys usually care more about The physical view of the application how things are deployed and then the third concept that I want to introduce before we get into the into the talk is What I see as the Kubernetes application physical view Kubernetes is based on containers. So that means that your application your source code will be running as container images So your application will be a set of images might be one might be multiple if you have multiple components Each component might be at one single one and one image Those components will be related and will be deployed in a specific way so How your components How your containers will be deployed they are defined in Kubernetes via resource descriptors Deployment state full set all those kind of component as things that developers will usually don't care Those are also part of the physical view And then the third thing is that configuration which Makes it different from deployment to deployment from environment to it to environment So if I I might have a set of container images with a set of resource descriptors That I mean I may want to apply to different environments or maybe in the same environment with different configuration So eventually what they make what it makes it different is the environment configuration If you go back to my definition to application, there was the possibility to create multiple instances with different configuration This is part of your application Okay, so let's start with the triangle of Kubernetes application development Things First one application definition How do we define an application in Kubernetes? Okay, some time ago. Well Kubernetes is being here for more than four years for men for some years There was no way to define our application initially Somebody after some time. He said let's add a label to your Deployment same app equals whatever and it will say this is my application But that was enough. So the Kubernetes community they came up with a bright idea of saying Let's expand those labels Not to be just up equals whatever the name of your application will be because that will not be sufficient so they are standardizing they They create a recommendation of application labor levels that they are defined in the current as documentation So whenever you create your application You should provide all these levels to your labels to your to your descriptors and Not to your this when I say to your descriptors I mean to each and every descriptor that means that if you are deploying what you consider an application which is Which is maybe a let's say a simple application micro services application in Kubernetes That will be the physical deployment will be the service the ingress The deployment and all of those so you need to add all of these labels to all those services So you can understand How they are related but this is a recommendation and this means that it is up to you Whether you stick to this or not and it's it up to the tool creators Those covenants ecosystem engineers to give us the tooling to have this in place and enforce this some way There was an extension to this There is a sick applications the sick is a special interest group where all some Covenants engineers ecosystem engineers they get together and they talk about a specific topic So there is there was there is a secret special interest group for applications see guys And those guys they met together and they say hey now that we have the labels Let's maybe create an abstraction that will simplify the usage of those labels by the developers So they created an additional what is called a CRD Custom resource definition, which is an extension to covenants that defines provides a new descriptor to Covernet the same. Hey my application is this so you now have an an additional definition So here you can see that you have a covenettes with some application with some name, but then here Resources that will be added to your application This relies on the application labels that we have seen in the previous slide So that means that you still need to have all those labels you need to make them working This was a mess and nobody uses this There is a there is another way different way of defining applications, which is has become more popular by the operators that and we had them Promotes which is defining an application as a custom CRD the same way as before there was a generic Custom CRD for applications now what we can have is a specific Custom CRD for your application. So if you consider your application to be an hcd cluster No matter what will be the physical and the logical view you can define here easily That you need a cluster with the configuration that you will require and under the hood Everything that will be required for the logical and the physical view would happen So for you this is For users. This is really good way of describing applications, but the problem is that these CRDs require a controller behind the scenes to make to translate from this Specific definition of your application to the real physical view of your application So deploying everything that that will require for your application to be running on the cluster that custom controller Is something that is not really easy to do And You will not expect any developer to create any of this So this is really used mostly for common of the shelf software So if you go if you want to use software that somebody is providing an ISP so a database Clustering or messaging technology or CICD tooling you may be able to deploy that software out of the box. Yeah, this way custom CRD So this is nice and this the scriptors Can sometimes be integrated with your logic if your application is using an app If your application is using a database, you can have this descriptors part of your application definition another Effort to standardize or to come with an application definition application Into Kubernetes world is Sinab Sinab is container native application bundles Container container native application bundles is a specification for packaging distributed applications This is this was initiated by Docker and Microsoft and the specification what it does is it says hey If you look into what I was telling before about the physical view the images the descriptors and the configuration If that is my application and I want to provide an easy way for somebody to install it And I want when I have applications. I might be I might want to distribute my applications to people Why not bundle all of that all of that together into one single File which is the bundle itself that has the images has the descriptors has the configuration and it's also Overwriteable so you whenever you deploy it whenever you create an instance of that bundle you can say hey But for me use this other configuration so right now You can you have one way of Of identifying or seeing an application But this is this is again really easy for come out of the self applications But whenever it comes to creating applications using Sinab it's not a DC the tooling is not really mature and the problem is that Microsoft and Docker are the only companies working in in Sinab so right now It's not really standard And then the last therefore that I know of which is interesting is the OAM all Open application model the open application model is a It's an abstract definition to create and to define applications again But it's OAM is not specific to current assistant Application modeling that can be used for anything any type of applications no matter where they run if they are on Running on VMs or any other thing One nice thing about OAM is that it understands that usually there is three different type of people involved Into the application process the application developers Which creates the application so they will be focusing on providing only the application definition itself The application operations which says hey your application the application Image that somebody has created will be deployed in this way And with this configuration so these guys will will or in this in this model these are the guys responsible for Some different configuration by instance of your application and then the infra guys The infra guys what they are doing is providing capabilities to the platform So if we look into an example implement the example implementation for Kubernetes, which is called Ruder This is the implementation of the open application model. There is two different set of files This is the developer focus file Components imagine and this is then the application operations specific file. So in this file The developer of what it says is hey, I have a workload type Whether I wanted to run it as a single server single tone server is just one single instance of my application or Maybe a server a regular server So there is a set of Workload types defined in the specification and you can customize that means that you can create your own topology of your applications And then you provide the parameterization that will have your application So this is like creating a custom definition for your application, but in a generic way then the application operations guys what we'll do is define How that application will be deployed so the configuration that the component Schematic will have whenever it gets deployed. So developers they do these files Operations guys, they do these files. There is a separation of concerns which at the end is nice Okay, and depending on the capabilities that you have on the platform. You may be able to to Configure or to provide different capabilities to the platform second Angle on the triangle of application Kubernetes application development application development stages What I mean with this is when we develop applications We go through different cycle of things typically to make them up so as developers we authored the code so we create the application itself No JS pearl Python Java, of course then Incompetence work we create some descriptors deployment descriptors. Sadly, we have to do them because there is no way No easy way for something to generate them for us Packaging that means that our application may be the application plus the descriptors need to be bundled So we look into bundled into packaging Can be just creating the Docker file or can be creating a Cineponder and Then deployment deployment is applying that those definitions plus the application into the cluster So these are the different stages once you do go through all this cycle You have the application and you repeat that through the cycle of your application development You change some you might change one of these you may touch one or one stage or not But these are the four or five stages that you typically will go through when you are creating application Okay, there is a set of tools that help us With all those stages There is many many more These ones are the ones that I find somehow useful. They provide different functionality on this on the different stages so if we look into This third first thing they are just Helpers When it comes to development and I will I will show them because I use them on the UI and you will see them in the UI This once they help on the They can help on the deployment phase on the packaging phase This one's help on the packaging phase creating your applications on the authoring phase build packs and source to image They help you in the authoring phase So I'm going to do some demos of some of them But then I will get into more details of one of them, which I really find pretty useful Which is this one and K14s Coordinate as tools and You will you'll see why I like it Okay, I Need to sit for one So initially I'm not going to show many of this because I have more demos at the end for the third angle of them Can you see my screen? Well, you need to be bigger Yes, okay So one thing that you can see here is I have Mini cube installed mini cube is a local Local Kubernetes cluster running on my on my laptop. This is really handy for development although it's not really targeted for developers, but Developers will will want you to have more The name of the cluster that I'm connected and the namespace that I'm connected Why because I think this is really important to understand as a user Where you are doing your stuff? Why because most of the tools works in context that means that they will do things To whichever cluster and whichever name space you are connected So it is wise you typically to know to which cluster and to which name space you are connected Okay So let's start with Jim Jim is a go to Jim is a tool that It's mainly for for developer for Java developers Well, it's only for Java developers But it has a has a nice concept in it This one there is this It integrates with Maven with gradle So that you can build your application images on your laptop the thing is your containers are Docker files are Docker images. So that means that you require Docker Why would I require Docker if eventually at the end of the day what really is a Docker image? It's a tariff one So Jim what it does is It creates a Docker image without having Docker in your laptop. So I don't need to have Docker So that means that I can easily plug this into any into any operating system into any laptop I don't require Docker Docker. It's up your CPU on memory But I still can as a developer as a Java developer. I can still build images So let's just build one image and it integrates into your into your Maven developer workflow so I can do Maven compile Build so here we can see the output. What happened is I compile my application and then It used a Docker file that I have Packaging and pushed it into a race team without interacting with Docker Which is pretty neat Another thing that does Jim which is quite interesting is that it can whenever it comes to create the Docker layers, which is how Your stuff will be put into the container images. It has some intelligence So it will try to create the layers in the most optimal way. So your application dependencies are put into one layer and Then your application code is put into a different layer. So when you change the code The only layer that it will change is the last layer So the pushes to the registry will be pretty fast. The bills will be pretty fast And then the pushes will also be minimal in size So this is really nice tool whenever it comes to integrate or to to work with with Java and then I'm gonna show you help which is a very popular framework, which is I'm gonna create a name in space So again, because I won't I don't want as a developer I don't want to miss to mix everything into one single name space into one single project because that eventually If I try to deploy similar stuff, they might there might be Interferences one thing that I do is I use different namespaces to it's an every application or it's an every application I'm trying that I'm that I'm doing so How it's a CCS. Well, let's let's look into the hand Definition this is the hand what it does is provide a packaging and a template deformer So when you have an application defined with all the descriptors, what you can do is make it parametrizable So you can provide different configuration for every time that you want to instantiate that application in the cluster It's not used in the build process in the image authoring It's only it's only used on the deployment and not on the deployment phase. So Whenever you are deploying your application, you can deploy it with them. There is a there is a This is one of the most common ways of packaging your application. Although. I think it's pretty weak Although the new release is better than the previous one home streets is much better But it's really weak because it uses text templating. So that means that if I have a type on my on my template I will not know a hem will not know why It's not working. It will just tell me hey, I couldn't do anything But I don't I don't give you a hint of where the problem is. So let's look into for example, I have a chart Let's do for example one of these typos if I do him install Let's give it an application And let's say that I want to deploy chart that is based here what I get is hey This is not allowed, but it's giving me line 29 of something that I don't even know Deployment as you can see there is this line 23. There is no 29 lines. So it's not really helpful so If I undo the typo, I can just install my application And it installed what did install? I don't know how did install? I don't know if it's running I don't know it just allowed me to Install stuff as you can see in the template in language you can provide configuration. So I could say and install whatever minus set let's say service for Or replicas if I try to do this It will tell me hey You already have an application the name is already in use So it it also doesn't allow me to update my application if I have it running. So if I change the value You have to uninstall your application and install it again, so I can do Hey, I'm installing hello world and then Install it with replica account of two and then I will succeed as you guys see This has become really popular because it was a way of packaging your applications, but it's not really powerful So sorry as I said, I'm not an open shift anymore, so I don't know but yes, it will work Because I read the books and it's they said that or the twit and they said that it will work Although I think it's a poor decision to go with him I mean not a poor decision because there is a lot of charts, but I think that as tooling is not the best tooling So go in continue with my presentation. This is the tool that I like K14s this tools is a set of different tools that provide Simple commands that are composable What this means for simple commands is that there is one command for each and every specific task that you have on the Development stages, so there is a tool for templating and overlaying. There is a tool for building. There is a tool for deploying So you can do something like deploy my application With a simple command let's Let's do that Okay, so let's go to K14s and I have Here I have a Have a deployment a regular deployment This is this is just the definitions a coordinate display in definitions So I would typically do something like code cube CTL apply minus F and this five when I do that It gets applied. I don't know what's happening. I don't know I Only get a as a result I only get an indication of the resources that have been created whether there is something that's changing How they are creating it doesn't give me the option to say hey This is really what I want to do so with with K up with K up I can do K up deploy You have to give it a name. Okay, so let's call it hello world and I will say minus F boom It told me it connected to the cluster. It said hey, you're gonna try to deploy these resources This is a player main business service and I'm gonna update it because they don't they don't exist Okay You want to go with them or not? I can say yes. No, okay. Let's deploy But we're in the namespace home and because as I said because we're using the same names I'm using the same example for all the all of them I had a I run into problems. So K create namespace K14S K namespace K14S And this this thing that I did which is like the namespace this this one is a plug-in. This is not built into the QCTL Command line by default Because they don't care about developers. This is something that we do quite often But they are fine with minus N for every single command that they execute. So let's Let's do the same Okay, so now I'm deploying my application and everything It's done by default it will wait for your application to be deployed which is quite nice because When it's deploying it's giving you information of how things are Progressing and if something failed you get a you get an indication of how it failed There is a couple of nice commands To K app Which gives you a lot of interesting information. So this one It's that inspect of my application. So inspect of my application This information is quite useful for us to understand as you see And then there is also of course Kapp list that will give you a list of applications that you have So under the hood what it does Kapp is it adds some annotations and to your deployments But those annotations are quite handy for us playing mortals mere mortals Whenever we are using the the platform that we don't understand Okay So as I said, these are composable tools so we can have a tool that will do Templating that come the template that you create can be fed into the deployment So I can I can process my template and the result can be fed into the application deployment So that tool is called white it white it in In this case what I have is the same deployment defined But now he's using a template in language and it's not a poor template in language like the one used in Helm It is a stronger Templating language that it understands because it uses object templating instead of text templating so at the end what I'm doing is just externalizing some values to a To a file so I have two different files the one with the configuration and the one with the template so I can materialize that So let me copy the commands so we can go a little bit fast so I'm going to execute this command which What it does is it process the template so what I'm doing here is I'm processing the template As it is I'm feeding to the to Kapp I Tell me the changes, okay, because I didn't change anything. I'm using just the same template which is equivalent There is no changes. So there is nothing to be applied to a planet. But what if I Say let's use a Let's use a configuration change. So let's try to instantiate your application But this time I will give to the ingress route a different value now let's Make this bigger One nice thing is that because I provided these Changes is that any hey, this is the minus is what is what's in the cluster This is what you are what you are going to be applied And then it's gonna change only these resource despite you have you are giving me all of them The only one that's gonna change is this one Where you want to proceed up now and then there is giving me an error mostly because Because I'm chaining commands and is expecting the answer to this command as a standard in No, it's giving error. So in order to apply this command I will need to provide the minus one to this one and now I have I have my my chains in the cluster Okay But not only that you can also have overlays What are overlays overlays is that you can have different configuration? Even though you have the same Definitions you don't want to change and to provide all of the same Whole configuration files again and again what I what you do with our list is this is the set of my main configuration And I just want you to change one specific part of that configuration. That's another way. So with this overlay What I'm saying is whenever you deploy this just change in the deployment change the replicas to three So if I if I apply this overlay It will give me it will give me the changes that are happening It will tell me two changes because we change the ingress Because it's reverting back to the previous body that I have I'm telling me also the replicas because I'm changing the replicas with the overlay and then We can even customize this or change this more to building images We developers usually build the images and we need to push them into Registries and what not and use the image references and we need to change the configuration files of the converted resources with descriptors. So K build Which is right here in the middle It's a tool that will Change the images That you have in deployment descriptors based on a set of rules which are really easy to find so you can say hey Whenever you find my descriptor with Let's say this image change it with it this other one And by the way if this other one happens to be something that I want to be locally just build it locally So let's go with an example of that. I'm gonna do the full example Because we're getting out of time what it is it what it did is K app So this is the command that I executed what it did is created YTT created the definition of the Descriptors and then it provided those definitions to K build to build the images and then Whenever those images and those descriptors with the images and everything was was provided it deployed that into a cluster And I'm using in this example. I'm using an additional Additional Descriptors to additional descriptors one of them is telling the sources. So what it's saying is hey, whenever you find An image which is based on Octeto hello world go long yes Think that it isn't my path in that path. So do a docker build using that as a context And it will create an image and that image that it will create then With this other fine what it does is Whenever you find that image Push it to the cluster to whatever a repository you have defined in the cluster, which I have defined in the value jammin I have my local registry of my meaning in my meaning here So what it did is it built the image it push it to my internal docker registry and it created the deployment And the good thing if we look into that into the into the differences that it creates is that it annotates the descriptor with a The image that you were trying to do Well the image that you are gonna use is this one the path that is going to use for building is this other one And that's the repository that it's using so We're looking to the image that it uses is it uses this image. Let me copy the right command because I think So there is an option idea idea in the demo there is an option that it tells you hey whenever you build this image Push it to my internal registry So internal race the image will be pushed into internal registry whenever you see Whenever you see this command You should oh, it's it is being pushed It is pushed to internal race Okay So this these tools they are quite handy for for developers Let's move on the third the third angle of the application development phases or the application development Inner loop versus outer loop we developers we know that there is what we usually do it's called the inner loop So it's we build we code our application We build it and we test it locally usually multiple times every day whenever we're ready for that what we do is we push that code into Gear repository and then what it happens is that there is an outer loop what we usually called you Continuous integration where that's automated that's real continuous integration Somebody doing the same process of delivering or deploying your application into multiple environments. That's the outer loop In the outer loop developers are not usually not involved in the inner loop We are involved. We are totally involved. So this is the cycle that we will so one thing that we want is This loop really When we do it in our laptop, it's really fast That means that we call we build we test multiple times is really easy when it comes to containers There is additional steps that happen in the inner loop by building images pushing to registries pulling from registries And that is really can be really slow. So what we developers we want is the control-safe functionality ready to test in the Kubernetes clusters. So We want developers want a fast inner loop How is this implemented so usually there is there is tools that what they do is they have a deployment or you do that your deployment on the cluster and then It synchronizes your local file system with the with the with the pods that are running on the cluster in many different ways Every tool does it differently and every time you change something it will it might rebuild your application Maybe through a through a building your image or not building the image that depends on it so there is a set of tools that Serve the purpose of the inner loop of techno garden tilt scaffold of space an open ship Although that is right in the corner mostly because it's offensive a specific Hopefully, you know someday it will not be offensive a specific, but right now only worse on open ship. So it's not really So being conscious how much time do I have? Five minutes. Okay. I had demos for all of these tools, but I will I will just do Couple of them. Let's show their space, which is one of that. I like it a lot. I will leave the piano for later No, yes, there is a later outside The space so here in the space I have again the same application and these tools what they do is they define They define Specific script or so whether that's a depth space till the garden although they have a specific descriptor that that says Hey, how the tool will interact how I will deploy things What should I do the ports that I should put forward? so here we can do just There was space Because that space is specific you need to create the name of space. I'm gonna use that name of space When you do that space deploy What is what it happens is that it will deploy your application? So if you don't specify anything in the script or it will use an internally generated help chart But you can use keep CTL commands or plain component as descriptors You can use a scaffold you can use and you can use a customized you can use many different ways to deploy So the tool is really flexible. That's why one of the things that I like it and then once you have done that It gives you some of the commands that you will use as a user So hey, you want to connect to your application and just deploy it. I want to connect it. How do I do it? Okay, it gives you Interactive way as you to how you want to connect. I want to connect beyond ingress. Okay, so let's say Dev space test And it's creating dangerous and it's connecting to my application So it's doing a lot of stuff that I shouldn't need to do because as a developer I don't know how to create an ingress most likely. So this kind of stuff is taking away from you and another thing That it does which is really useful Yes, that space open which Which is configuring your environment for local development. So it's doing a lot of stuff is I'm opening my application This time is using port forwarding for development, but the good thing is I have my my application here I can just go to hello world If I control save We see that automatically this Have built the application and started the application and it was pretty fast. I have my application And you get you you saw how long did it take to do all of that? It was Instantly, so this is this is the kind of workflow that developers live whenever they are interacting and creating applications on I'm gonna show you The other one tilt Yeah tilt Which provides similar workflow but It does something more which is It has a graphical UI as well to help you with it So everything that happens you get an indication in a graphical view You can access your your service and everything and in fact Well garden it does also similar stuff. It does provide a UI so you can also configure it Every time you save it will Rebuild and redeploy your application. It has a UI and it's really nice So my conclusions are There is simple tools and power tools power tools does a lot of things simple tools That's just one specific task but sometimes using simple tools is really nice to get started to understand what is going on and The fact that covenanted the covenants tools does help with training those simple tools is really useful because at the end you get the power tools functionality with That simple problem with simple tools is our power tools is that sometimes there is so many commands So many configurations that they are really difficult to understand Do we want we do to happen here? Well, sometimes we are developers. We don't care about the platform Yes, we do want to do but we also some of the people that uses the tools which are Will be using them they want to understand what's going on So it's it's usually it's good to select a set of tools that allows you to let you understand What's going on but at the same day at the same time it gives you an abstraction of how they works consistency as a future we need to think that Whenever we create applications they go through the inner loop and then the outer loop So it will be ideal to have the same tools that can be used for the inner loop and the outer loop So we decide to be the plain application with K app And with descriptors or use YTT it will be awesome whenever we create our workflow of developing applications In in our in our company to use the same tools throughout the whole chain Because then it will be easier for us to manage and to know what's going on and to finish There is a quote from the future that says remember the quote initially that's become boring to say covenants is boring So my quote is it's almost become boring to say that developing applications of covenants has become easy Which is not today. Okay with that there is a link to the slides to the repos and There is no time for Q&A. Thank you very much