Today we're gonna be taking a look at the women's atmosphere pink Air Jordan ones. Yeah, you saw that right? It was my wife. She's gonna be in today's video too. So first things first I'm gonna need you to help me go through the review or actually I might have to help you go through the review But typically we start with the box then we crack it open then we say we got the shoe all the different stuff So give us the impressions of the box first. We got this shoe We haven't made it to that part yet. We haven't made it to that part yet. We gotta get to the box. This is the box So the box is red and black. I don't know anything about the Boxes for any of this stuff. Honestly, it looks pretty basic to me. Okay So this is the OG style box OG style Jordan one box with the lift off lid and then that one is normally black or red But this one is red with black So they kind of flip it when they do that like on the women's releases or certain special Jordan ones releases that are coming out So Read the size tag read the size tag. So it's my size so But he said he has to bring them back. So they're not for me So I have to keep that in mind, but I'm gonna put it in a good word. We'll talk about that in a bit We'll talk about that in a bit. Okay, so What else am I looking at women's Air Jordan one retro high og and then the color is right here Yep, white muslin sale. It's hard to read. So it's gonna be a very neutral type of Like colors are all very neutral. We'll see muslin. It's like a off-white. Yeah sales like a cream Well, let's find out. Okay. Okay, so lift off wait. Let's make sure it's all clear All right, so lift off the lid peel back the paper and then say and then we got the shoe.  I got you and then we got the shoe. Oh, we got this You gotta turn it this way. Oh, we got this shoe. Okay, so It's pink and fuzzy. So first impressions. Yeah, what do you think about these? She cute or whatever? I mean It's pink. It's a nice tone pink I I mean the materials look good. The leather looks good. I don't know what this fuzzy material is But it kind of reminds me of the Canyon purple That's even fuzzier the fourth year. Yeah, that's a lot for like the look of it I feel like it's kind of like a hairy suede. They kind of call it something like that. So Typically, we always start with the bottom. Oh gee Air Jordan one also retro style pink bottom It's a good pink. You got that sail color on the midsole with the white or the actually a sail stitch on there, too And then the upper you got the switch of materials and colors So what do you think about the white leather compared to what this is so soft with that suede over here? Yeah, that's nice. Actually, that's really nice Okay Okay, so you got the suede around the collar on the back in that's more of like a tan kind of creamy color way Matching the sock liner More similar to the tongue right there and then you got the white accents on the shoe with the leather How do you feel about the white contrast and kind of with the sale? I Think I'm okay with it honestly and I think it did they did a good like balance if they would have made that sail It would have been a little weird, right? I got you so I feel like they they balanced out the shoe with the white And the cream pretty pretty Well, okay, okay, so as we feel the leather and the quality it feels pretty soft It's kind of tumbled you got the white leather on the sides And then you got the suede throughout the other areas with the pink And then you got the white Air Jordan wings logo right here on the side classic Nike air on the tongue Anything else popping out on the shoe that you're This is like kind of peachy tones like the tongue. Yeah, it is peachy It's kind of a lot more faint a lot more light Yeah in between like the sail and the pink kind of got that make sure between the two with the colors like that And then in soul you got that kind of muslin color with the pink Nike air Okay, on there and that's kind of a base of the sneaker right there now Do you want to know some history or anything like that? No, we go over history first, but this one in particular. There's not too much history behind it Well, I guess knees. Oh, no, someone was coming up in there Yeah, normally we go over to history But there's not too much history behind the sneaker the hyper royal Air Jordan one They did this in a man's colorway so the gray there was a gray swoosh right here And then the rest of this part was blue and it was very similar blue like a it's like a wash blue like a row But it was like washed up like you see how this has like those kind of different it looked like that But it was a blue so kind of look baby blue wash royal kind of mix Um, I have them in the other room. I just was too lazy to go grabbing my messed up Either way, I'll show you those later. We'll pop up a picture Um, but they kind of do that as a men's version and this one as a women's version They're not really tied together in a sense, but a lot of people did compare them in different videos and stuff Wait, so you have the men's version in your size. Yeah, that means I have to have these in my size Oh, really? I thought you was off about high tops. What happened today? I mean, they're cute It's cute. It's cute. I mean don't get me wrong Okay, so if this was a low top you'd be all over it. Oh, yeah all day for sure Okay, but it's a high top. What would you rate it out of 10? out of 10 7.8 7.8. Okay. That's solid. I think these are gonna be a problem Like I think a lot of people are gonna be going after them. Really? What do you think about the release?  I would say both both genders for sure. Um, I Mean How affordable is it? I mean, well, it's retail 170 but what women's I think is the same price I don't know. I got to check and see I think it's like cheaper because I mean it's less material I don't know. It might be like 10 or 20 dollars cheaper if anything. I don't remember, but I think they're the same price now Okay. Yeah, I think people like them. I mean, I mean, it's okay First of all, I feel like there's not a ton of pink shoes in general but this is kind of special because it's not an obnoxious pink and That means, you know, both people can rock it like not to say that people can't you know, whatever but I Feel like because it's more toned down and all the other materials are like You know like more neutral tones like you can kind of wear this with more things, right? So I feel like it's kind of more universal to Yeah, like you can almost wear with any color type situation like just because it's like closer to the tans and the whites I understand that too. That makes sense. I think a lot of people are gonna be going after these I think they are gonna be a problem I know Jordan ones aren't as hot as Jordan fours are right now.   No, you think it will I Don't think it will. I don't think it's gonna be sitting on shelves I think it'll be at least hitting for a little bit over retail and like if it's one seven year one 60 Somewhere around there. They might be hidden for that Yeah, I was gonna say that's pretty cheap I don't know. It might be we might we'll see you want to see let's check out the polls and see Everybody's talking about that. Yeah, I posted a poll on my Instagram like I always do if you guys haven't already Make sure you follow me on IG so you guys can see all the poll results here on the channel But basically What I like to do is ask the people to simply simple question is the shoe fire or is the shoe trash? And then the results, you know, they say what they say and then we just do what we do I just see what's up 72% of the people said fire and 28% of the people said trash Okay, so what do you think about the percentages just based off of like some shoes get to 80% 90% close to 100% like What do you think about this? I Think that that's pretty accurate and I feel like as I'm sitting here and looking at them more I'm like, okay, like I think this is a pretty solid shoe. I might even raise my You know my initial Thoughts on it really. Yeah, so oh actually you said 7.8. I said 7.8, and that's basically 7.2 So I you're actually really close to what everybody else thinks yeah on that But I feel like they had it in hand like I Mean the materials are good. This is a nice shoe. It's yeah, they did a good job with like putting this together This is definitely a really nice shoe So they come out like in a couple months like in a couple of months I think or April or March May. I don't know something like that.  Let's see if they got a size seven because you know, I try to get the size 13 You know because I sometimes I might keep the pair And then I was I wanted to see what you thought about these Yeah, and then after that I can talk to them and try to work out some deals and everything But if you guys haven't already make sure you check out heart all the links and everything will be down below in the description for their Instagram website and all those different things they got these earlier They got some other stuff early and then they got a bunch of great stuff at the store in the mall and on the website You've been to the store before yeah, I like I think it's I think it's really cool spot now Are you saying that just cuz you're trying to get the plug? No, no No, I think it's a good store I think they put a lot of effort and thought into how they set it up and it's it's really well put together So and they're cool. They're chill like I like that. Yeah, no, they got a good vibe for sure So I think that's gonna do it. You want to wrap it up and say anything else before we go We need to eat we need to eat What I was just thinking like I don't know because I feel like my energy maybe it's a little bit lower right now Yeah, it's it's it's 7.8 All right Before you go I just launched my sneaker head Academy where we got everything on the inside I teach you all the stuff that I learned over the past 15 years when it comes to sneakers scaling real estate You name it We talk about all of it in there and there's a eight-week program plus a bunch of monthly giveaways I give away shoes literally way too much honestly But either way I'll see you guys on the inside hit the link down below in my description or pinned in the comment section For DJ sneaker head Academy, and I'll see you guys over there


Welcome to Toffy TV and it's the start of 11 show Everton vs West Ham United at Gooderson Park. Let's get into it as Mia Begavitch starts in goal for this one. Of course Jordan Pickwood is not available for the game due to a thangery.  Last time out at Gooderson Park played against Newcastle United and again we won 1-0. Did well that night, was comfortable in the air so hopefully no issues at all for him coming in. It's not ideal, we'd rather have Jordan Pickwood we know that but he is a decent back up goalkeeper and hopefully gets through this game without any issue and hopefully with a clean sheet. Continuing with a back 4 start off at right back Nathan Patterson who's been in really good form this season. He's got better and better every game and did really really well in the Mayside Derby. Obviously he started the season more as a wing back but has gone back into the right back position effortlessly and has actually looked better playing at right back to me so he's doing very very well and obviously after this game he'll go away and play for Scotland so hopefully continues that form as well. Again hopefully if he has a good game in this that will be hopefully drivers towards getting three points and on the other side we have Michelenko who didn't necessarily start the season well as a wing back but again I think going back to being a left back he looks a lot more comfortable. It suits his game so much more. I don't think playing as a wing back really really ever suited him but being in the left back looks a lot more comfortable so he will continue there and the two centre backs are Connor Cody and James Tarkowski obviously Connor Cody called up to play for England which is great news for him. He'll be hoping to keep his form going and that will mean a place in the World Cup squad in November for him if that continues and James Tarkowski as well I think has looked a lot better playing in a flat back four. It was funny because when Connor Cody came to the club it was said because walls were going to play three. We ain't going to play three at the back and Connor Cody was better in a three rather than a flat back four but he's looked great in a centre back partnership with James Tarkowski. There is a little bit of an issue with pace over the top but I think as defenders and organisers and leaders those two players have looked excellent and that back four has looked a lot better in the last couple of games. Moving into midfield I'm going to go for Adrissa Garnagay to make his first star for Everton obviously he came on in the last half an hour against Liverpool and looked fantastic to be honest looked like he'd never been away. Just fantastic at winning the ball back and then just giving it always playing the easy option or making it look like the easy option with a clever pass. It's great to just nick on the ball away from the opposition. Someone who always knows where to be as well doesn't dive in and you'll use all that experience that he's gained in the last couple of years of PSG playing with some of their top players and that is exactly what we need in our squad at the moment going forward. Ahead of him Amadou O'nana again has looked really good in the last couple of games having the experience of having Adrissa Garnagay behind them would be fantastic for him and hopefully he can then control more in midfield knowing that he's got that defensive rock behind him so hopefully again we see another big game from him against the club obviously we tried to sign him in the summer and alongside him Alex O'Woby who has gone from strength for strength since moving into midfield and those three players will have to be at the top of the game because West Ham are certainly good in midfield but also haven't got options now. De Corrie on the bench, James Garner be on the bench I imagine as well, Tom Davis who's looked really good this season as well doing a really professional job and drags a violin as well, they're all there, they can take those places off them and it's up to those three players to rise to the occasion and make evidence midfield want to fear in the Premier League and if we can do that we can get older games in midfield that gives us a great platform defensively and attack them wise so that's my three in midfield. Ahead of them Anthony Gordon who didn't have a great game in the Mayside Derby but I don't know, might have just been in the wrong time, wrong team, big occasion so he's had a couple of weeks now since that game hopefully he's back to the form that he was before that game scoring a couple of goals obviously against Leeds and Bremford on the other side Damari Grey are thought against Liverpool at the best game he's had this season we have scored a couple of goals already Ian was very unfortunate to have a goal joked off at Leeds those of his performance against Liverpool was his best this season very direct, very pacey so we need that as well and ahead of them I'm going to continue with Neil Malpie who I thought did well against Liverpool I think he should have scored, I think he should have scored possibly the winning goal but he's going to continue for me Dominic Arventloon is edging closer to full fitness and I imagine he'll start on the bench but I don't really see a need to start him in this game we've got another break after this game a couple of weeks for the international so let Malpie who will have had a couple of extra weeks training with Evan start this game hopefully he'll be a bit more integrated into the side as well he'll start this game and maybe Dominic will come on later hopefully if we can get the goals hopefully Dominic doesn't have to come on at all or can come on later on and there's no pressure on him but the manager was very reluctant to say where Dominic Arventloon was in his fitness but I can't imagine he's going to start him in this game so Malpie to start for me and that's my 11, let me know your thoughts on the 11 the manager will have to decide on a new captain as well who would you go for obviously the easy target to Connor Cody or James Tarkowski I'd actually give it to Alex O'Wobee just as a reward for how well he's done and almost a show player that if you work hard and give everything then you can make yourself an important player in this team I think Connor Cody and James Tarkowski are leaders by nature anyway they'll lead no matter what so I think as a reward for how far he's come I think I'd make Alex O'Wobee the captain for this game but let me know your thoughts on the start of 11 let me know who you'd make captain as well for this game don't forget to check out the match preview also the opposition preview which is on Toffy TV Premier check that out as well make sure to give this video a like and if you want to join us on Toffy TV Premier the link is in the description the QR code will be on the screen in a moment see you later


open source way, the guidebook for community management best practices. My name is Karsten Wade, and I'm a community architect in Red Hat's open source program office. Although I served as a project lead for the 2.0 release, I'm otherwise one of many writers, editors, community experts and open source practitioners who worked on this guidebook. And you can find a full list of contributors at the end of the guidebook, which I'll be showing you in a few minutes. So this is an opinionated guidebook. But frankly, much of the really good guidance and practices around creating and sustaining an open source project are fairly well known by experienced practitioners. It's certainly not a lot of secret sauce in here. But the impetus for this project came out of a number of discussions over recent years in response to the ongoing growth of new communities and people who are new to open source in general. The consensus of those discussions is there's a need for maintaining a guidebook written by a community of practitioners for all open source practitioners, bringing a diverse range of experiences, but having a common understanding of what makes a practice best. And there are many ways to share knowledge and learn. And this guidebook by this community is for the reader and practitioner who enjoys, prefers or learns best from and among a group of like-minded people. People who like to form as a community of fellow learners and practitioners. This guidebook is centered on community management best practices. It allows you to start from the very beginning to consider and engage with the open source way from the very beginning of your idea for an open source project. And it carries you through the creating through the sustaining of your project from attracting users to when they passed your scant barriers to become contributors. Before jumping into the guidebook and showing you around, let's take a moment and review the overall community growth method in the guidebook. And the method is generally mapped to the sections of the guidebook. When from getting started to attracting contributor users, guiding participants, growing contributors and then measuring success. When starting, you want to do the harder work of being completely open and transparent from the beginning, even when there is no one there watching would be open and transparent. And putting up the infrastructure of participation with barriers appropriately lowered for users and contributors. All while focusing on building something for your users. Make sure when those potential users arrive on your webpage, at the top of the webpage is a short description of the project software. It should include a purpose that users can understand and imagine. It should give them something to do right there, a call to action, download and try out, log in and try out, a quick start to use, and so forth. Making software and content your users need is one of the main purposes of an open source project. It is out of those users that most contributors arise from the enthusiastic advocates all the way to the most ardent contributors. As people try out and become users and explore the world around your software, make it easy for them to participate in whatever they find. Make information easy to find and form access straightforward. Make it easy for enthusiasts to share what they know about your project. The idea that contributors come from users was true when open source was characterized by the hub. And it is still true today when users of your software now include companies making products out of it and corporate foundations wanting a common platform for competitors to share.  Of an entire corporate participant in your project, only a handful of people will contribute directly to the project in some fashion. Many others will contribute indirectly in their work supporting the overall user organization's contributions, sometimes behind the scenes for years. So that's it. The bigger your user base, the bigger the pool of potential contributors. So open source projects are a type of community of practice which is a group that gathers to share, learn and improve practices in a particular domain they're interested in. In the science that studies communities of practice, there's this idea of legitimate peripheral participation which describes how newcomers become experienced in eventually old timers in a community of practice or any collaborative project. From the Wikipedia page, quote, according to legitimate peripheral participation, newcomers become members of a community initially by participating in simple and low risk tasks that are nonetheless productive and necessary and further the goals of the community. Through peripheral activities, novices become acquainted with the tasks, vocabulary and organizing principles of the community's practitioners. Gradually as newcomers become old timers and gain a recognized level of mastery, their participation takes forms that are more and more central to the functioning of the community. End quote. One important takeaway from this is that contributors don't compare gliding in from nowhere. They are made from within the project. And while it is true that people with needed skills and expertise do come directly to projects to contribute, the process by which they arrive will have followed the legitimate peripheral participation path in some way. In the corporate contributor example, there will have been some period of precursory activity from the sponsoring organization and so forth that precedes the uplift to contributor. Once arrived, that person will still have to learn all the ways and means of the community before they can become an experienced and effective member regardless of their incoming cashier. So an important goal for a project is to be sustainable. This is about more than the economics. Although that is an important part of the conversation, all the money in the world isn't going to make a toxic community healthy again. A sustainable open source community is one that is able to take in new contributors and promote them to leaders without the stepping back of old timers, meaning the breakdown of systems. A sustainable community can have key maintainers able to go on long vacations or choose to step back from the project without scrambling and struggling. So in choosing what to measure for your community, maintain a holistic viewpoint and don't get stuck on simple first order data like average time to close a bug is the only thing worth watching and caring about. So as we get ready to take a look at the guidebook, I wanna share some thoughts about the flow of the book. So the guidebook can be entered into and used in a number of ways. You can read it from the beginning to the end and build your knowledge as you go. You can start with what interests you the most and follow some cross-references and skip around to read. You can come with a specific problem or general question, then find and read only the content relevant to your situation. It's most of the ways, I reckon. The chapters are written to work as a standalone set of principles and practices on a subject. For the most part, no chapter is a prerequisite to understanding any other chapter. We made the stylistic choice as a way to provide the most value to the reader without spending six more months polishing the chapters so they move together perfectly smoothly. Though most of the chapters are co-authored by two or more people with the merge work sometimes done by a third person. When we have a style guide to follow, you can sometimes tell there are different writers that work on a chapter. But overall, the content has been curated and polished to be useful for different types of reader's needs. We'll continue to polish the content in future versions so the reading experience is smoother over time. And that's open source content, release and iterate on improvements in the next release. So now let's take a look at the book. All right, there are a lot of different things about this book from the 1.0 version with the structure and the reading experience and so on. But a sizable chunk of the core ideas, they are much the same as they were 10 years ago. Most open source principles are larger the same or somewhat evolved. There are two key differences in the content itself from the past. Some topics that only got a few paragraphs mentioned in the past now have entire chapters. Take governance as an example. In 2009, it was much less of a popular topic beyond certain groups of people. By 2019, when we started outlining the 2.0 version, it became worthy of a chapter itself and in fact is the longest chapter in the guidebook. Some topics were not being discussed at all or openly in many community management circles. One example of this is the chapter on community managers self-care, which is currently the second longest chapter. So let's start looking at these chapters one by one. So first there's presenting the open source way, which is the introduction that sets the vision for the guidebook that explains how that vision is delivered in the sections of the shape of things, presenting assumptions being made, the structure of the guide and which I've described to some degree and a community practice always we build on itself. When it comes to getting started, this section is for the early worker, even work done before a community is formed to establish and set the right direction from the start. So there's community 101, which provides a broad overview of how to analyze your community and others. And then there's the new project checklist, which is a checklist of the elements that are typical and essential to starting a new project. It's quite like the one we hand out to red engineers and it's good for making sure that you've considered all the common stumbling blocks. Another is creating an open source product strategy, which is useful when you want to plan and prepare for creating a new commercial product out of your open source software project. In the section on attracting users, we have the understanding that you can't tell all the ways that you can attract your special users to your unique project, but this section can help you, it keeps them having them run away when they arrive, give them a friendly and warm welcome. Beginning with the communication norms and open source software projects. This is the heart and soul of how to prevent or deal with difficult and toxic situations, as well as the whole range of communication practices that keep things running smoothly. This ranges from project roadmaps to issue tracker best practices. The chapter to build diverse communities, make them inclusive first, explains why and how to focus on inclusivity as the first step of increasing the diversity of your community. This chapter offers an overview of efforts by various open source communities to make projects more diverse and inclusive. It also offers initial steps, open source community projects and project maintainers can take to begin building communities and projects that benefit from a diverse community contributor base. In this section on guiding participants, this helps you to understand general participants and enthusiasts. And in particular, why do people participate in open source communities, gets into the kinds of motivations that can help people to contribute to open source. They're extrinsic and they're intrinsic motivations. And growing contributors is a section with the most complexity, which is similar to the relationship of contributors in a project. From users to contributors helps you create a welcoming environment for newcomers who may or are interested in becoming contributors. Chapter, what is a contribution? It provides a short concise explanation of a contribution and then a list of examples. Chapter, essentials of building a community is a concise single chapter covering a range of essential components in building a community. Chapter on onboarding focuses on the basics and resources for bringing new contributors into your community. It describes the concept of contributor pathways as ways to help newcomers grow to become experienced contributors. In the chapter on creating a culture of mentorship, covers the concepts and practices for creating a peer to peer mentorship program. Most successful open source projects have formal or sometimes informal mentoring underway all the time and find it essential to contributor success. Projecting community governance is a thorough exploration of governance in open source communities. Community roles is a deeper look at the many different types of roles beyond code and other typically named contributions. Community manager self care represents a new area of best practices for the 2.0 version, one that I'm not sure many of us would have thought up or set out loud 10 years ago. The idea for this chapter came about during a content design workshop at Fosdom 2020 in Brussels and the community manager who suggested the content ended up writing the chapter for the release. So one note about this chapter, as with all our chapters, we had a subject matter expert or SME review the content. Where other chapters were in the domain expertise of other writers and editors, we could often cross check each other's work. In the case of this chapter, we asked Dr. Karen Hickson to review the chapter with the author. And then finally the section on measuring success encompasses the lifecycle of a project and the metrics you use to keep track of health and accomplishment as chapter on defining healthy communities helps you understand what a healthy open source community looks like coming from as high level right down to hands-on inquiries. These inquiries take a part and consider many aspects of a project as viewed from the outside looking in and from inside the project looking at itself. The chapter understanding community metrics is a discussion of the many types of topics to measure with questions for, question suggestions for each topic followed by a few sections on choosing metrics for your project. And we have a worksheet in our Git repo to work with this chapter. And finally, we have the chapter on announcing software releases, which is a step-by-step milestone-based process with templates for preparing for and announcing a software release. And rounding things out, we have the contributors chapters sections which include the chapter writers, all those who worked on the chapters themselves and then the project teams, primarily the editorial team that led the completion. All right, so let's go back to the presentation from here. And then as we come toward the end, let's just circle back for a moment to talk about the open source way community itself. Now it is a slightly odd thing to say we have a community of practice around communities of practice, but that in a very real sense is what this is. We are defining and curating principles, practices, and stories, reasons why, from across many open source projects, which are themselves communities of practice. And we're doing this as a community of practice ourselves. Anyway, our first efforts around curating, creating, finding and merging in useful resources for our useful users, such as guidebooks and courses. And then we'll continue expanding outward, make updates to the 2.x series with a print version and listen to what the user's contributors want next. A common tool of communities of practice is a meeting or a meetup to include presentations by members or special guests. With discussions among members about related topics. And I'm looking forward to starting those, the schedule for those later in 2021 and going through to 2022. So now we're coming to the questions and answers period. And in case you don't have any questions here, so I thought of all of you out of the material I didn't have time to include in the main presentation. And as I finish out, I just want to put the attributions of the images used in the presentation today, including the attribution, the attribution for the CC image here itself. And finally, thank you for spending your time with me and for sharing your attention. If you have any questions, feel free to reach out to me. You can find me on their social media as Quaid or you can email me at kwaid at redat.com. And I'm now available for your questions.


Hello and welcome to the Kubernetes working group for multi-tenancy. Today we're going to be doing a project overview in which we will cover how you can get involved with our working group, which is part of the upstream Kubernetes community. And we will also be going over some of the three main projects that the working group has been working on, information about how you can use them, how you can get involved in contributing to them. Just to quickly kick off for the working group, the chairs are me and Tasha Drew. I am the director of product incubation at the Mware. I also work on project, I used to work on project Pacific. I was responsible for launching the Tanzu Kubernetes Grid Service for vSphere. My co-chair is Sanjeev Rampal. He's a principal engineer at Cisco. And then we have the project leads on this, on this presentation today. We have Adrienne Ludwin from Google, who works on the hierarchical namespace controller. We have Faye Guo from the virtual clusters and tenant controller project. He's at Alibaba. And then we have Jin Baguadia, who works on the multi-tenancy benchmarks. And he is the founder and CEO at Nermada. And each of those project leads will be giving a more detailed introduction of both themselves and the projects later in this presentation. So you may be wondering how you can get involved in the multi-tenancy working group. So for new contributors or people who are interested in getting started with open source, what I would, my number one recommendation is join our Google group. So that's the second link on this slide. You can go to groups.google.com and just search for us for working group, multi-tenancy, Kubernetes. When you join the Google group, that will give you access to our documents, our meeting agendas. You'll see links to go and watch our meetings that we've posted to YouTube. We'll post a link to this presentation in that same YouTube channel as well. But you will also get a calendar invitation to all of our meetings. And so a lot of times people get really confused about how to join our meetings. We have bi-weekly meetings where we go over project status. You can come and present anything you're working on by adding it to the agenda or suggesting on the mailing list that you'd like to talk about something. But that calendar invitation to that meeting and the Zoom link will all come to you if you just join our Google group. So if you're not going to do anything else, but you want to join that, definitely join the Google group. It may take a few days for that calendar invitation to show up. There's some latency in the system. Adrienne's working on it. Google will solve it any day now. But yeah, just be patient. I promise if you join the Google group, you will get that invitation. We're also in the Kubernetes Slack in our multi-tenancy channel. You can join that by going to slack.k8s.io. And yeah, we also have a GitHub repo where all of this code is available. You see that link at the bottom of this slide. So just kubernetes-sigs-multi-tenancy. So yep, that's how you can find us. That's how you can talk with us more. We are part of the open-source community. Super happy to have more people involved, more interest, and new ideas and new projects as well. So yeah, join us. And now over to Adrienne to do a deep dive into HNC. Thanks, Tasha. So I'm Adrienne. I work at Google Waterloo up here in sunny and warm Canada. Come visit next year. And I'll be talking a little bit about the hierarchical namespace controller, which is our project to add a concept of hierarchy to the Kubernetes namespaces that you know and love. So why would you want to do this? Well, the reason is that namespaces are the foundations for all policies in Kubernetes. So RBAC, network policies, quota, limit ranges, and also most of the CRDs that you create will have namespace scope as well, unless they're a cluster-wide operator. So everything really centers around namespaces. And yeah, sometimes you can subdivide things at a subnamespace like within a namespace, I should say. But by and large, most of these features either work best or only work at the namespace level. And you can see my talk from QCon EU from earlier this summer that goes into this in more detail. So namespaces are great, but sometimes you want policies across namespaces, such as to represent a tenant who has access to multiple namespaces in your cluster. So adding hierarchy to namespaces is a great way to enforce this idea of ownership and express tenancy, and also allows you to create self-service, what we call subnamespaces, which give you permission to create a namespace, even if you don't have cluster-level privileges, all while adding as little as possible to core Kubernetes. So agency, it's a great solution if lots of teams want to share a single cluster. And if you combine with a get-off solution to spread policies across multiple clusters, that's when it works well in a multi-cluster environment as well. So how does this work? Well, what it does is it creates a little agency, gives you this little customer resource that you can use to take existing namespaces and arrange them into parent-child relationships. And we call these full namespaces because you can modify the hierarchy. Or as I mentioned, you can create these self-service, what we call subnamespaces, where you just have permission to create a subnamespace underneath this particular existing namespace, and then that one's locked in place. You can't move it around. And so that's really good for those sort of self-serve contexts. And then once you have that, you can create policies in the ancestor namespaces, and they will just get copied into the descendants. You can pick which ones get copied in a cluster-wide config. Things like RBAC, limit ranges, network policies. And agency also puts some guaranteed labels onto the namespaces that mirrors the hierarchy. And you can use those as label selectors and things like network policies to get that kind of hierarchical enforcement. As I mentioned, I gave a talk that went into agency in-depth at QConiU. It's on YouTube. It's fantastic if I may say so myself. So please go look at it. But we are not sitting still, and we've been working pretty hard ever since then. So the big changes since that talk have been, well, the agency has been increasing in stability as we get more users, more people evaluating it, trying to break it and poke it in weird ways, which is great. We're finding some corner cases and getting rid of some of the patches that made it harder to use. We are adding exceptions and selectors. What this means is that, remember how I just said you put an object in an ancestor namespace that gets copied to all of the descendants? Well, sometimes you don't want it to go to all the descendants because strict hierarchies are too restrictive. So with exceptions, you can basically put a label selector on objects and that will stop it from being propagated everywhere in the hierarchy or even to know where at all if you don't want it for some reason. The last thing that we're adding is an improved API. So we did an API review after the API grown in a sort of ad hoc way for about a year. It survived pretty well, but there were a couple of nice changes that we made, things to make it more Kubernetes compliant. And so we're introducing this in the next version, which is 0.6, not gonna be, we don't think there will be many changes before we go to a beta. And if you already have each NC installed, we're gonna upgrade all of your objects for you automatically. So if you wanna get this, you do not need to get a new version of Kubernetes. It's just an add-on, so it's pretty easy. You can add it to any Kubernetes 15 cluster. I think it's on point and we'll be switching that to 116. For, if you want it on open source, you can go to that multi-tenancy repo that Tasha mentioned and just click through to HNC or go to the releases page and grab it from our releases. If you happen to be using GKE or Anthos, then you can get it as a product called hierarchy controller in config sync or Anthos config management. And it comes with a really nice plugin that you can install using crew, which is cool and it's available for Linux and Mac OS. If you wanna learn more about this, as I mentioned, I have the video from QConIU. Just after that, I wrote a blog post on kubernetes.io. So please go check that out and read through and learn more about the thinking behind HNC and the concepts around it. And if you would like to contribute, we are looking for contributors who wanna work on features that we like the idea of but we haven't quite been able to get to yet, things like setting us per subtree configuration. If you only want secrets to be propagated in one subtree but not another, creating subnets spaces with default policies that are not inherited, hierarchical resource code. Lots of people talk about that one and just generally improving productionization support. I was actually working on Prometheus today, but more eyes are always welcome, plus more to help with testing, more help with documentation, any patches that you wanna provide, we are always looking for people who want to help out with that kind of stuff. And so please stick around and I hope to hear your questions afterwards. And with that, I will pass it over to Faye to talk about virtual clusters. Just quick check, can you guys see the screen? Okay, so, hello everyone, my name is Faye. I come from Alibaba. In the past one and a half year, I was working closely with the multi-tenancy working group or project called Virtual Cluster. As Ingrid mentioned in previous presentation, the Kubernetes namespace is the primary API abstraction to support multi-tenancy. But by sharing for many tenants, users to share one API server themselves bring some problem that cannot easily handle the by namespace. But then they may have a performance interference between among each other. And when we really use namespace to organize all the resources and only give tenancy users to access to namespace, it is hard for them to create a cluster of resource, such as CRD or Web Hooker Central, which gives some trouble for their management stack. I see, we do see some cases that the namespace-based isolation is good enough, but we do see some other cases, people may want very strict or complete isolation and they won't have a solution which is compatible with the existing Kubernetes API. So people may do this by just creating individual, you know, cluster of the tenant, but in that solution, there is a problem that if each people has individual cluster by managing their individual nodes, it is harder to do the global optimization for the node utilization. So ideally, we'd like to have kind of complete control plan isolation solution where we can share the node resource among all the tenants. As I said before, we wish the solution has almost zero integration efforts for the existing system, which means we'd like to have a solution that is fully compatible with the existing Kubernetes APIs. In this project, so we introduce a new kind of architect for the virtual cluster. In short, the idea is that we will have a tenant operator which we are assigned a dedicated control plan for each individual tenant and the tenant, which we call the tenant master, the goal of the tenant master is to do, to maintain all the objects that are created by the tenant users. And there is a single controller which synchronize all the tenant created objects from the tenant master to a super master which is the Kubernetes cluster which manages the actual node resource. So in order for the different tenant to call the Kubernetes API to access or monitor the pod or do the logging or excc API code to the tenant in the past, we introduce a component of Covian agent, which proxy all the tenant request to the Kubernetes APIs. From a high level perspective, you look at this architecture. Ideally, the tenant master is the object state maintainer and the super master is can be as abstract as a resource provider only. It only provided a part of resource to each tenant users. With this solution, it is clear that with this solution, each tenant user has a complete view isolation. It won't be available for all the objects that are created by other tenants since they don't have direct access to the super master at all. With this solution, we also limited the velocity radius. If any tenants hit any security vulnerability, only that tenants get affected and other tenants won't be get affected. Also with this approach, since each tenant user has a dedicated control plan, it will have access to all the resources that presented in the tenant master, including all the CRD scope resource, RBAC control, et cetera. Since super master only works as a part of resource provider, it doesn't involves in the control plan management step. So this is what we do in the virtual cluster. What the virtual cluster really does from the high level architecture perspective.  At this moment, among all the three major components, tenant operator, single operator, and a VM agent, the single controller and the VM agent are pretty much as of now. They are kind of production ready. We are actually working on switching the tenant operator to a new cluster API based design and implementation. The idea is that we are trying to provide a more formal way to do the tenant master provisioning management by leveraging the all existing cluster API offering that cluster API C groups has been done in the past about a half year. They have a very good tooling around it and we want to follow their specification about how to define a tenant master component. This project was starting as a multi-faceted working group incubator project. And now we already get a C cluster API support and we are working on moving the entire code to a new repo called cluster API provider nested. So all the future development and the enhancement we have been done in that repo and this is an open source project and this is a community effort. We are very welcome. Anybody who are interested in this project could join the project by finding the issue by giving VC virtual cluster a try. So I'm happy to help people to use it and making this project better. So next I'm going to hand over to Jim for the next presentation. Thank you, Faye. Yeah, so hi everyone. I'm Jim Baguardia and I lead the multi-tenancy benchmarking effort within this group. And so both Adrian and Faye showed us different ways of implementing multi-tenancy. And as everyone probably knows, there's several constructs and Kubernetes that you can use for security, for multi-tenancy, for segmentation isolation. But one of the common challenges that we heard from folks in the community from customers is how do I know that my cluster is properly configured for multi-tenancy? Are there ways to measure this, test this and report this? So the benchmarking effort, our focus is to create a set of guidelines for, first off, of course, configuring multi-tenancy and then to also create tools to easily be able to validate and test whether multi-tenancy is properly implemented. So in terms of what are some of the definitions we have come up with and these are, of course, things that are evolving in the community. But right now we have two profile levels defined where the first profile level, the idea is that given any namespace, independently of how this namespace was configured, how do you make sure that that namespace has the right constructs as all of the right, again, the isolation, the segmentation required for multi-tenancy different teams using that same cluster. And then with the profile level too, the idea is to extend the first profile level and also add self-service for that. So not only do we allow in that profile level teams to be able to isolate and segment their workloads but also to be able to then do self-service operations like maybe defining custom network policies for their application, custom roles, things like that that would be required across different multi-tenancy constructs. Also in terms of the categories of the benchmarks and tests, we identified seven different categories. So everything from isolating the control plane from workloads, isolating tenant workloads from each other, network isolation, storage isolation, making sure host resources are not accessed from pods. So these are following like pod security best practices, ensuring fairness through configuring resource quotas. And then finally, self-service, which is profile level too, as I was discussing earlier. And then in terms of the tests, what we saw is just checking configuration is not always enough because there's an increasingly number of different ways. Just take, for example, network segmentation. There's a number of different ways you could configure a network segmentation or implemented. So instead of just checking for configuration, what we also do is run some behavioral tests in terms of how multi-tenancy is configured within the cluster. So today, the tests are mostly focused on namespace-based isolation, but as the virtual cluster project evolves, we'll also be looking at adding behavioral tests to be able to check on that. So with that, and I also mentioned that part of the effort of this track was to also come up with the validation tool. So we have a kubectl plugin which you can run on any cluster. It just requires a namespace and a role, and I'll give a quick demo of this. And what it will do is it will allow us to check and it will run about 15 or so different tests to ensure that multi-tenancy is properly configured. And this list of tests, again, all of this is on our repo. So feel free to browse through, look at the details, provide feedback and comments there. But let me just show what this looks like in action and then we'll come back and talk a little bit about the roadmap, et cetera. So here I have already a cluster configured and what I'm gonna do just in sake of time is I'm gonna show what this looks like when running. So here I'm using a particular user role. This is a tenant admin alley and the namespace here is test. So there's, it's gonna go, the MTB plugin is gonna run through a number of tests. And as you can see, what happened initially was it's a few of the tests pass because I have a quota configured, I have some limits configured, but a lot of the tests are failing at the moment, right? So what I can do and all of this, by the way, is documented on our web page. So if you browse into the project and if you look at the MTB webpage, you will see instructions for going through this exact same demo. But I'm gonna apply some policies now to for segmentation isolation within my cluster. I'm using Kevrono policies, there's also OPA gatekeeper policies, so you can choose which policies you apply. And as you can see, what these are doing is they're providing host isolation. There's different policies for also disallowing, things like adding capabilities to your pod, et cetera. So with that, let's run these tests again and what we would expect to happen is we would get much better results this time around as we're running the tool. And since we have the policy engine in place, which is guaranteeing some isolation segmentation. So this time, and as expected, we went through all of these 15 tests, we're seeing a pass. So this gives a very easy way for us to now validate that the namespace is properly configured. So a few of the things that we're working on and this is where, again, we're looking for folks to join in and help and extend some of this or even just contribute by giving feedback is we wanna add more behavioral tests for storage and networking. There are some pending requests for also converting this tool to run inside of the cluster and produce periodic reports using some custom resource for reporting. And then also, there's interest from other working groups to be able to reuse the benchmarking tool for auditing and benchmarking across different other types of security standards like the pod security levels, things of that nature. So that's a quick overview of the multi-tendency benchmarking project. And I think up front, Tasha gave some links. I'm just showing the repo links and other things again but we're here and we're open to take your questions in chat. So feel free to jump in and ask questions there.


What's up guys? My name is Michael and welcome to my YouTube channel. Today, we are going to go over this hacker rank top view. So this is a question that's super ambiguous and doesn't really make any sense. I don't even know why it's on the easy category. Basically, we're given the point of a binary tree. We need to we need to print the top view. And they don't tell you anything about this. So if you were just to look at this tree, we have one, two, five, three, six, and four. The top view is one, two, five, and six. And you would think that it's just traversing to the right. But that's not what it's doing. So I'm going to explain what they mean by top view, because this is kind of ridiculously hard to understand. So given their test cases, right, given their test cases, hold up, I just erased this, given their test cases. This is what they mean by top view. So this is your test case of their tree one, two, five, three, six, and four. What they mean is if you are to draw a line from the top all the way to the bottom for every single node you see, right, just draw a line here. What is the first node that you encounter every single time? Well, the answer is simple, the first know that you see drawing a line from top to bottom, viewing it from the top node, right for you for you in this way is going to be one, two, five, and six. Okay, because that that's where it is from the top node, three and four, you don't see it viewing from the top. So that's why it is like that. So here the answer would be one, two, five, and six. Okay, so how do you do this question? So I actually had trouble doing this problem myself. So I'm just going to explain the gist of it. And then I'll go over the code. Basically, what we're going to do is we're going to run breath first search. And every time we go down a level on the right side, we're going to increase level by one. And every time we go traverse to the left side, that we see, you know, we're going to decrease the level by one. Okay, so then what's what's going to happen is that every time we insert this into a to a sorted map, the first level that we see, we're just going to print that note. Okay, like the first value that has the same level, we're going to print that note. So essentially, what we're doing is like, we're, we're just going to keep traversing down and then anything that's like has the same level. As you see, as you can see, there's like, two, three, would have like the same level here. And then five and four would have like the same level, because if you go left minus one, then plus one, you would have zero, right? From five. So that's why it would be the same level. Right. So then if we add this into a sorted map, you would see five first. Okay. So that's what they mean by this. So yeah, I'll just explain the code now. So here we have a queue that that's going to represent a level pair level and then the current node. And we're going to push the pair of zero and the root. So what this is doing is that zero is starting as the root has the level of zero. Okay. The root has a level zero. That's where we push this onto the queue. Our map is going to represent a sorted pair of map mapping the current level that you're at. And then the node first node that you see. So then when we loop through inside the map, and we add the levels there, whichever we see first is going to be the value that we're going to print out. Okay. Okay, then what we're going to do is while the queue is not empty. So this is breath first search, we can get the front of the node, the front of the queue. If the node is not null, we're going to insert this into our map at position I. Yeah, we're going to insert answer that insert I which is going to be like the pair that we see into our map. And then we're going to push the plus one to the current level. When we go to the right side, and then minus one of the current level, we go to the left side. So we're going to push both of those onto the queue. And then what we're doing is we're just popping the queue and then we get the front of the queue again. In the end, whichever we see first inside the map is going to we're just going to print out the data at that data. So let's actually just go over like an example of this. I have this on the left side and have this on the right side. So first we're pushing the first value. So I'm screaming outside. Anyway, here's our queue. And then we're going to have our map on the bottom. So this is going to be a map. This is going to be probably hard to look at but bear with me. All right, we push the current route, which is going to be zero. And then the route, which is going to be one. Okay, so the first level starts at zero. And one is going to be the route. Okay, the date our current node. All right, we're going to get the first and first value of our queue, which is going to be zero one. Is this node empty? Is it not? Is it not equal to null? Right? So it's not equal to null. So what we're going to do is we're going to insert this into our map. So our map is going to now have a pair zero one. So it's going to have in this map, it's going to be like zero one. Okay. One is representing the data of our node. Okay, zero represents the current level. Alright, now we're going to pop this from our queue. So oh, yeah, my bad, I forgot to insert it. So once we insert zero one, we're going to insert the level plus one of the right node, and then we're going to do minus one for the left, left note. So plus one of the level, the current level zero. So we're going to plus one is going to be plus one. So it's going to be one. And then we got to push the right node. So it's going to be two. Okay, now we're going to minus one on the left side. So zero minus one is going to be negative one. So it's going to be negative one left side. And then this negative one's left side is going to be no, like, there's nothing here on the left side of one. So it's going to be no. Okay. Now we're now what it's going to do, it's going to pop the first value of our queue. And then we're going to go to the front. Alright, now we're at so yeah, now we're at this one. Now we're at 12. So we're at this node. Now is two not equal to null. It's not. So what we're going to do is we're going to push the pair of we're going to add two to our map. So our map is going to have, let me actually move this up here. Yeah. So now our map is going to have a map of one and then two as our node, right? So we insert this into our map. And then we're going to push the right side of our two, which is going to be five. And we're going to plus one to the current level of it. So one plus one, it will be two. And then we're going to push push the left side of it, which is going to be minus one of the current level we're at. So plus one minus one is going to be zero. And then second to the left here, right is null, right to the left side is null. So we're just going to be null. Okay. Alright, now we're going to pop the first value off of our queue. So this is going to be popped. And we're gonna get the front of our queue, which is going to be negative one null. So is the second one equal to no pointer? Yes, it is. So all we do is we're just going to pop it, pop this value off. And then we're going to get the front value of two and five, level two and five. So here is that slow to five. Is this is five not equal to null? So yes, it's not equal to those we're going to insert two and five to our two hour map, right? And then we're going to push the left side of five. So right now we're at five, right? We're going to push it's left side and it's right side of six. So let's push the right side of six first. So that's this part plus one. So what is the level of two? Level of five is two. So we're going to plus one to on the right side, which is going to be three. And we push six. Okay, right? So that's, that's this six, right? And then we're going to push the left side, we're just going to be two minus one, which is one and we push three. Okay, so that's this left side. So two minus one is one. Okay, now we pop two five out. So two fives popped out, we're gonna get the first value of null, which is two five zero null. And we get to the first value to the top again. Yeah, as the second one, no, it is so we just pop it and get the front of our note again, which is three six. So now we're at this part. Okay, so remember that this this left side is the level, the right side is the actual node. Alright, don't confuse this three with this level, this three, this is the level that we're at, not the actual thing. Alright, so now we're at three six is this null. No, it's not no, we're gonna insert three, six or a thing. Okay, now we're going to push its left left child and push the right child and the left child, and they're both actually negative. So it's going to be like four and no, four null. I'm actually move this up. Okay, so it's four, four null, level four, no, and then it'll be what's three minus one, it will be two. So level two, and then no. Okay, so that's pushing null. See, there's like no here and no here. That's pushing those levels. Um, yeah. Now, after we push this, we're going to pop this three, one three off. So one three is off. And then we get the front, which is going to be four, four null. And then a four null is, see, there's nothing, there's no here. So we're going to pop that off. And then after we pop four, no off, we get the front of the list, which is going to be I believe did we pop three six off? And then we pop that off also. Yeah, we're gonna have to know and after to know we're gonna we're gonna just pop this off. So yeah, there's nothing there because right side is null. So we're not going to do anything. So we just pop that off. So in the end, our map is going to be zero one, two, three. And then our values is going to be, we just go through and print these values, which is one, two, five, and six. And I think that's the gist of it. Yeah, one, two, five, six. So yeah, that's pretty much the whole solution of this problem. Basically, we're just going to keep pushing a pair of the left side. We're going to map the current level we're on and then the pair of the right side of the null. Running breath for search, push the level and the node that we're on. And then yeah, we're gonna insert that into a map. At the end, we print out the map and the map is just going to show the first the first node that we encounter. So that's going to be the the node that that we see from top to bottom. Yeah, hope you guys enjoy this video, rate, com, subscribe. I'll check you guys later. Peace.


Hey Tyra, it's Gabrielle over at Oxmore Toyota. Just wanted to send you over video greeting just to introduce myself I did receive your request that you are looking for a new Camry I just want to go over some information with you If you click go ahead and give me a call my phone number is<PHONE_NUMBER> Thanks. Bye