 Hello everyone, and thanks for coming to my KubeCon plus cloud native con talk. My name is Alice Roscoe and I work as a support engineer at ambassador labs, the company behind telepresence and the CNCS incubating project emissary ingress. I work with small to large scale Kubernetes users and encounter people using a wide variety of tools and technologies with many different kinds of use cases for them. And I've often needed to pick up new skills and learn new things in order to help them solve their problems quickly. This talk is about my experiences transitioning from a college graduate with a limited experience in cloud native technologies to support engineer working with users who are running Kubernetes and many other CNCS projects and tools. I learned almost everything I know about these technologies from working on the job. So I'm going to talk about what it was like to learn these things from the ground up and give some advice about how you can create a bootcamp to teach developers new hires, or even yourself the skills you need to succeed in this field while using these technologies. One nice thing about being fresh from college is that I wasn't expected to be very experienced these tools and systems right after joining. I was put through a bootcamp of a bunch of different materials, reference docs, videos and blog posts to learn about Kubernetes, networking architecture, containerization and stories about businesses that were transitioning into running their services in a distributed cloud environment to help me pick up these skills quickly. There was a lot of information to learn at first, and a lot of information to absorb. But one of the great things about working in ambassador is that they had confidence that I could pick up these things. And they gave me a bootcamp full of information that would help me build a foundational knowledge base that I would use to learn more advanced skills. I was completely overwhelmed at first I went from thinking I would never understand as much as my senior colleagues, now being very proud and confident of the skills that I've learned since then. Not only that but I now believe that anyone with enough interest motivation can learn these things as well, even if you don't have a background in computer science or networking. And you've never experienced any sort of Kubernetes or cloud native technologies. I want to help give you that same confidence in your skills and your ability to learn these things, so that you can create a bootcamp to set yourself up or others for success. Before starting my current role back in January, the only knowledge and experience I had about any cloud native technologies was a little bit of experience Docker from college courses. Even then, experience with Docker was limited to a few courses that through a Docker file and at the end of a computer science project. We would make a few edits to a Docker file that had been given to us, and then just run the image locally anyways. I was missing out on a lot of the knowledge about what Docker was actually doing, how containers worked, and why this was supposed to be beneficial for us to be doing in the first place as opposed to just running the code by itself since we were running it locally. At the time, I didn't really like Docker, and that dislike for it came from a lack of appreciation for all the things that it was doing for me or how I could use it to be even more successful or set up even more complicated projects. Fast forwarding to the day, I'm really glad that it was exposed to it. And now I appreciate its usefulness a lot more. Looking back, I think that the goal of adding it to my college courses was likely just to make us aware of it and introduce us to the topic instead of being a comprehensive guide to all the things container and cloud related. When I started at Ambassador, I was given a bootcamp to complete for my first few weeks to help me learn about all these different topics I'd need to know. As one of the few members on the support team at that time, the bootcamp was still in its early phases. Having some knowledge about Docker gave me a big head start in learning Kubernetes. And as I completed the bootcamp and familiarized myself with Kubernetes and how to use it. I began working with users. I started thinking about how a handful of topics like containerization, Kubernetes pods and Kubernetes services kept popping up to me as things that were really important to really fully understand. And how having an understanding of some of these topics can really help you learn other skills and technologies. And having a solid understanding of some of these core topics I mentioned, but the help of our bootcamp to teach me them. In our last eight months, I've learned more than I ever thought possible in such a short period of time. Working with so many different people and having to familiarize myself with the technologies they're using that I've never heard of before, exposed me to so many new topics. I've learned all about how networking works and the various ways that machines communicate with each other, such as HTTP headers, TLS, TCP, GRPC, WebSockets, and Certificate Management. I've set up distributed tracing systems, ZipCan and Datadog, and I've learned how to interpret the information that those graphs provide when I receive them so that it can help troubleshoot problems. I learned about metrics and reporting and log collecting and how to get important diagnostic information from services and find the important information within them quickly. I've also learned about how people can figure authentication and single sign on and secure their services and APIs. I just mentioned so many different topics, and if you didn't know what they were, that's fine. Neither did I eight months ago. The technologies that I just mentioned, most of which I didn't even know existed, and let me tell you when I first started learning and saw how many more advanced topics I would need to learn, I started getting really worried and overwhelmed. I didn't think I'd be able to learn everything I needed to in such a short amount of time to start helping people. Like it was almost insurmountable the amount of things they would need to learn in such a short period of time. The one thing that I can say about learning all of these things is that learning is a process. It doesn't happen overnight. You do it one piece at a time. It seems impossible at first when you're just getting started. But just like I mentioned, when you have a solid understanding of a few foundational concepts, you'll be amazed at how fast you can pick up and learn new things. Another thing I've learned is I've watched other people that I work with pick up and learn the same things that you don't need a background in computer science, information technology, or networking to accomplish this. All you need the determination and desire to learn in a solid foundation to build from. There are strategies that you can use to help build a collection, learning materials to help teach yourself for others and get set up with the skills and knowledge you need to learn any number of those advanced topics in the cloud native landscape. So I'm going to share some advice about how to build your own boot camp for learning similar things with those strategies that I've learned after having gone through a rapid pace boot camp myself and working with others to help improve it. To start off, some advice from my own learning experiences for building a boot camp is to make sure you place heavy emphasis on some of what you think are the most important things to really understand. With the skills that I have learned centering heavily around a Kubernetes workflow, use topics or containerization and some of the basic Kubernetes structures such as pods services and departments. But this is a really good place to start if you don't already have something specific in mind. I strongly feel that having an in depth understanding of these concepts, how they're related, and how they work before moving on with your learning journey and greatly impact your experiences and more advanced topics that you learn as well as your personal enjoyment and satisfaction. I think that most Kubernetes boot camps will want to start here. And even if you don't plan to use Kubernetes, I believe that learning and teaching it gives you a really solid foundation for picking up other skills. But how you structure your boot camp from this point on will be up to you. If Kubernetes is a big part of what you want to focus on, I believe that the best way to structure boot camp is to figure out what topics and skills you need to learn to build and deploy a really simple Hello World application in a cluster and then start learning and starting out with the topics that have the least amount of background knowledge required to understand. One of the reasons I recommend structuring the start of your learning around the process of getting code to run in the cloud is the understanding how a project goes from code to container image. And it's then shipped and running containers, as well as the impacts that packaging dependencies into those images, how container networking and container ports function for all vital things to know about as well for anyone trying to build a career on Kubernetes. Even if you're not a developer writing code, thinking about the development and product lifecycle from code to where and how you deploy that code to the end product, make the learning process easier. Understanding this process is super important for operators and developers like from code to container image. Next, you'll want to learn about the Kubernetes topics of pods, deployments and services. You'll need to make sure that you really understand how to write a Kubernetes deployment, how creating a deployment creates a replica set, what each of those things are and what they do. You'll want to learn about pods that contain the containers that are built from your container image, what they're for, and how Kubernetes manages them before you'll want to take on anything more complicated. Understanding what the different Kubernetes objects are, and what they do is something you want to focus on before you get too carried away trying to finish getting a hello world app to run your cluster. You want to stack things together and just make a project work, and then have all that wasted effort, not understanding what you really just did in your cluster. Next, I recommend covering what kind of communication between those different Kubernetes objects happens within a cluster. This is how cluster networking works, given the ephemeral nature of pods and how a Kubernetes service selects and talks to pods will help you start thinking about how these parts work together as a whole. That's a simplification and cluster networking is an important topic to learn about in depth, since there is a lot more to learn than just getting traffic from a service to a pod. It's not just the terms and the definitions, but how all of these different things are related and they build on each other begins to look less like a jumbled mess of jargon and definitions you need to learn, and more like a series of tools that will help you build fantastic things. At this point, it's finally time for a hands on exercise to help bring all the previous topics in focus. It's very important for putting the concepts you just learned into practice. As I mentioned, you don't want to skip to this point and just learn what commands and config to memorize to just make things work. You want to know about what changes you're making when you're playing with hands on exercises, so that you gain meaningful experience from them. There are some really great courses that you can follow along with that are accessible and you can find on YouTube, or from other learning platforms like Udemy. These will put you through the ropes of creating deployments and services. They think that once you're familiar with how interacting with your cluster works, something that you can build and work on your own is always preferable to a series of commands that you can copy and paste that are explained afterwards. Taking hands on with a simple code example that you can build into an image, then write a deployment and service manifest for, and finally deploy into a cluster that you have access to, teaches you this life cycle from code to running it in a cloud environment. This goes a long way towards helping you start to familiarize yourself with the topics that you've just learned, and lets you experiment with qctl commands that you'll need to use to interact with your clusters. I think that building a simple hello world app or using a service that you can interact with using curl or in the web browser. It's a good way to get started. If you aren't familiar with building container images and deploying them to Kubernetes, we have a great open source demo service called quote that we use for this exact purpose. You can see an example of it right here. All it does is serve a random quote in the time of day as well as a server ID. There's things like this that are easy to set up and test with are preferable. We have instructions for building the project into a container image, as well as Kubernetes manifests for deploying it and instructions for making requests to it if you need an example for how to set up your own simple service and get it deployed to Kubernetes. You can find these on the ambassador websites get started documentation that will link to the GitHub where you can do all the source code manifests for the project. I highly recommend building your own simple service once you're familiar with the projects and processes so that you can tweak it to best serve your environment and learning needs since adding to it over time is a fantastic way to learn. If you're comfortable with all of that. A good next step is to consider the architecture of your Kubernetes cluster and how you'll be using it. Learning how traffic gets into and out of the cluster, frequently called ingress and egress or North South traffic. It's important to cover will likely be one of the first things you want to play around with once you've got a cluster running and a service or two deployed. While learning about getting traffic into your cluster, you should familiarize yourself with load balancers, how they're created and how different load balancer configurations can affect traffic going into your cluster. The next step is learning about the different hosting options for Kubernetes, like Microsoft Azure Kubernetes service, Amazon's elastic Kubernetes service, Google's Google Kubernetes engine, as well as local or on prem options such as theCUBE and K3s. These are some of the very popular options for running or hosting Kubernetes, you'll likely run into frequently when continuing to learn new things. So it's good to be aware of them no matter which one you choose. Everything I just mentioned represents a lot of information. I'm going to take my explanations a lot to try and make you aware of some of these topics, how they relate to each other, how you might want to start thinking about that progression of knowledge when you're building a bootcamp. But I've not covered every topic that you'll want to know about or research to include in your bootcamp. There are many impactful things to understand, knowing about them puts you in a really good place to start exploring other topics as you're introduced to them. I specifically mentioned things that were impactful in my own learning journey, and I felt like an lack of understanding about these topics severely impacted my ability to learn something new. And also because after I understood them very well, I found that many other things are much easier to learn. If you're considering putting together a bootcamp for your organization. This might be the point where you want to start thinking about introducing some of the other cloud native technologies that you plan on using or introducing more advanced topics like networking. So now that you have an idea of the topics that you want to center your bootcamp around, you can have the resources that help to teach these topics is the next challenge that you'll need to tackle. There are six categories of learning materials that I recommend including every bootcamp. These are blog posts, visual guides, summaries and explanation videos, hands on exercises, documentation, and stories. I'd select technical blog posts that highlight an isolated section or a comprehensive overview of topics that you want to teach or learn about. I'd like to talk about how someone put into practice or explains things that you're trying to learn about my answer your questions or help to gather pieces of information that you've learned about, maybe even reveal new topics that you want to add to your bootcamp that you didn't know about. Visual guides and diagrams can also help you emphasize the connections between different topics, not give you a memorable way of internalizing and remembering how things work. A great example for a visual diagram would be helpful, just breaking down the insides of a cluster in the pod, the containers within the pod, services sending traffic to the pods, namespaces, and other information about a cluster. So all of this is great and easily visualized to help show the distinction between different things, how they're related and how they interact. Summary videos can be great and helpful, and so you're trying to hear another person with more experience, explain their understanding of topics to see if it lines up with your own understanding. You have a misconception about a topic, or if they're able to provide information that you're missing from a given topic, that's also a huge plus. A hands-on experience can be one of the most effective ways to solidify information, but it should always be given as a follow-up to that information itself. Putting a lab in your bootcamp where you play around with Kubernetes pods and services won't be an effective teaching exercise. If you don't have enough information about pods and services to understand and appreciate what you're doing, and that can lead to lack of understanding about what's happening and more confusion. Documentation can be very technical, contains a lot of useful details and implementations that are left out of a lot of other learning materials, but it can become dry and difficult to absorb if it's not supplemented by other materials. Reading through too much documentation at one time must lead to less information being retained as you start to scam read through it. Finally, stories such as individuals' experiences working on a project or companies' description about transitioning from a monolithic application to a cognitive implementation of it can really help to tie together a lot of the details that you learned about to make you consider the reasons why you're learning all these technologies in the first place. You don't spend all this time building out complex systems and learning about them just for the fun of it. You also need to consider the business and logistical goals behind these technologies and why they were created to help solve these problems more effectively. I think that having a good mix of these different types of learning materials in your bootcamp is really important because each serves a purpose that is not entirely met by the others. You can't just have a book of documentation and call it a bootcamp, any more than you consider mindlessly copying lots of demo exercises to make programs that work with that bootcamp either. Different types of learning materials also help cater to people with different learning styles, and people might find the demo very impactful, while other people might find diagrams of documentation to be the most helpful resources. Having a good selection of learning materials is its own challenge and should be really considered when having a good bootcamp. You need to put effort into organizing all the materials you've collected in a way that each new thing you learn sets you up for success and topics that follow it. Try to avoid putting materials too early in your bootcamp, they'll make more sense later on. Or mention too many new topics that have not been thoroughly covered yet so that you aren't left confused. Just like how I described how an understanding of the details of containers helps you learn the working parts of the cluster. Reading a company's testimonial for a certain project and architecture for use of a specific technology won't be as helpful or impactful to you. You read it before you understand what the underlying parts are and how they work. Constantly think about if each new learning material or topic has any required background knowledge that would make it more relevant and try to organize your learning materials in a way where the topics with the least required knowledge come first. Beyond those goals, you always try to ask yourself questions like, what is the purpose of this resource? What do I want to get out of this? And why is this resource important? Is you're finding learning materials for your bootcamp? The answers to these questions will help you eliminate things that are not as helpful as you thought and also to better organize your materials. Lastly, if you're building a bootcamp for your organization or for others to follow, set up a meeting with everyone who goes through the bootcamp to get their feedback about it. Ask questions to make sure that the goals of your bootcamp are being met with everything that you hope for people to understand is covered by it. Feedback is critical to improving any learning resource. You want to make sure that you not only accomplish the goal of teaching others something, but that you also continue to make it better for everyone who continues to use it. After working through the bootcamp at Ambassador, my manager set up a few meetings with me to figure out what worked about it, what resources I liked, which ones I didn't like, and what was the most and least impactful, as well as what I would change about it. After getting my feedback, we work together to take that feedback and make improvements to the bootcamp for the next person to go through it. By constantly getting feedback and improving it, you'll also be in perspective of how different and effective it is for a general learning resource to different people. Whenever a new person joined after me, we would ask them similar feedback and they share different feedback than what I did. We use their feedback as a way to keep improving the bootcamp. We can use this strategy to help eliminate any bias the bootcamp has, the more feedback that you get on it. For example, when I gave my initial feedback, I recommended removing a certain visual diagram that I thought was not a very effective learning material. But the next person who went through the bootcamp gave feedback that this was very happy that it was included and that they got a lot of value from it. And again, after that, another person mentioned that they wish there had been more hands-on exercises to try. This is an idea of how you can figure out if you're covering different learning styles effectively and if it's going to be just a bit of a resource for everyone who goes through it. The goal is to create a living bootcamp. It should always be changing and adapting to new information, chips and technology, and feedback for more people to make sure that anyone who spends the time following it is not left feeling confused or like they're not in a good position to learn more advanced topics in their own. You can even take this one final step further and create opportunities for your team members to contribute the things that they've learned to the bootcamp, so you create a pool of shared knowledge that is relevant and useful to your team. If you're successful in doing so, you can create a system where every new member to your team helps expand the collective knowledge of the group and none of that knowledge is lost when a team member leaves. You never want to end up in a scenario where a team member that you feel like is critical to the functioning of the group leaves and then you're left with less skills or knowledge than you had at the start. Wrapping up, I'd like to give a bit of parting advice to everyone, regardless of whether there's someone who's just recently started their career like me, years of experience, or if they're just someone trying to figure out how to help train other people and they need to pass this information on to them. That advice is to never feel intimidated by the things that you don't know, and feel like that you have nothing left to learn either. When I first started out, I had no idea what a pod or a service was, because terrified the prospect of working with a user to help troubleshoot and fix the problem in their cluster. I thought there was only no way that I could ever know enough all of these different tools that they were using and how to help them fix their issues. I don't consider myself an expert about any of the topics I've just talked about, and there's still a wealth of information that I don't have yet. After eight months of experience in this world, though, I have confidence now. Not confidence that I know everything I need to, but confidence that I have the ability to learn anything that I will need to to solve a problem, and that I can work through it one step at a time by relating topics I've yet to learn about the things I do now. As able to learn these things and achieve that confidence, I have some part to having been put in a really great position to learn because of the bootcamp that I did go through. I'm sure that anyone with the interest and determination to learn can solve any of the problems that they encounter as well. And I love that determination and hunger is such a core part of this industry, and I always love to see when new people are eager to learn new skills. So wherever your learning journey makes you, I hope it never ends, and I hope you can find ways to inspire and help others to learn as well in the process. Thank you.