 I've been doing open source software for about 20 years now and I've been at Google for the last 13 years and amazingly enough Google pays me to do open source software development full time. It's pretty much my dream job. Now how did I get started? Like why did I start writing software and how did I get started in open source development? Well I started as a systems administrator and a really lazy systems administrator who wanted to automate everything ruthlessly. If I had to do something twice I was going to write a script in it whether it be Bash or Pearl or Ruby and then eventually go. I ruthlessly automated and that's what Google hired me to do and it all started because when I was 12 years old I used bulletin board systems. They're kind of a pre-internet thing where you would dial someone's modem in someone else's house and you would chat with one another, share files and I kind of fell in love with this idea of using technology to connect people from far away and I knew by about age 13 that I wanted to be a systems administrator. I wanted to use technology to connect people. I was inspired by how useful these tools were and how easy they were to use and I think all of you probably came into being software engineers. Similarly you used a piece of software as a kid maybe a little older and you were inspired. This is so cool. I want to build cool stuff too. That's a bit about me. Rewinding a little further so yeah there's a wonderful picture of me in fourth grade. I was actually born in Sweden. Swedish was my first language but I moved to America at a young age and learning English was very painful. There were so many misunderstandings. I had to learn English when I was five and I learned from a lot of bad 1980s movies like Police Academy and Fletch and really bad movies and I had a very bad vocabulary as a five-year-old in school and it caused a lot of problems and it helped set me on this path of realizing that almost all conflicts and problems that people have are simple misunderstandings. A lot of cultural misunderstandings, language misunderstandings, they're we're full of it and so when I had kids of my own they I highly encourage them to go to a immersion a language immersion school so that I can inflict that same pain of complete misunderstanding and that that growth model of always feeling like you have no idea what's going on in the world but you have to struggle through it anyways. Now I asked my oldest you know there's in I live in San Francisco there's a lot of different languages you can choose from they chose Cantonese. Why did she choose Cantonese? Because she likes dumplings so so that's Chun Tin Sing and I am Chun Tomasi but anyways so so in thinking about this talk I was really thinking a lot about the role of a programmer and how many of you here I've read The Mythical Man Month it's one of my favorite books about programming yes it's old I mean a lot of it takes place about like describing what happened in the 1960s and 70s and what you realize when you read this book is that we haven't solved very many of the problems that he talked about and one of my favorite quotes from it is that the programmer's role is to deliver satisfaction of a user need rather than any tangible product and when I've managed other software engineers who complain about oh I hate when they change the requirements and why do I have to talk to users and you know why do I have to deal with people as a software engineer your role is delivering satisfaction it's not the code it's it's the satisfaction it's meeting a need and so I my own interpretation of this is that successful software adapts to the needs of users and successful adaptation requires empathy now empathy in terms of my talk is understanding the needs of the rest of the world I live in San Francisco I have great internet access I speak English kubernetes is pretty easy for me compared to most of the world I feel so some tools to gather empathy that I that I recommend is surveys you know actually asking your users what do you want and you know some sort of like freeform way performing user journeys where you where you actually sit there and watch a user try to use your tool a user who's never used your tool who isn't who is not aware of it and say use this and then you write down every step that they took and every bug that they surfaced because they will surface a lot even if your software is really good if it's your first user journey it will be painful the first time I did a user journey for mini cube and I will and I wrote down all the steps a windows user had to take to run mini cube I I wanted to cry I think it was 63 steps to a working cluster and it was just like this is not the way the tool is supposed to work and then get hub issues of course reading through all of your issues and trying to discuss with the people on what they're what they're saying one of the problems with all these approaches though is what if like me you know when I was learning English I was embarrassed to speak and then eventually when I moved back to Sweden I was embarrassed to speak Swedish because I'd forgotten so much Swedish what if like me you are too embarrassed to speak you lose you the people who are too embarrassed to speak do not answer surveys do not participate in user journeys they don't open get hub issues and we see this a lot for people whose native language is not the native language of that project so you have a lot of work to do on that part and that's where I wanted to discuss the next billion so who am I calling the next billion users in this case and it's 43% of the world that did not use the internet last year that's a huge untapped market for not only users of your project but members of kubernetes future software engineers there's a whole nearly half of the world out there that doesn't yet know what this is all about why we're meeting here today the next billion users it's unlikely they're going to speak English I mean it's roughly 20 I mean it depends on like how much English they speak but most statistics put it around 20% that speak English so that's 80% that do not have a working English vocabulary the next billion users probably they don't have gigabit ethernet it'd be nice this the average speed though is surprisingly good I was expecting like maybe megabit two megabit the actual global average right now at least according to stats I found was closer to nine megabit which is not too bad but when I look at it in terms of how long is it going to take to install like to actually download all the images for minicube your average user in Egypt is going to wait about an hour to download the images and if you're like you're wanting to teach minicube you they're like I want to learn kubernetes I'm going to install minicube and then it's like okay now wait an hour and I don't are they going to be interested after that I don't know I the first time I downloaded minicube and tried to use it I don't know if I was that interested so the next billion users are not linux experts well at least not yet if you look at operating system statistics you'll see it like china for instance is a great case where the desktop share for windows is depending on the stats about 90 which is actually much more than the united states the share of mac users in china is much lower than in the united states which is a shame because like in minicube's case our best working platform is mac os but most of the world does not run mac os so a substantial portion of this next generation will be inspired to become programmers like us and we really have to be good stewards and help them help them with that effort it's a it's a great equalizer so how do we adapt kubernetes to make it applicable to these next billion users well empathy and accessibility and so empathy by reaching out and trying to get their inputs and accessibility by actually like taking those inputs and making kubernetes work for them um so I would argue you should not have to learn english to use the internet and you should not have to learn english to use kubernetes I think that's one of my my big points if we fail to make kubernetes accessible globally we'll end up with splintered solutions for managing compute resources can you imagine if kubernetes actually came out and is it was the same product it is today but was only available in icelandic it probably wouldn't be that popular but we could easily see a world that if we didn't try to make things globally applicable that iceland could have its own kubernetes that almost nobody uses because it's a tiny country and that china could have its own kubernetes and the u.s could have its own I saw this in the 1990s with with unix back then every different hardware manufacturer had their own unix flavor sti had iris ibeam had aix there's hpux uh decaltrix next step if you wanted to change if you wanted a feature that was available on a unix system that your machine couldn't run you would have to buy a new machine and then linux and the bsds they all came around and it completely changed the environment and they're with the exception of mac os they're all effectively dead thankfully um so what i would like to ask you to to consider is to be part of the virtual this virtuous cycle if you want to make the most of your investment in kubernetes you have to share with the community and because you have a really special unique viewpoint and circumstances and even if it feels uncomfortable to share it's going to make kubernetes a better product so back to minicube for a moment um how many people in this room have not used minicube all right then i probably okay there's a handful of you so minicube is is like a i i liken it to a a computer game like kerbal space program where you want to do a simulation of a production environment and you want to do it locally it's a sig cluster lifecycle project um you basically you can just do minicube start and you get a working kubernetes cluster locally or you can go into the options screen and tune all sorts of things um and so it's great for developers in that case but when we've done surveys we've seen that about 30 percent of minicube users are installing it just to learn kubernetes they're not developers yet they want to see what it's all about and i was one of those people when i was you know when i saw an opportunity to join a kubernetes group i was like let me learn kubernetes minicube looks easy and then i got really sad um so i'm going to give a little demo here to kind of demonstrate some of the things we've been doing lately and we'll just leave it out why don't we just set some memory so one of the things you might notice that we've done lately is we we've done language localization the translations might look a little strange um we currently have one issue in that our string interpolation uh currently has to be in the same order as English so when you say like kubernetes 14 on docker when we translate to another language we also have to have the same order we have to move to a more flexible format where we're actually using like named variables everywhere and so that will come very soon um so in fact we actually have this turned off by default in the current release until we get that issue solved but you can basically see here uh two of the features that we've done recently which is yeah we're starting minicube we've selected an image repository that works in china we selected here uh image country image mirror country china there are still quirks with chinese access because we still have to download the iso file from google uh and it will switch to get hooked very very soon these are the kinds of experiences that i learned when i come and visit china for the first time um i apologize for all the pain that we have inflicted on you so um but anyways in a moment we will end up with a working kubernetes cluster and while that's going i will go on to another slide um so what minicube aims to deliver are all the kubernetes features that actually fit on a single machine uh it actually turns out this is pretty much everything you can run into memory restrictions if you run out of memory uh istio users tend to run out of memory because istio may need more memory than you have on a single node um but so how this how minicube works is we have a machine driver uh in this case virtual box that connect uh that we basically it basically starts the ignition sequence it starts a minicube vm uh minicube iso we have a boot strapper in this case it's always cube atom uh you get to select your container runtime like cryo or container d g visor uh your kubernetes version uh whatever add-ons you want like ingress and then your application at the end um so we have a kind of ridiculous support matrix um we so the kubernetes official policy is that kubernetes only supports the last three versions uh we recognize that there are a lot of legacy users out there so we test the last six versions currently uh we will always guarantee the last three versions but we will try to do six if if it's viable uh we support many runtimes uh kata we don't support yet there are plans for 2019 intel has been working on some contributions there um for boot strappers we only do cube adm right now but we are also prototyping with kinder uh we select we have a bunch of vm drivers that we support um we would like to do docker and podman uh as vm free drivers soon operating systems are as expected uh i hope that continuous testing will be re-enabled on windows next week um and as far as architectures most users are on 64 bit uh x86 64 uh though there are people who are using mini cube on arm 64 and even s nine or s 390 x for ibm mainframes so one of the things that i've really thought about because my first start with mini cube was really tough was thinking about causes of friction and it really made me think back to being a child and learning a new language which was that as with all things human most software infraction is due to a series of simple misunderstandings some of the misunderstandings are from a user to a developer but some of the misunderstandings are from a developer to a user not understanding the use cases of their users um i i i find the latter to be um the most frustrating i think because it it shows a lack of of trying in a way um so here i have my my local kubernetes up and running and cube cuddle is also localized already so um i mean nothing i really need to show there but uh so for mini cube you can start the dashboard um but one thing i wanted to show that was kind of a recent feature is mini cube recently added this tunnel mode and i recognize that the font size is really tiny um the mini cube tunnel what it does is it's primarily used for people using load balancer uh load balancers sorry load balancer types within kubernetes um it will make your load balancers appear local and it'll also actually i'll just do this one of the things that we've recently added for mac users although sorry about that uh so one of the fun things is that you'll notice at least on mac is that dns resolution from mac works directly into your kubernetes cluster if the tunnel is running so if you are if you are dealing with load balancer type apps uh this is a really handy way to do local development we would love to get this feature added on other platforms uh and help is certainly welcome there uh this was just a random contribution from a an end user um to do it for mac so so so the strategy for mini cube as far as trying to solve these misunderstandings um and really adapt it to the next billion users is to meet users where they are uh whether it be language environment documentation uh or a skill level um we're kind of attacking on all fronts there now when i first proposed to give this talk in april i was sure that i was going to solve all these problems by the time june rolled around and this was going to be my big success story uh it turns out that the world is complicated and this is very much a work in progress um so language um i did show the localized command lines um we are also working on localized documentation and localized feedback and what does localized feedback even mean uh i will show you for instance if i can this is reliant to the network so uh so we've recently made an effort here when you open a new issue that when you open new issues now in get hub you can open issues in different languages um and this is one of the things one of the ways we're trying to attack that what we found is that most people in the world that use kubernetes like we we see all these downloads from different places we're not actually getting very many bug reports we for a while didn't get very many bug reports from china so i actually didn't know how bad things were um and i think part of this is people will always feel uncomfortable sharing feedback in a language other than their native tongue so we're trying to do this and kind of bear the burden of the translation with the help of the community and trying to understand what these issues are we want everybody to feel comfortable sharing their inputs um and if i can find my slide um and yes we definitely need help on language um it's certainly a community effort um oops uh we'll see so digging a little deeper into how our translation works uh one of the interesting so it turns out that language translation and go is not as straightforward as with other languages the libraries are not as wonderful quite yet as say java or or c plus plus if you want to say for instance extract all the strings that need localization um there are some pretty hacky ways we we chose to go for an ast based approach um where we actually use goes ast parser to parse all the to parse minicube and grab all the messages that we send to the output library it turns out this is both fun fascinating and scary uh the way that how much work actually has to go into this we really want to make this a general library in the future um but what do we do with all the extracted strings well we dump them to a json file and here you can actually see the issue i was talking about where we're still using string substitution in this initial prototype rather than named variables um so but it turns out this format is pretty easy for people to work with at least and then we load this in at start time another part of localizing localization is not just language there's as i'm finding out especially in china uh networking environment is huge um so one of the things that we added earlier was minicube runs offline and it has since one oh um you can copy this directory if you want to have minicube running on a different machine uh than you already have access to we we did get the image mirror country we'd like to make it automatic though uh right now we don't have a way of uh validating the contents of images from other mirrors um we have ideas on how to do this by basically you know pinning pinning to hashes um but we definitely need help there uh as i mentioned earlier we need to move the release iso to get hub uh we've done a lot of work recently to improve proxy support uh it turns out that some of the more popular user support issues are people who have their machine set up to use a proxy and then it tries when we tried to access the api server it's going through the proxy so now we ignore the proxy configs for vm communication um system environment is also important as i mentioned operating systems are different between countries um we would like to make windows a first class operating system when it comes to minicube um that's going to mean me switching my me and others switching our development workstations to windows for a while and ferreting out the bugs and of course getting help um we want to make like windows right now in virtual box is okay but windows on hyper v there's a lot of problems primarily with stopping the vms um we would like to make that and uh wsl2 first class solutions for minicube um part of the wsl2 approach is we want to make vm3 better um i have this goal of minicube start at least after the first start only taking 15 seconds we are far away from that right now uh and part of doing that is uh we'd like to do direct deployments to docker and podman uh very very similar to kind and in fact that's what we're using to prototype we're hoping to build this on top of the kinder library uh and we'll be working with the kind folks uh on doing that so kind is very focused on fast conformance testing and they're laser focused on that there's a lot of features that minicube has that they don't um for instance the switching your runtimes uh flag-based configuration of api server and cubelet and things like that and so we want to build those types of features on top of it but we still are not abandoning the vm-based methodologies because there are still really good cases for vms um great documentation drives adoption uh so we're taking documentation very seriously uh we do have a hugo-based website uh that we have just started rolling out um it doesn't have very much at the moment um because i am still learning on how to do menus in in uh hugo if there are any hugo experts out there i would love your help so yeah uh there's definitely help wanted on the documentation i would like to get all the documentation translated into uh uh you know into the same languages uh that the rest of kubernetes docs have uh and we could definitely use tech writers to review prs for documentation to help us help let us know where we're falling flat in um how we approach skill levels well because minicube is a learning tool for a lot of people in the world we want to make sure that the errors are very actionable um it used to be like when i first started learning minicube that i would get a panic or a backtrace uh and or some inscrutable message you know i didn't necessarily know at the time what the different hypervisors were uh so now we've made it for many errors we actually point users to a specific document to read or get hug issue to read so we basically have this file that is uh a set of regular expressions to say if the error message looks roughly like this give the user this advice uh and that's actually worked really well for lowering the amount of duplicate issues that we get in minicube and lowering the number of issues that we have all together um one of the things we'd also like to do is a single step install right now with minicube chances are you also have to install a hypervisor maybe a machine driver users should not have to learn about machine drivers or vms to use kubernetes why should we make them know that for minicube uh the more you know in in my experience with automation the less you involve users the less you involve like human twill uh the less your support cost and while i love talking to people i really hate going through the same github issues every day so i would like a single step installer that basically just fixes everything for you um and similarly no flags required i would like it so that when you run minicube on a machine if you have hyperkit installed and you don't have virtual box installed it should just default using hyperkit instead of making you set something specific uh it should just start with no flags no matter the no matter the environment uh so a couple other 2019 roadmap items uh multi-node reducing guest vm overhead and moving to prowl we actually have a public roadmap here uh for 2019 um so unsolicited advice uh overcome your embarrassment uh badly translated inputs are better than no inputs even if you have to run your your thing through a translator to open a github issue just do it we want we want to know what's going on project owners have it in their best interest to have your help um projects the project with the most inclusive community wins we've seen this with linux we've seen this with kubernetes um onboarding is as important as coding uh ignore the next billing at your peril um so yeah uh so if you're interested in joining us uh there's a couple of things here uh the survey is embarrassingly not available in china without a vpn you can see that our survey is not as useful as it should be i will work on fixing that but yeah non-english speakers welcome uh feel free to contact me on wechat or twitter so uh any last question or any questions i guess oh here here if i said if i said the image mirror uh language the same yeah uh i can get the image uh show me see image uh in china yes yeah if you said if you said it to cn uh second uh second yes uh if i uh uh uh uh second meaning is that meaning code a uh eight yeah it's it's it's working it's working uh No, no, no. Okay, okay, okay. What is the difference between Mincube and Kana and Kubernetes? Mincube and Cubetim? So Mincube uses Cubetim underneath. So Cubetim is great for running a local Kubernetes on your host. Whereas Mincube runs it inside of a VM so that you can destroy it and recreate it. Cubetim could have, if you run Cubetim on your machine, you could open it up to issues where you might actually like delete files or delete stuff in Docker. Whereas when you're running it inside of VM, it is constrained to that environment. And it's important primarily for running on macOS or Windows. So if you run Mincube with the non-driver, it actually just uses Cubetim underneath on Linux. If you run it with any of the drivers, but it's effectively Cubetim. Any other? Yes, yeah. When will it release? So it's on our roadmap for 2019 to be developed, but it'll probably be at the end of the year. If you are interested, we could really use the help on that. Somebody's made a prototype in the past. We don't have anyone actively working on it that I know of. So I would love to hear from you. Alright, thank you. I'll be outside here if you have any other questions. Thank you.