 All right. Well, we're ready to start. Hi, everybody. Thank you for having us here today. We're going to be talking about How and why eliminating the gap between development and production is important and how you can use Kubernetes and crossplane to get it started on this So my name is Ramiro Berreyesa. I am a CEO and co-founder of Octero We're a company that builds software for automating the developer experience of your entire organization I am Ash. I am a developer experience engineer at Octero I come from India and I'm also a CNCF ambassador and we are really excited to talk about this topic Which is very close to our hearts and we have spent a lot of time You know thinking about this and talking to multiple people. So let's just start Before we go into dev experience and all of that I just want to set the stage and talk a bit about like Why are we having this conversation now? Like what has changed for us that we want to talk about this The thing is that before we came to this world of microservices We were all like all the applications were monoliths and we were building monoliths and Sure, monoliths are not scalable and they have their whole set of problems But I think it is safe to say like as an individual developer working on a monolith The experience was a lot more simpler than what we are seeing with microservices, right? Because if everything is like one huge thing like it is huge I am not taking the size of one litter But getting the thing up and running is easy like developing on it easy But when you come to microservices, there are so many pieces There are so many individual parts that assembling them together during development Seeing how one part affects the other that all thing complicates the development process and You know tends to lead to a bad development experience if you don't invest into tools which help fix that Next slide So the golden rule which we have like always agreed on is that development should mirror production, right? That is how you minimize bugs by developing in an environment Which is exactly like the production setup you have and with monoliths This was easy like because like your monolith would run in a VM somewhere Which was not that different from running the entire thing on your local machine But when microservices started to come into picture and containers How we run them locally is very different from how we started running them on Kubernetes and pods So what did we do to like fix this? We either like started to just work on individual microservices locally So let's say if you're working on a full stack application So you would just bring up the front end work on that and like maybe bring up the back end if you want to see the entire thing But that is what started complicating this so a couple of solutions We put in place to fix this and we can see them on the next slide First was like we build better CI CD, right? We ensured that like when you're developing to ensure that your code will work in production We build pipeline so you write code you commit it you push it to the pipeline see I Does its thing and it gives you the feedback if it's green you know your code is working And this is a very effective way of knowing that your changes will not break production But what is a problem here is that it is very far away from the developer the feedback is not instant right you you can't just like write a line of code hit save and you know Know that this thing will work in production. You have to commit your changes You have to wait for see I to do its thing and Miro do you want to talk about what the problem with staging we have seen? Yeah, of course So once once we had see it see I CD one of the next evolutions we saw is to having this Fixed number of environments available where you can test things end-to-end I've worked for very large companies before Doctoral where we have this where you had a few staging environments and you can call them a staging test Pre-production Integration use this as a wild card for that environment where you have all your application running end-to-end Typically, it's only a few and then you're gonna see some patterns emerging where Because it's the only place where you can really validate that your changes are not gonna break production You normally have like a queue of developers waiting for access to this environment They run their stuff they leave it kind of halfway running if they find something you have to go back all the way to the beginning of the CI CDQ But in a lot of places it's very valuable because this is the environment that gives you the certainty that your changes are gonna work So it's great from that perspective gives you validation helps you have certainty and not break production however, the challenge is They're not they're not that many it's not very efficient because you're always waiting for it to be available At this company's work for we even ended up creating like a bot on this lack to reserve time on the environment because it was such a contentious thing and it's not a great way to work It's not very effective and you always end up spending a lot of time fixing these environments because typically somebody puts their changes They break something. They're like, okay, I'm done I need to work on this more somebody else is your turn and then you say to the environment and okay Something's broken. You have to like relaunch it fix it and then get ready to work So again, it is self-service. It's helpful, but it's not not ideal not ideal for developers for sure like and same thing with we put like mini cube and tool like which try to replicate Kubernetes on your local desktop again the fact of the matter is that it is a Replication it is not the actual thing you use in production and they take a lot of resources to write if you're trying to run a complex workload on your Mini cube or kind cluster you need to have the fanciest of Mac books to make sure you can still slack and zoom your co-workers so these are some attempts and Next slide We are going to now talk about like Two golden rules, which we you know came up with in our discussions talking about development experience and Romero, can you take the first one? Yeah, of course so one of the biggest Benefits of us working at a company that builds developer tools is we spent a lot of time Talking about the upper experience with with prospects with users with community a few of you in the audience We've had this conversation before of what is the experience you want to build and why and After you know multiple years and talking to like hundreds if not thousands of companies There are two things we've seen that are like key for a high-performing Organization that can has less of the issues we've been talking about first one is you need to make sure that your developers are Self-sufficient self-hosting self-service self-service is very important You don't want to have developers waiting around for environments to be available so they can be effective This is a time thing we've seen a lot of like old-school companies But also you want to make sure that they are self-sufficient but without having this constant Context switch context switch kills productivity if you have to like the self-service But you have to like build a cube cluster from a scratch every time go to your AWS account and provision all these things by hand That is taking away, you know brain cycles from actually solving the problem of your team or your company is meant to So that is something we have to be very careful about like keeping the context switch to the minimum Making sure developers are self-sufficient so they can be effective The second rule is that the dev environments need to be fast ephemeral and like production and each of these Words has an importance here. You need these environments to spin up quickly like we talked about staging environments They should not be like a queue or waiting or any sort of delay in getting access to these dev environments because that kills productivity Ephemeral why because that is how like you do not want to you know carry on the load of Experimenting you did on a previous cluster environment to continue to next one You want to spin up things like as in so that you can iterate faster and you can experiment with things And that is why you need an environment which is ephemeral you can delete things easily you can start from scratch You can let your imagination go wild and the last part is very important Which is making it look like production and that has been one of the hardest challenges as we like Continue to grow into this world of cloud native because the production landscape is like evolving continuously right replicating Kubernetes during development has been problematic So now that you know these two problems we want to get into the demo and for this demo we'll do a bit of role play and We are going to be role playing as two people. We saw most commonly in the companies and organizations We have talked to I'm going to be developer David now developer David could be like a full-stack engineer Walking on front end back in anything, but developer David cares about building cool stuff I want to build the product. I want to fix bug fixes. I want to ship value and do all of that cool stuff Let me know what are you going to be playing? I'm playing Cindy Lopez. It's a platform engineer It's a play on Cindy Loper for those of you not born in the 80s like me And my goal is you I want to create automation. I want to be bugged. I want to be effective I want to focus my time on like integrating cool stuff enabling everybody else and Most of everything I want to enable my team to be self-service because I want them to be efficient But more importantly, I want them to leave me alone to do my own things Okay, so I'm developer David and I work at a very famous taco shop We have a website which is very fancy and we recently switched from a monolith architecture to multiple microservices So Cindy, can you help me get started with developing? Okay, I guess what do you need to get started with developing? Well, I've been told we are using s3 buckets and sqsqs in production. So can you create them for me? Do I need to open up a Jira ticket? No, no, no, no First of all, you need to use your team's account You can't just be creating resources everywhere and when you create these resources you have to make sure they have the right tax They have the right Versions you're using the right naming scheme and that you deploy them on the right region region What is region like we are in Tel Aviv. So do I choose like AWS Tel Aviv or something? Yeah, I fondly but maybe next year, but no, no, no Okay, okay, this is a lot for you clearly this is not on this is not what you should be focusing on Let's automate this but is something you need once or is it like no, so like What are you talking about like every time I want to develop? I need the bucket and the queue up and running and like I Assume to save your job. You'll ask me to close them also So I don't want to do all of these things what I can do is open a Jira ticket to create these resources And want to let you know when to close them. So No, yeah, I don't want you to open like 300 Jira tickets every day. I know that's not gonna work I love Jira. Why do you hate Jira? I don't hate Jira. I just hate all those emails every single day. So, you know what? But here's here's you know We're in a queue Conference and there's this great project called cross plane is part of the CNCF landscape. I think that's gonna It's gonna help us here today. So first of all Let's start with abstractions. You said that you need an SD bucket and then queue perfect. Okay. Well, let's start there. So Cross plane has this beautiful concept called composition Where we can put all these things together a composition. Let me show you this beautiful Jamal. I put together magically just right now With the infrastructure that you need for this taco shop software you mentioned you need an S3 bucket Just here as I said, I want to limit the region the name I can do that all in cross plane and Also, as you ask an SQS queue, which also it's only available today on EU and US Region so the composition is how I tell cross plane to create the resources you need as a unit I don't want you to think in terms of like S3 SQS. No, you need the infrastructure for your application So this is something we can create I recreate this in our cluster. So it's available to everybody That wants to use this infrastructure you and every rest of your team You're gonna tell them do not open Jetta tickets use the compositions and use cross plane So first step composition. This is for me as a platform. Here's where I control Which resources which size which parameters I want exposed to my developers and all that sweet stuff I don't want developers to have to be experts on every single AWS gcp Digital ocean service. I want them to be experts on The taco shop software they're building. So the step one is we have a composition Step two is we have the composite resource definition. This is the equivalent of a CRD CRD It uses in formats uses open API to define the API and what we do here is I'm gonna give it a friendly name And here's what I tell cross plane which resources which options of the resources that I define on my composition and I'm gonna make available to the users of this. Here's what I have full control. You want to export everything and give them The ability to deploy on every single region every single size every single version. Good idea No, it's not I'm glad you're learning. It's not a good idea So in this case just for the purposes, the only property I'm exposing is the region because it matters, right? It matters if you're if you're a developer running in the US, you don't want to pay the latency tax Tax if you are somewhere else, well, you pick whatever is closest to you I could even not have this and say, you know what no the company standardized on the Frankfurt region for everybody Because it's like the easiest cheapest whatever reason you might have it could be a even a physical location cross plane works Has this beautiful provider model and it works with all providers Bear metal and anything else you want so that now that I have my composition and my compositor source definition I'm gonna give it a name and cross plane has this other concept called claim claim The same with our resource claim in the previous talk by NVIDIA or a volume claim is how the end user in this case developer David Asks for this infrastructure and in your case developer David. This is what you're gonna have to give me Blah blah blah. So this is what I actually care about right one yaml file for me I just have to apply this exactly so let me let me show it to you life I have a terminal here for my cluster. So the first thing we're gonna do is we're gonna create an instance for you So I want everybody to have their own namespace We're gonna call it deaf because that that is his first name. His first name is developer. Yes I made my job my life. I don't know what happened there And and once we have that and it will the Wi-Fi play well with us today Well, the good things I pre-created everything so We'll go with it the next thing you're gonna do is just create that claim and one of my favorite things about crossplane is It allows you to use the Kubernetes mechanisms To create these resources. So in this case, all you have to do is Qtl apply dash f the claim that you created in this case We're gonna use a deaf namespace and we're gonna click Enter and if this work, I'm gonna switch to my phone's work Or somebody else's and this is the command like I care about like as a developer just applying that claim I don't need to know like if it's an S3 bucket or it's in Q and where what the region is I get provided this claim and I can just change the configuration values there apply it and have my infrastructure created Exactly. Exactly. So when this command executes and you know, you need network for that. What's gonna happen then is Crossplane will eventually create it has like this constellation loop. It will create those resources for you on Kubernetes so if we go here, is it connected to the net now? I think so Let's try this command. It is connected tonight Let's do something it's turn off Just to prove it. We're doing a live demo There we go Yeah, I don't think yours is oh, there we go. Perfect. Now we have connection So you can see that now here I created my claim and the claims called my dv and It's synced with with a provider and it's ready in this case We're not exposing any secrets But you could configure crossplane to expose that you are I create keys on demand or let's stop It's it's fairly simple and now just to show you that things that actually get created Crossplane exposes the AWS gcp any of this spaces on An API QCTL get cues and this will query it will go query our AWS account I'm going to show you that there are a few cues created in this case There's one cue that developer David created and there's another cue that Cindy created Well, I was developing all this all this integration So here, you know, you now know how to create a claim, you know how to create Your record your sources. So why are you still here? Is anything else more dealer tickets? Of course, there's more stuff. What about the three million microservices the application is made up of like How do I get them up and running on a cluster and you've created these resources for me? But I still don't know how they connect to my application, right? Wow, so so you really just want to focus on code, right? Like do you even kubernetes, bro? What kubernetes what? Never mind. You know what? Let's just automate ourselves away from this You're right. You should not have to be an expert on kubernetes and all these other things. Thank you Finally someone said that So now that you have your infrastructure, let's talk about your application What I'm gonna show you now is there's this new breed of Tools that I like to call developer experience automation that allow you to automate what your dev environment looks like and deploy it with one command So that everybody can just run one command and run your infrastructure as I show you and your code without you having to be an Expert on this. So there's many of them all of them open source today Because I am a maintainer of this one. I'll show you this one real quick called octet The criminal general concept with all of these tools is you want to put in code all the development environment So you want to have in this case your build command your deploy command and Then when you're ready to develop the things you need there in case of octet or file synchronization Embediments you could be using others one like scaffold like deaf But there's a bunch of those but the key here is that it's all automated You don't want to have to run every single till manually if you see here For instance this application requires a secret to be created on the namespace and then three different Helm upgrade commands to deploy your three Microsources not three million. Let's not get overly excited here three services And and what happens here is that now that you have your? file We're just gonna call command up and up will go through this list of of commands It will be whatever needs to be built. It will deploy You can see here's gonna create the secret and everything is happening on Kubernetes nothing This is not like mini cube kind of anything This is an actual Kubernetes cluster where this gets deployed to and your idea is that the manifests you mentioned in the deploy section Are the same manifest that Cindy uses when they deploy the application to production? So this is how when we talk about like bridging the gap It is very essential that you use the same configuration same manifests you use for production You use them in development as well And that is how you can you know shift left things and ensure that you catch on any bugs any breaches security things early on And the best part of this is that everything is running on on on our shared Kubernetes cluster Which means that you don't have to be an expert on the entire CNCF landscape to be able to take advantage of all this Amazing open source tools that the community has been building. What's the landscape? Is it a place in Tel Aviv? I can visit No, let's let's go back to the demo So you see here it's almost done and once this is up and running you're gonna have a copy of your own environment on Kubernetes fully integrated with the services with the cloud resources with crossplane and all those beautiful things and Let me just show you and there you go the full application running You can now go try it out fix any bugs cause more bugs probably but Not on me and now every G that ticket that you open will be for your team Well, thank you, Cindy. I think I've started to like you a little bit better now So this was it for our demo and we hope you found this useful But just to give you a little recap of the things we discussed and the tools we talk about first thing is crossplane which Transforms your Kubernetes cluster into a universal control plane and what we showed you was just a part of what Crossplane can do for your workflow. We saw how it abstracted the s3 bucket and the queue for us But crossplane is actually a control plane. So it has the whole reconciliation loop thing Kubernetes does So it actually checks for your resources if they are healthy or not and if they are not it will you know try to bring them up again So try crossplane out and we'll see that we saw that what crossplane you know does for Cindy and how it allows Cindy to create these abstractions on top of Be it Kubernetes be it non-kubernetes resources living if anywhere and they get abstracted out and for me developer David It just you know simplifies things it gives me a one simple YAML I can add all the fields which are relevant to me and apply that YAML and Everything I need be it living in whatever cloud provider or anywhere else gets created for me and and something important to Add here is when we talk about abstraction. It's not just about automating the creation of resources, which is very important But you're also automating governance compliance control cost anything you need to automate like you know depending on every human in your decisions who have to type manually a Command every time they create resource. It's not realistic like cross plane Makes it a lot easier for all of us to just codify that you put it as you saw on a YAML file You're gonna put that on a repo on their source control where it's gonna be visible Auditable and then everybody in your organization can use benefit from that Centralize rather than doing it team per team or individual per individual And and here's a we saw how crossplane work like there's a side Which I as developer David care about which is just the claim and then there's the side Which Cindy set up for me and that had like a composite resource composite resource is what had like a S3 bucket and our queue and Composites we saw that's composite resources are made up of Compositions and composition resource definitions, which is where you define You know what fields developer David can configure and which is where you know set up the integration between this Schema you have created for your composite resource and the actual resources in the cloud provider And we looked at Kubernetes development environments and what they you know do and how they help you Bring all the microservices to an actual cluster so you can get right to development and for Cindy They make sure that you know Cindy does not have to Spend up a cluster each time for developers and they can just you know it this whole idea I feel of a manifest as a dev environment is very powerful as we you know Navigate through these times where we are switching from monoliths to microservices because it ensures that things remain ephemeral and it ensures that everyone can you know just clone the repository and run a single command and get right to development and By having it defined and running on Kubernetes. It means that you can start getting closer to using the same configuration Infra tooling that you have in production like you have to make a call of how close you want it to be But there's definitely a lot of value in giving access developers to these tools earlier in the cycle because as we all know The sooner you find integration issues the sooner you find issues around policy around compliance around Airbag all these things the easier that I have to fix that you don't want to find Once you're ready to hit production that oh, yeah My code doesn't work at Kubernetes because everything is running on local host or I'm using a I don't know a Javascript library That my team doesn't want me to use because it hasn't not been vetted by our dev SecOps teams all those things are like are like very important From a productivity perspective from a security perspective and also from a reduction of annoyance So I like to call it perspective for developers So and there are a lot of tools which help you do this like there's dev pod this telepresence There's octeto CLI which we saw so you have a lot of open-source options to choose from and they all try to achieve a similar Goal only they differ in that approach is so you can see what works best for you And that was it. I hope you found this talk useful if you did Go check out the projects this the code for the application we showed would be life If you have any questions feel free to reach out to us on Twitter And I think we have like two and a half minutes for Q&A Okay time time for questions who has a question with the raise of hands. I see a question there at the back just a second There you go You said you have three million services and we have 20 developers most of them use the same 99% of the services but each one needs to develop just one Do you duplicate the environment for each one of them? It could be very costly and second question What about shared resources? We have huge database and traffic that everyone want to use each one in his own environment, but the same one So how do you do it? Yeah, I mean you can do any of this modest We've seen this on the field with like members of our community where it depends on how your team is interacting we believe that Full application per developer makes a lot of sense As we all know Cooper Dennis is really good at running in front scale is surprisingly cheaper once you put everything together But that's not the only way like you could have a way We've seen where you can have a staging environment with like all your services and then every developer only deploys The environments the services they care about and then you can do things with Istio to do like like traffic management Or just by using service discovery. It's a way same thing happened with share resources Yeah, I would recommend as our said earlier speed is very important If you have to wait 25 minutes for the environment to open be up I'm running nobody's gonna use it like for me my tolerance after one or two minutes like okay I'm done with this. I want to do something else So that's what like shared resources like big databases are better shared and then anything you can move to like a container base kind of fast start model and Here's where as you think of the next experience you want to offer To your team this is where you have to start making some hard choices of like what do you value more speed? high fidelity Are you okay with spending more resources like everything they've experienced? You have to think of like what did those your developers value more? What do they need but tooling the tooling we show you today works in all of these models Do add to that like This is for development. So a lot of people get confused that you know Like this is at the scale of production, but when you deploy your development development dev environment, you're not expecting like a huge traffic Right, it's just you and your team. So you do not actually end up running a large amount of Pods so it is not that costly as it like you know seems running Kubernetes for development and each developer can you know Choose a namespace in the same cluster. So it does not have to be one cluster per developer or something like that Thank you very much. Let's take one more question So I describe this as a tool to lift up developer environments. Is there any reason not to use this also for production environments? Well that for us I'm going to speak from like when we for our business projects We're focused on the developer experience economics We feel like a family environments is something that makes sense for for dev staging test Integration production in my opinion has special needs, you know, like it's long running migrations Progressive rollouts Feature flags all these things that are tend to be more for production So this the sea light that we show you today are more focused on their economics for dev You could mix them. I prefer best-of-class for every stage, but it's definitely something that as these tools evolve We always get that question like where do you stop the experience and where do you start production for me? That's a good line But again, it really depends on your tolerance for like which features do you need and and how advanced you are in terms of production rollouts as well Last question anyone there's somebody in the back someone in the back. Okay, let's run Let's run. Let's run and while doing that. I remind everyone please rank. Those are the next one talk Please rank them on sked.com the platform the scheduling platform this and all the rest of the talks Remember to give their feedback to the speakers and here we go last question First of all, thank you for great presentation My question is about complexity and cross-playing So deploying an S3 bucket is awesome. It's simplifying layer But how do do how do would you deploy with cross-playing complex infrastructure? Like you you talked about S3 plus SNS drop their Database into that and I want that to be dynamic in some cases. I don't want SNS in some cases You got it. How what is your suggestion? Yeah, that's that's what really cross-print shines that is what the whole composition model is about I show something simple today because it wanted to be like fast and easy to grasp But actually database is one of the most popular things that cross-print offers because if you ever deployed an RDS database You know that how many parameters are there to set up security groups Database security groups so cross-print allow you to express all this in Jamel And that's what for me makes it easier The fact that is Jamel also means that you can combine this with things that customize if you're gonna do more dynamic Like create these or create that what I recommend Based on experience here is create your compositions of your building blocks. You can compose compositions. You can create packages cross-play has a very robust Model of like these types and that way you put together these offerings and that way when your developers create a claim They can pick oh, I need that that's typical demo, right? I need like a very large database with multi a a c replication and a backup from like last week You can model that on on cross-print You can make that available to your developers and you can have like the light Database on a container very fast that you could also model in cross-print in order to have like Uniformity that's how I recommend going out of these things create those but there's a very large community There's a slack. I recommend you join for cross-print community. I think it's community dot cross-print Calm, but you search for for cross-print slack and there's a lot of experts there that can help you Architects and figure out the right level of composition that you need But I'm happy to talk more We're gonna be here for the rest of events and at the happy hour. So thank you very much. I hope it was useful Thank you very much