<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Jorge's Stompbox</title>
 <link href="http://castrojo.github.io/atom.xml" rel="self"/>
 <link href="http://castrojo.github.io/"/>
 <updated>2019-07-22T18:50:48+00:00</updated>
 <id>http://castrojo.github.io</id>
 <author>
   <name></name>
   <email></email>
 </author>

 
 <entry>
   <title>How to video conference without people hating you</title>
   <link href="http://castrojo.github.io/2018/04/23/video-conferencing/"/>
   <updated>2018-04-23T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2018/04/23/video-conferencing</id>
   <content type="html">&lt;p&gt;While video conferencing has been a real boon to productivity there are still &lt;a href=&quot;https://www.youtube.com/watch?v=JMOOG7rWTPg&quot;&gt;lots of things that can go wrong&lt;/a&gt; during a conference video call.&lt;/p&gt;

&lt;p&gt;There are some things that are just plain out of your control, but there are some things that you can control. So, after doing these for the past 15 years or so, here are some tips if you’re just getting into remote work and want to do a better job. Of course I have been guilty of all of these. :D&lt;/p&gt;

&lt;h3 id=&quot;stuff-to-have&quot;&gt;Stuff to have&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Get a Microphone - Other than my desk, chair, and good monitors, this is the number one upgrade you can do. Sound is one of those things that can immediately change the quality of your call. I use a &lt;a href=&quot;https://www.bluedesigns.com/products/yeti/&quot;&gt;Blue Yeti&lt;/a&gt; due to the simplicity of using USB audio, and having a hardware mute button. This way I know &lt;em&gt;for sure&lt;/em&gt; I am muted when there’s a blinking red light in my face. Learn to use your microphone. On my Yeti you speak across the microphone and it has settings for where to pick up the noise from. Adjust these so it sounds correct. Get a &lt;a href=&quot;https://en.wikipedia.org/wiki/Pop_filter&quot;&gt;pop filter&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A Video Camera - Notice I put this second. I can get over a crappy image if the audio is good. The Logitech C-900 series has been my long go to standard for this. It also has dual noise cancelling microphones, which are great for backup (if you’re on a trip), but I will always default to the dedicated microphone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A decent set of headphones - Personal preference. I like open back ones for the home but pack a noise cancelling set for when I am on the road.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What about an integrated headset and microphone? This totally depends on the type. I tend to prefer the full sound of a real microphone but the boom mics on some of these headsets are quite good. If you have awesome heaphones already you can &lt;a href=&quot;https://antlionaudio.com/&quot;&gt;add a modmic&lt;/a&gt; to turn them into headsets. I find that even the most budget dedicated headsets sound better than earbud microphones.&lt;/p&gt;

&lt;h3 id=&quot;stuff-to-get-rid-of&quot;&gt;Stuff to get rid of&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Your shitty earbuds - Seriously. If you’re going to be a remote worker &lt;em&gt;invest in respecting your coworker’s time&lt;/em&gt;. A full hour long design session with you holding up a junky earbud microphone up to your face is not awesome for anybody. They’re fine if you want to use them for listening, but don’t use the mic.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“But this iPhone was $1000, my earbud mic is fine.” Nope. You sound like crap.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;garbage-habits-we-all-hate&quot;&gt;Garbage Habits we all hate&lt;/h3&gt;

&lt;p&gt;If you’re just dialing in to listen then most of these won’t apply to you, however …&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Always join on muted audio. If the platform you use doesn’t do this by default find this setting and enable it.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you don’t have anything to say at that moment, MUTE. Even if you are just sitting there you’re adding ambient noise to the meeting, and when it gets over 10 people this really, really, sucks. This is why I love having a physical mute button, you can always be sure at a glance without digging into settings. I’ve also used a USB switch pedal for mute with limited success.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jumping in from a coffee shop, your work’s cafeteria, or any other place where there’s noise is not cool. And if you work in an open office all you’re doing is broadcasting to everyone else in the room that your place of employment doesn’t take developer productivity seriously.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;“Oh I will use my external speakers and built in microphone and adjust the levels and it will sound fine.” - No, it won’t, you sound like a hot mess, put on your headset and use the microphone.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you use your built-in microphone on your laptop and you start typing while you are talking EVERYBODY WILL HATE YOU.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you’re going to dial in from the back on an Uber or from a bus, and you have to talk or present, just don’t come. Ask someone to run the meeting for you or reschedule. You’re just wasting everyone’s time if you think we want to hear you sprinting down a terminal to catch your flight.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;And if you’re that person sitting on the plane in the meeting and people have to hear whatever thing you’re working on, they will hate you for the entire flight.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;treat-video-conferencing-like-you-do-everything-else-at-work&quot;&gt;Treat video conferencing like you do everything else at work&lt;/h2&gt;

&lt;p&gt;We invest in our computers and our developer tools, think seriously about putting your video conferencing footprint in that namespace. There is a good chance no one will notice that you always sound good, but it’s one of those background quality things that just makes everyone more productive. Besides, think of the money you’ve spent on your laptop and everything else to make you better at work, better audio gear is a &lt;em&gt;good investment&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In the real world, sometimes you just have to travel and you find yourself stuck on a laptop on hotel wireless in a corner trying to your job, but I strive to make that situation the exception!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Kubernetes Ask Me Anything on Reddit</title>
   <link href="http://castrojo.github.io/2018/04/10/kubernetes-ama/"/>
   <updated>2018-04-10T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2018/04/10/kubernetes-ama</id>
   <content type="html">&lt;p&gt;A bunch of Kubernetes developers are doing an &lt;a href=&quot;https://redd.it/8b7f0x&quot;&gt;Ask Me Anything&lt;/a&gt; today on Reddit if you’re interested in asking any questions, hope to see you there!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Updating your CNCF Developer Affiliation</title>
   <link href="http://castrojo.github.io/2018/01/29/updating-your-cncf-developer-affiliation/"/>
   <updated>2018-01-29T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2018/01/29/updating-your-cncf-developer-affiliation</id>
   <content type="html">&lt;p&gt;The &lt;a href=&quot;http://cncf.io&quot;&gt;Cloud Native Computing Foundation&lt;/a&gt; uses &lt;a href=&quot;https://github.com/cncf/gitdm&quot;&gt;gitdm&lt;/a&gt; to figue out who is contributing and from where. This is used to generate reports and so forth.&lt;/p&gt;

&lt;p&gt;There is a &lt;a href=&quot;https://github.com/cncf/gitdm/blob/master/developers_affiliations.txt&quot;&gt;huge text file&lt;/a&gt; where they are mapping email addresses used and affiliation. It probably doesn’t hurt to check your entry, for example, here’s mine:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Jorge O. Castro*: jorge.castro!gmail.com
Lemon Ice
Lemon Location City until 2017-05-01
Lemon Travel Smart Vacation Club until 2015-06-01
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Whoa? What? This is what a corrected entry looks like, as you can see it takes into account where you used to work for correctness:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Jorge O. Castro*: jorge!heptio.com, jorge!ubuntu.com, jorge.castro!gmail.com
Heptio
Canonical until 2017-03-31
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;As an aside this also really makes a nice rolodex for looking up people. :D&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using kubeadm to upgrade Kubernetes</title>
   <link href="http://castrojo.github.io/2017/10/17/using-kubeadm-to-upgrade-kubernetes/"/>
   <updated>2017-10-17T16:09:35+00:00</updated>
   <id>http://castrojo.github.io/2017/10/17/using-kubeadm-to-upgrade-kubernetes</id>
   <content type="html">&lt;p&gt;I’ve started writing for the Heptio Blog, check out my new article on &lt;a href=&quot;https://blog.heptio.com/upgrading-to-kubernetes-1-8-with-kubeadm-797091ad2f9f&quot;&gt;Upgrading to Kubernetes 1.8 with Kubeadm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Also if you’re looking for more interactive help with Kubernetes, make sure you check out our brand new &lt;a href=&quot;bit.ly/kubernetes-office-hours&quot;&gt;Kubernetes Office Hours&lt;/a&gt;, where we livestream developers answering user questions about Kubernetes. Starting tomorrow (18 October) at 1pm and 8pm UTC, hope to see you there!&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size: 1rem;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Thoughts on the first Kubernetes Steering Election</title>
   <link href="http://castrojo.github.io/2017/10/05/lessons-learned-from-the-first-kubernetes-steering-election/"/>
   <updated>2017-10-05T15:41:49+00:00</updated>
   <id>http://castrojo.github.io/2017/10/05/lessons-learned-from-the-first-kubernetes-steering-election</id>
   <content type="html">&lt;p&gt;The &lt;a href=&quot;http://blog.kubernetes.io/2017/10/kubernetes-community-steering-committee-election-results.html&quot;&gt;first steering committee election&lt;/a&gt; for Kubernetes is now over.  Congratulations to Aaron Crickenberger, Derek Carr, Michelle Noorali, Phillip Wittrock, Quinton Hoole and Timothy St. Clair, who will be joining the newly formed Kubernetes Steering Committe.&lt;/p&gt;

&lt;p&gt;If you’re unfamiliar with what the SC does, you can check out &lt;a href=&quot;https://github.com/kubernetes/steering/blob/master/charter.md&quot;&gt;their charter&lt;/a&gt; and &lt;a href=&quot;https://github.com/kubernetes/steering/blob/master/backlog.md&quot;&gt;backlog&lt;/a&gt;. I was fortunate to work alongside &lt;a href=&quot;https://twitter.com/ParisInBmore&quot;&gt;Paris Pittman&lt;/a&gt; on executing this election, hopefully the first of many “PB&amp;amp;J Productions”.&lt;/p&gt;

&lt;p&gt;To give you some backstory on this, the Kubernetes community has been bootstrapping it’s governance over the past few years, and executing a proper election as stated in &lt;a href=&quot;https://github.com/kubernetes/steering/blob/master/charter.md&quot;&gt;the charter&lt;/a&gt; was an important first step. Therefore it was critical for us to run an open election &lt;em&gt;correctly&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Thankfully we can stand on the shoulders of giants. &lt;a href=&quot;https://governance.openstack.org/election/&quot;&gt;OpenStack&lt;/a&gt; and &lt;a href=&quot;https://www.debian.org/vote/&quot;&gt;Debian&lt;/a&gt; are just two examples of projects with well formed processes that have stood the test of time. We then produced a &lt;a href=&quot;https://github.com/kubernetes/community/tree/master/community/elections/2017&quot;&gt;voter’s guide&lt;/a&gt; to give people a place where they could find all the information they needed and the candidates a spot to fill in their platform statements.&lt;/p&gt;

&lt;p&gt;This morning I &lt;a href=&quot;https://github.com/kubernetes/community/pull/1154/files&quot;&gt;submitted a pull request&lt;/a&gt; with our election notes and steps so that we can start building our institutional knowledge on the process, and of course, to share with whomever is interested.&lt;/p&gt;

&lt;p&gt;Also, a big shout out to Cornell University for providing &lt;a href=&quot;http://civs.cs.cornell.edu/&quot;&gt;CIVS&lt;/a&gt; as a public service.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Can "cloud-native" concepts apply to home servers?</title>
   <link href="http://castrojo.github.io/2017/08/03/is-a-stateless-home-server-possible/"/>
   <updated>2017-08-03T04:00:00+00:00</updated>
   <id>http://castrojo.github.io/2017/08/03/is-a-stateless-home-server-possible</id>
   <content type="html">&lt;p&gt;I’ve recently embarked on a journey of trying new things in my homelab. I’ve been experimenting with new methods of managing my services at home, and I have tried a few combinations of methods and operating systems.&lt;/p&gt;

&lt;p&gt;Now that I am more familiar with the cloud native landscape, I was wondering if I could wean myself off the most stateful snowflake in my life, the trusty home server.&lt;/p&gt;

&lt;p&gt;I’ve been collecting hardware recently and decided to go out of my comfort zone and run some home services via different combinations. Here’s what I found out.&lt;/p&gt;

&lt;h1 id=&quot;what-do-i-need-to-run&quot;&gt;What do I need to run?&lt;/h1&gt;

&lt;p&gt;I have a few things I run in house that I need to host:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;A Ubiquiti Unifi controller, which controls my &lt;a href=&quot;https://blog.jorgecastro.org/2016/12/29/unifis-new-cheaper-switches-are-great/&quot;&gt;network gear&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A Ubiquiti Unifi Video controller, an entirely &lt;a href=&quot;https://www.ubnt.com/download/unifi-video/unifi-nvr&quot;&gt;different piece of software&lt;/a&gt; for recording video from their line of IP cameras&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pi-hole.net/&quot;&gt;Pi-hole&lt;/a&gt; for network wide privacy and ad blocking&lt;/li&gt;
  &lt;li&gt;A &lt;a href=&quot;https://www.plex.tv/&quot;&gt;Plex Media Server&lt;/a&gt; for my videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Unifi stuff depends on Java and MongoDB, and accesses hardware on the network. Pi-hole expects to basically be my DNS server, and Plex is the textbook definition of a stateful app; depending on the size of your video collection it can grow a substantial database that’s all on disk, so moving around means bringing gigs of stuff with it.&lt;/p&gt;

&lt;p&gt;With this varied set of apps, we shall begin!&lt;/p&gt;

&lt;h2 id=&quot;old-reliable-traditional-ubuntu-1604-with-debs&quot;&gt;Old Reliable, traditional Ubuntu 16.04 with .debs&lt;/h2&gt;

&lt;p&gt;This has been working for me for years up to this point. As with anything involving third party packaging, maintenance can tend to get annoying.&lt;/p&gt;

&lt;p&gt;For Unifi you need either an external Mongo repo(!) and/or a OpenJDK PPA(!) to get it to work.&lt;/p&gt;

&lt;p&gt;Pi hole wants me to pipe a script to bash, and Plex just publishes one off debs with no repository, making that update a hassle.&lt;/p&gt;

&lt;p&gt;There are some benefits here, once I configure &lt;code class=&quot;highlighter-rouge&quot;&gt;unattended-upgrades&lt;/code&gt; things generally run fine. It’s a well understood system, and having the large repository of software is always good. Over time it tends to accumulate crap though.&lt;/p&gt;

&lt;h2 id=&quot;ubuntu-1604-with-docker-containers&quot;&gt;Ubuntu 16.04 with Docker containers&lt;/h2&gt;

&lt;p&gt;The main advantage to this setup is I can crowdsource the maintenance of these apps to people who do a real good job, like the awesome guys at &lt;a href=&quot;http://tools.linuxserver.io/dockers&quot;&gt;linuxserver.io&lt;/a&gt;. I can keep a &lt;em&gt;lean&lt;/em&gt; and mostly stock host, toss away broken containers if need be, and keep everything nice and isolated.&lt;/p&gt;

&lt;p&gt;What ppa do I need for unifi? Is my plex up to date? What java symlink do I need to fix? I don’t need to care anymore!&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; was really good for this and relatively simple to grok, especially by stealing other people’s configs from github and modifying them to my needs.&lt;/p&gt;

&lt;h3 id=&quot;why-not-lxd-containers&quot;&gt;Why not LXD containers?&lt;/h3&gt;

&lt;p&gt;I ran with this config for a while, but it had one major issue for me. LXD containers are system containers, that is, they run a copy of the OS. So now instead of maintaining one host I am now maintaining one host OS and many client OSes. Going into each one and installing/configuring the services felt like I was adding complexity. LXD is great, just not for my specific use case.&lt;/p&gt;

&lt;h2 id=&quot;ubuntu-core-1604-with-docker-containers&quot;&gt;Ubuntu Core 16.04 with Docker containers&lt;/h2&gt;

&lt;p&gt;Finally, something totally different. I am pretty sure “home server” doesn’t rank high on the use case here, but I figured I would give it a shot. I took the same &lt;code class=&quot;highlighter-rouge&quot;&gt;docker-compose&lt;/code&gt; files from before, except this time I deploy on top of ubuntu-core.&lt;/p&gt;

&lt;p&gt;This gives me some nice features over the mutable-buntu. First off, atomic upgrades. Everytime it gets a new kernel it just reboots, and then on boot all the containers update and come back up.&lt;/p&gt;

&lt;p&gt;This has a few teething issues. First off, if there’s a kernel update it’s just going to reboot, you can’t really control that. Another is, it really is small, so it’s missing tools. It can only install snaps, so no rsync, no git, no curl, no wget. I’m not going to run git out of a docker container. Also I couldn’t figure out how to run docker as the non-root user and I can’t seem to find the documentation on how to do that anywhere.&lt;/p&gt;

&lt;h2 id=&quot;container-linux-with-docker-containers&quot;&gt;Container Linux with Docker containers&lt;/h2&gt;

&lt;p&gt;A slim OS designed to only run containers. This one definately has a more “work related” slant to it. There’s no normal installer, the installer basically takes a cloud-init-like yaml file and then dd’s the disk. Or just fire up your home PXE server. :) Most of the docs don’t even talk about how to configure the OS, the entire “state” is kept in this yaml file in git, it is expected that I can blow it away at any time and drop containers on it.&lt;/p&gt;

&lt;p&gt;This comes with git, rsync, and curl/wget out of the box, so it’s nice to be able to have these core tools in there instead of totally missing. There’s also a &lt;code class=&quot;highlighter-rouge&quot;&gt;toolbox&lt;/code&gt; command that will automagically fetch a traditional distro container (defaults to fedora) and then mounts the filesystem inside, so you can &lt;code class=&quot;highlighter-rouge&quot;&gt;nano&lt;/code&gt; to your heart’s content.&lt;/p&gt;

&lt;p&gt;This works really well. Container Linux lets me dictate the update policy as part of the config file, and if I have multiple servers I can cluster them together so that they will take turns rebooting without having a service go down. But as you can see, we quickly venture out of the “home server” use case with this one.&lt;/p&gt;

&lt;h2 id=&quot;container-linux-with-rktsystemd&quot;&gt;Container Linux with rkt/systemd&lt;/h2&gt;

&lt;p&gt;This is the setup I am enjoying the most. So instead of using the docker daemon, I create a systemd service file, like say &lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/systemd/system/unifi.service&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[Unit]
Description=Unifi
After=network.target
[Service]
Slice=machine.slice
Type=simple
ExecStart=/usr/bin/rkt --insecure-options=image run docker://linuxserver/unifi --volume config,kind=host,source=/home/jorge/config/unifi --mount volume=config,target=/config --net=host --dns=8.8.8.8
KillMode=mixed
Restart=always
[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then I &lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl start unifi&lt;/code&gt; to start it, and &lt;code class=&quot;highlighter-rouge&quot;&gt;systemctl enable unifi&lt;/code&gt; to enable it on boot. ContainerOS is set to reboot on Thursdays at 4am, containers update on boot. I can use &lt;code class=&quot;highlighter-rouge&quot;&gt;journalctl&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;machinectl&lt;/code&gt; like I can with “normal” services.&lt;/p&gt;

&lt;p&gt;Note that you can use this config on any OS that has systemd and rkt. Since ContainerOS has a section in it’s yaml file for writing systemd services, I can have one well maintained file that will just enable me to spit out and entire configured server in one shot. Yeah!&lt;/p&gt;

&lt;p&gt;This one “feels” like the most future proof, as the &lt;a href=&quot;https://www.opencontainers.org/&quot;&gt;OCI spec&lt;/a&gt; is now finalized it feels like over time every tool will just be able to consume these images. I don’t know what that means for rkt and/or docker, but you can similarly &lt;a href=&quot;http://container-solutions.com/running-docker-containers-with-systemd/&quot;&gt;use docker in this manner as well&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&quot;what-about-state&quot;&gt;What about state?&lt;/h1&gt;

&lt;p&gt;So far I’ve only really talked about the “installation problem”, I’ve continually left out the hard part, the state of the applications themselves. Reinstalling coreos will get me all the apps back but no data, that doesn’t sound very cloud native!&lt;/p&gt;

&lt;p&gt;If you look at the systemd service file above, you see I keep the state in &lt;code class=&quot;highlighter-rouge&quot;&gt;/home/jorge/config/plex&lt;/code&gt;. I do this for each of the services. I need to find a way to make sure that that is saved somewhere else than just local disk.&lt;/p&gt;

&lt;p&gt;Saving this onto an NFS share earned overwhelming NOPE NOPE NOPE from the straw poll I took (and one even threatened to come over  and fight me). And that’s kind of cheating by moving the problem.&lt;/p&gt;

&lt;p&gt;So right now this is still up in the air, I fired up a quick &lt;a href=&quot;https://www.duplicati.com/&quot;&gt;duplicati&lt;/a&gt; instance to keep a copy on S3.&lt;/p&gt;

&lt;p&gt;Really don’t want to add a ceph cluster to my home administration tasks. Suggestions here would be most welcome.&lt;/p&gt;

&lt;h1 id=&quot;how-have-they-been-running&quot;&gt;How have they been running?&lt;/h1&gt;

&lt;p&gt;I know what you’re thinking. Self rebooting servers and auto updating containers? You’re high.&lt;/p&gt;

&lt;p&gt;Surprisingly in the last three months I have been running all five of these things side by side and they’ve all been rock solid.&lt;/p&gt;

&lt;p&gt;I don’t know what to say here, some combination of great OS and container maintainers, or maybe not so much churn. I am going to try to keep these up and running as long as possible just to see what happens.&lt;/p&gt;

&lt;h1 id=&quot;whats-left-to-try&quot;&gt;What’s left to try?&lt;/h1&gt;

&lt;p&gt;The obvious hole here is the Project Atomic stack, which will be next on the list.&lt;/p&gt;

&lt;p&gt;And of course, it’s only a matter of time until one of these reboots breaks something or a container has a bad day.&lt;/p&gt;

&lt;p&gt;If you think this blog post isn’t crazy enough, Chuck and I will be &lt;a href=&quot;https://gist.github.com/chuckbutler/92164d09fba51b2219b8bb8d4450761f&quot;&gt;delving into Kubernetes&lt;/a&gt; for this later on as this is all just a warm up.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>TLDRing your way to a Kubernetes Bare Metal cluster</title>
   <link href="http://castrojo.github.io/2017/07/21/tldring-your-way-to-a-kubernetes-bare-metal-cluster/"/>
   <updated>2017-07-21T11:00:50+00:00</updated>
   <id>http://castrojo.github.io/2017/07/21/tldring-your-way-to-a-kubernetes-bare-metal-cluster</id>
   <content type="html">&lt;p&gt;Alex Ellis has an &lt;a href=&quot;https://blog.alexellis.io/kubernetes-in-10-minutes/&quot;&gt;excellent tutorial&lt;/a&gt; on how to install Kubernetes in 10 minutes. It is a summarized version of what you can find in the &lt;a href=&quot;https://kubernetes.io/docs/setup/independent/install-kubeadm/&quot;&gt;official documentation&lt;/a&gt;. Read those first, this is a an even shorter version with my choices mixed in.&lt;/p&gt;

&lt;p&gt;We’ll install 16.04 on some machines, I’m using three. I just chose to use Weave instead of sending you to a choose your-own-network page as you have other stuff to learn before you dive into an opinion on a networking overlay. We’re also in a lab environment so we assume some things like your machines are on the same network.&lt;/p&gt;

&lt;h3 id=&quot;prep-the-operating-system&quot;&gt;Prep the Operating System&lt;/h3&gt;

&lt;p&gt;First let’s take care of the OS. I set up automatic updates, ensure the latest kernel is installed, and then ensure we’re all up to date, whatever works for you:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -s
dpkg-reconfigure unattended-upgrades
apt install linux-generic-hwe-16.04
apt update
apt dist-upgrade
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;prep-each-node-for-kubernetes&quot;&gt;Prep each node for Kubernetes:&lt;/h3&gt;

&lt;p&gt;This is just installing docker and adding the kubernetes repo, we’ll be root for these steps:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo -s
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main  
EOF

apt update
apt install -qy docker.io kubelet kubeadm kubernetes-cni
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;on-the-master&quot;&gt;On the master:&lt;/h3&gt;

&lt;p&gt;Pick a machine to be a master, then on that one:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;kubeadm init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then follow the directions to copy your config file to your user account, we only have a few commands left needed with sudo so you can safely &lt;code class=&quot;highlighter-rouge&quot;&gt;exit&lt;/code&gt; out and continue with your user account:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Let’s install the network, and then allow workloads to be scheduled on the master (for a lab we want to use all our hardware for workloads!):&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;kubectl apply -f https://git.io/weave-kube-1.6
kubectl taint nodes --all node-role.kubernetes.io/master-
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;on-each-worker-node&quot;&gt;On each worker node:&lt;/h3&gt;

&lt;p&gt;On each machine you want to be a worker (yours will be different, the output of &lt;code class=&quot;highlighter-rouge&quot;&gt;kubeadm init&lt;/code&gt; will tell you what to do:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo kubeadm join --token 030b75.21ca2b9818ca75ef 192.168.1.202:6443 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You might need to tack on a &lt;code class=&quot;highlighter-rouge&quot;&gt;--skip-preflight-checks&lt;/code&gt;, see &lt;a href=&quot;https://github.com/kubernetes/kubeadm/issues/347&quot;&gt;#347&lt;/a&gt;, sorry for the inconvenience.&lt;/p&gt;

&lt;h2 id=&quot;ensuring-your-cluster-works&quot;&gt;Ensuring your cluster works&lt;/h2&gt;

&lt;p&gt;It shouldn’t take long for the nodes to come online, just check em out:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ kubectl get nodes
NAME       STATUS     AGE       VERSION
dahl       Ready      45m       v1.7.1
hyperion   NotReady   16s       v1.7.1
tediore    Ready      32m       v1.7.1

$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.202:6443
KubeDNS is running at https://192.168.1.202:6443/api/v1/namespaces/kube-system/services/kube-dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'
$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ok you’re cluster is rocking, now&lt;/p&gt;

&lt;h2 id=&quot;set-up-your-laptop&quot;&gt;Set up your laptop&lt;/h2&gt;

&lt;p&gt;I don’t like to be ssh’ed into my cluster unless I’m doing maintenance, so now that we know stuff is working let’s copy the kubernetes config from the master node to our local workstation. You should know how to copy files around systems already, but here’s mine for reference:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sudo scp /etc/kubernetes/admin.conf jorge@ivory.local:/home/jorge/.kube/config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I don’t need the entire Kubernetes repo on my laptop, so we’ll just install the snap for kubectl and check that I can access the server:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  sudo snap install kubectl --classic
  kubectl get nodes
  kubectl cluster-info
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Don’t forget to &lt;a href=&quot;https://blog.heptio.com/kubectl-shell-autocomplete-heptioprotip-48dd023e0bf3&quot;&gt;turn on autocompletion&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;deploy-your-first-application&quot;&gt;Deploy your first application&lt;/h2&gt;

&lt;p&gt;Let’s deploy the Kubernetes dashboard:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   kubectl create -f https://git.io/kube-dashboard
   kubectl proxy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then hit up &lt;a href=&quot;http://localhost:8001/ui&quot;&gt;http://localhost:8001/ui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That’s it, enjoy your new cluster!&lt;/p&gt;

&lt;h2 id=&quot;joining-the-community&quot;&gt;Joining the Community&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;kubeadm&lt;/code&gt; is brought to you by SIG Cluster Lifecycle, they have &lt;a href=&quot;https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#heading=h.rnqzadju87co&quot;&gt;regular meetings&lt;/a&gt; that anyone can attend, and you can give feedback on &lt;a href=&quot;https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle&quot;&gt;the mailing list&lt;/a&gt;. I’ll see you there!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Here's a pic from Ubuntu Down Under</title>
   <link href="http://castrojo.github.io/2017/04/06/here-s-a-pic-from-ubuntu-down-under/"/>
   <updated>2017-04-06T14:12:36+00:00</updated>
   <id>http://castrojo.github.io/2017/04/06/here-s-a-pic-from-ubuntu-down-under</id>
   <content type="html">&lt;p&gt;While archiving a bunch of documents I found this pic of all of us from Ubuntu Down Under, thought I would share it!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/UDU_Group_Picture.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Lessons Learned from joining the Kubernetes community</title>
   <link href="http://castrojo.github.io/2017/03/20/lessons-learned-from-joining-the-kubernetes-community/"/>
   <updated>2017-03-20T10:16:26+00:00</updated>
   <id>http://castrojo.github.io/2017/03/20/lessons-learned-from-joining-the-kubernetes-community</id>
   <content type="html">&lt;p&gt;Software can be complex and daunting, even more so in distributed systems. So when you or your company decide you’re going to give it a shot, it’s easy to get enamored with the technology and not think about the other things you and your team are going to need to learn to make participating rewarding for everyone.&lt;/p&gt;

&lt;p&gt;When we first launched the &lt;a href=&quot;http://ubuntu.com/containers/kubernetes&quot;&gt;Canonical Distribution of Kubernetes&lt;/a&gt;, our team was new, and while we knew how Kubernetes worked, and what ops expertise we were going to start to bring to market right away, we found the initial huge size of the Kubernetes community to be outright intimidating. Not the people of course, they’re great, it’s the learning curve that can really seem large. So we decided to just dive in head first, and then write about our experiences. While some of the things I mention here work great for individuals, if you have a team on individuals working on Kubernetes at your company then I hope some of these tips will be useful to you. This is by no means an exhaustive list, I’m still finding new things everyday.&lt;/p&gt;

&lt;h3 id=&quot;find-your-sigs&quot;&gt;Find your SIGs&lt;/h3&gt;

&lt;p&gt;Kubernetes is divided into a bunch of Special Interest Groups(SIGs). You can &lt;a href=&quot;https://github.com/kubernetes/community/blob/master/sig-list.md&quot;&gt;find a list here&lt;/a&gt;. Don’t be alarmed! Bookmark this page, I use this as my starting off point anytime we needed to find something out in more detail that we could find in the docs or public list. On this page, you’ll find contact information for the leads, and more importantly, when those SIGs meet. Meetings are open to public and (usually) recorded. Find someone on your team to attend these meetings regularly. This is important for a few reasons:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;k8s moves fast, and if there’s an area you care about, you can miss important information about a feature you care about.&lt;/li&gt;
  &lt;li&gt;It’s high bandwidth since SIGs meet regularly, you won’t find long drawn out technical discussions on the mailing lists like you would on a project that only uses lists, these discussions move much faster when people talk face to face.&lt;/li&gt;
  &lt;li&gt;You get to meet people and put faces to names.&lt;/li&gt;
  &lt;li&gt;People get to see you and recognize your name (and optionally, your face). This will help you later on if you’re stuck and need help or if you want to start participating more.&lt;/li&gt;
  &lt;li&gt;Each team has a slack channel and google group (mailing list), so I prefer to sit in those channels as well as they usually have important information announced there, meeting reminders, and links to the important documents for that SIG.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;theres-a-sig-just-for-contributor-experience&quot;&gt;There’s a SIG just for contributor experience&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/kubernetes/community/blob/master/sig-contribx/README.md&quot;&gt;SIG-contribex&lt;/a&gt; - As it ends up there’s an entire SIG who work on improving contributor experience. I found this SIG relatively late when we started, you’ll find that asking quetions here will save you time in the long run. Even if you’re not asking questions yourself you can learn about how the mechanics of project works just by listening in on the conversation.&lt;/p&gt;

&lt;h3 id=&quot;so-many-things-in-community&quot;&gt;So many things in /community&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/kubernetes/community&quot;&gt;https://github.com/kubernetes/community&lt;/a&gt; - This should be one of your first starting points, if not the starting point. I put the SIGs above this because I’ve found for most people they’re initially interested in one key area, and you can just go to that SIG directly first to get started then come back to this. That doesn’t mean this isn’t important, if I get lost in something this is usually the place I start to look for something. Try to get everyone on your team to have at least a working understanding of the concepts here, and of course don’t forget the CLA and Code of Conduct.&lt;/p&gt;

&lt;h3 id=&quot;theres-a-youtube-channel&quot;&gt;There’s a YouTube Channel&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/c/KubernetesCommunity&quot;&gt;https://www.youtube.com/c/KubernetesCommunity&lt;/a&gt; - I found this channel to be very useful for “catching up”. Many SIGs publish their meetings relatively quickly, and tossing in the channel in the background can help you keep track of what’s going on.&lt;/p&gt;

&lt;p&gt;If you don’t have the time do dig into all the SIG meetings, you can concentrate on the &lt;a href=&quot;https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ&quot;&gt;weekly community meeting&lt;/a&gt;, which is held weekly and a summary of many of things happening around the different SIGs. The community meetings also have demos, so it’s interesting to see how the ecosystem is building tools around k8s; if you can only make one meeting a week, this is probably the one to go to.&lt;/p&gt;

&lt;h3 id=&quot;the-community-calendar-and-meetings&quot;&gt;The Community Calendar and meetings&lt;/h3&gt;

&lt;p&gt;This sounds like advanced common sense but there’s a &lt;a href=&quot;https://calendar.google.com/calendar/embed?src=nt2tcnbtbied3l6gi2h29slvc0%40group.calendar.google.com&quot;&gt;community calendar&lt;/a&gt; of events.&lt;/p&gt;

&lt;p&gt;Additionally, I found that adding the SIG meetings to our team calendar helps. We like to rotate people around meetings so that they can get experience in what is happening around the project and to ensure that worst case if someone can’t make a meeting someone is there to take notes. If you’re getting started, do yourself a favor &lt;em&gt;volunteer to take notes at a SIG meeting&lt;/em&gt;, you will find that you’ll need to pay closer attention to the material and for me it helps me understand concepts better when I have to write it down in a way that makes sense for others.&lt;/p&gt;

&lt;p&gt;We also found it useful to not flood one meeting with multiple people. If it’s something important, sure, but if you just want to keep an eye on what’s going on there you can only send one person and then have that person give people a summary at your team standup or whatever. There are so many meetings that you don’t want to fall into the trap of having people sitting in meetings all day instead of getting things done.&lt;/p&gt;

&lt;h2 id=&quot;owners&quot;&gt;OWNERS&lt;/h2&gt;

&lt;p&gt;Whatever area you’re working on, go up the tree and eventually you’ll find an OWNERS file that list who owns/reviews that section of the code or docs or whatever. I use this as a little checklist when I join the SIG meetings to keep track of who is who. When I eventually went to a SIG meeting at Kubecon, it was nice to meet people who will be reviewing your work or you’ll be having a working relationship with.&lt;/p&gt;

&lt;h2 id=&quot;find-a-buddy&quot;&gt;Find a buddy&lt;/h2&gt;

&lt;p&gt;At some point you’ll be sitting in slack and you’ll see some poor person who is asking the same sorts of questions you were. That’s one of the first places you can start to help, just find someone and start talking to them. For me it was “Hey I noticed you sit in SIG-onprem too, you doing bare metal? How’s it going for you?”&lt;/p&gt;

&lt;h2 id=&quot;its-too-big&quot;&gt;It’s too big!&lt;/h2&gt;

&lt;p&gt;This used to worry me because the project is so large I figured I would never understand the entire thing. That’s ok. It’s totally fine to not know every single thing that’s going on, that’s why people have these meetings and summaries in the first place, just concentrate on what’s important to you and the rest will start to fall into place.&lt;/p&gt;

&lt;h2 id=&quot;but-we-only-consume-kubernetes-why-participate&quot;&gt;But we only consume Kubernetes, why participate?&lt;/h2&gt;

&lt;p&gt;One of the biggest benefits of consuming an open source project is taking advantage of the open development process. At some point something you care about will be discussed in the community then you should take advantage of the economies of scale that having so many people working on something gives you. Even if you’re only using k8s on a beautifully set up public cloud from a vendor where you don’t have to worry about the gruesome details, your organization can still learn from all the work that is happening around the ecosystem. I learn about new tools and tips every single day, and even if your participation is “read-only”, you’ll find that there’s value in sharing expertise with peers.&lt;/p&gt;

&lt;h2 id=&quot;ongoing-process&quot;&gt;Ongoing process&lt;/h2&gt;

&lt;p&gt;This post is already too long, so I’ll just have to keep posting more as I keep learning more. If you’ve got any tips to share please leave a comment, or post and send me a link to link to.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>What a kickass ride this has been! </title>
   <link href="http://castrojo.github.io/2017/03/17/service-jorge-stop-git-rebase-heptio-master-service-jorge-start/"/>
   <updated>2017-03-17T11:06:13+00:00</updated>
   <id>http://castrojo.github.io/2017/03/17/service-jorge-stop-git-rebase-heptio-master-service-jorge-start</id>
   <content type="html">&lt;p&gt;After 9 years, 20 Ubuntu releases, &lt;a href=&quot;http://askubuntu.com/users/235/jorge-castro?tab=activity&amp;amp;sort=revisions&quot;&gt;14,455 edits&lt;/a&gt; and 359,186 miles in the air, it’s time for me to move on to something else. I’ve been privileged to work with some of the brightest people in the industry, and for that I’ll always be grateful.&lt;/p&gt;

&lt;p&gt;But I won’t be going far, I’ll be starting next month at &lt;a href=&quot;http://heptio.com&quot;&gt;Heptio&lt;/a&gt;, where I will get to work with them in supporting and advancing &lt;a href=&quot;http://kubernetes.io&quot;&gt;Kubernetes&lt;/a&gt;. The community is rapidly expanding, and I’m looking forward to contributing to the machinery that helps keep it a great place for people to participate. If you’ve not yet given k8s a spin, you should, it’s great stuff and only getting better every release.&lt;/p&gt;

&lt;p&gt;There are too many people who I’d like to thank, but you know who you are, and I’ll still see everyone around at conferences. I’ll be around for the next few weeks to tie things up, and then onward and upward!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Deploying Kubernetes on AWS, GCE, and Bare Metal</title>
   <link href="http://castrojo.github.io/2017/03/08/deploying-kubernetes-on-aws-gce-and-bare-metal/"/>
   <updated>2017-03-08T08:52:33+00:00</updated>
   <id>http://castrojo.github.io/2017/03/08/deploying-kubernetes-on-aws-gce-and-bare-metal</id>
   <content type="html">&lt;p&gt;As part of of the weekly &lt;a href=&quot;https://github.com/kubernetes/community/blob/master/community/README.md&quot;&gt;Kubernetes Community Meeting&lt;/a&gt; Marco Ceppi deploys a fully functional Kubernetes cluster on AWS, GCE, and bare metal:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/PPDDYUc1iMQ&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&amp;amp;lt;/div&amp;amp;gt;&lt;/iframe&gt;

&lt;p&gt;If you’re interested in bare metal Kubernetes, we invite you to join us and other contributors in the &lt;a href=&quot;https://github.com/kubernetes/community/tree/master/sig-on-prem&quot;&gt;sig-onprem&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Not sure where to get started? Check out our &lt;a href=&quot;https://kubernetes.io/docs/getting-started-guides/ubuntu/&quot;&gt;Getting Started documentation&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Canonical Distribution of Kubernetes - Release 1.5.3</title>
   <link href="http://castrojo.github.io/2017/02/27/canonical-distribution-of-kubernetes-release-1-5-3/"/>
   <updated>2017-02-27T08:30:08+00:00</updated>
   <id>http://castrojo.github.io/2017/02/27/canonical-distribution-of-kubernetes-release-1-5-3</id>
   <content type="html">&lt;p&gt;We’re proud to announce support for Kubernetes 1.5.3 in the Canonical Distribution of Kubernetes. This is a pure upstream distribution of Kubernetes, designed to be easily deployable to public clouds, on-premise (ie vsphere, openstack), bare metal, and developer laptops. Kubernetes 1.5.2 is a patch release comprised of mostly bugfixes, and we encourage you to &lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md/#changelog-since-v152&quot;&gt;check out the release notes&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started:&lt;/h2&gt;

&lt;p&gt;Here’s the simplest way to get a Kubernetes 1.5.3 cluster up and running on an Ubuntu 16.04 system:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo snap install conjure-up --classic
conjure-up kubernetes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;During the installation conjure-up will ask you what cloud you want to deploy on and prompt you for the proper credentials. If you’re deploying to local containers (LXD) see &lt;a href=&quot;https://kubernetes.io/docs/getting-started-guides/ubuntu/local/&quot;&gt;these instructions&lt;/a&gt; for localhost-specific considerations.&lt;/p&gt;

&lt;p&gt;For production grade deployments and cluster lifecycle management it is recommended to read the &lt;a href=&quot;https://kubernetes.io/docs/getting-started-guides/ubuntu/&quot;&gt;full Canonical Distribution of Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Home page: &lt;a href=&quot;https://jujucharms.com/canonical-kubernetes/&quot;&gt;https://jujucharms.com/canonical-kubernetes/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code: &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;https://github.com/juju-solutions/bundle-canonical-kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-to-upgrade&quot;&gt;How to upgrade&lt;/h2&gt;

&lt;p&gt;With your kubernetes model selected, you can deploy the bundle to upgrade your cluster if on the 1.5.x series of kubernetes. At this time releases before 1.5.x have not been tested. Depending on which bundle you have previously deployed, run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    juju deploy canonical-kubernetes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    juju deploy kubernetes-core
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you have made tweaks to your deployment bundle, such as deploying additional worker nodes as a different label, you will need to manually upgrade the components. The following command list assumes you have made no tweaks, but can be modified to work for your deployment.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju upgrade-charm kubernetes-master
juju upgrade-charm kubernetes-worker
juju upgrade-charm etcd
juju upgrade-charm flannel
juju upgrade-charm easyrsa
juju upgrade-charm kubeapi-load-balancer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will upgrade the charm code, and the resources to kubernetes 1.5.3 release of the Canonical Distribution of Kubernetes.&lt;/p&gt;

&lt;h2 id=&quot;new-features&quot;&gt;New features:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Full support for Kubernetes v1.5.3.&lt;/li&gt;
  &lt;li&gt;K8s master charm now properly keeps distributed master files in sync for an HA control plane.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;general-fixes&quot;&gt;General Fixes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/41251&quot;&gt;#41251&lt;/a&gt; - Fix UpdateAddonsTactic to use local repo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/42058&quot;&gt;#42058&lt;/a&gt; - Fix shebangs in charm actions to use python3&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/41815&quot;&gt;#41815&lt;/a&gt; - enable DefaultTolerationSeconds admission controller by default&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/41351&quot;&gt;#41351&lt;/a&gt; - Multi master patch&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/41256&quot;&gt;#41256&lt;/a&gt; - Lint fixes for the master and worker Python code&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/pull/41919&quot;&gt;#41919&lt;/a&gt; - Juju: Disable anonymous auth on kubelet  (Thanks to community member @raesene for pointing this out!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etcd-specific-fixes&quot;&gt;etcd Specific Fixes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juju-solutions/layer-etcd/pull/74&quot;&gt;#74&lt;/a&gt; - Add the ability to attach NRPE to etcd for monitoring with an external Nagios server.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juju-solutions/layer-etcd/pull/76&quot;&gt;#76&lt;/a&gt; - Add the debug action to the etcd charm that makes it easier to collect debug information in the field.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;test-results&quot;&gt;Test Results&lt;/h2&gt;

&lt;p&gt;The Canonical Distribution of Kubernetes is a running daily tests to verify it works with the upstream code. As part of the Kubernetes test infrastructructure we upload daily test runs. The test results are available on the dashboard. Follow along with our progress here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://k8s-gubernator.appspot.com/builds/canonical-kubernetes-tests/logs/kubernetes-gce-e2e-node/&quot;&gt;https://k8s-gubernator.appspot.com/builds/canonical-kubernetes-tests/logs/kubernetes-gce-e2e-node/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-to-contact-us&quot;&gt;How to contact us:&lt;/h2&gt;

&lt;p&gt;We’re normally found in these Slack channels and attend these sig meetings regularly:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://kubernetes.slack.com/messages/sig-cluster-lifecycle/&quot;&gt;sig-cluster-lifecycle&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://kubernetes.slack.com/messages/sig-cluster-ops/&quot;&gt;sig-cluster-ops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Operators are an important part of Kubernetes, we encourage you to participate with other members of the Kubernetes community!&lt;/p&gt;

&lt;p&gt;We also monitor the Kubernetes mailing lists and other &lt;a href=&quot;http://kubernetes.io/community/&quot;&gt;community channels&lt;/a&gt;, feel free to reach out to us. As always, PRs, recommendations, and bug reports are welcome: &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;https://github.com/juju-solutions/bundle-canonical-kubernetes&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Canonical Distribution of Kubernetes - Release 1.5.2</title>
   <link href="http://castrojo.github.io/2017/01/23/canonical-distribution-of-kubernetes-release-1-5-2/"/>
   <updated>2017-01-23T08:30:08+00:00</updated>
   <id>http://castrojo.github.io/2017/01/23/canonical-distribution-of-kubernetes-release-1-5-2</id>
   <content type="html">&lt;p&gt;We’re proud to announce support for Kubernetes 1.5.2 in the Canonical Distribution of Kubernetes. This is a pure upstream distribution of Kubernetes, designed to be easily deployable to public clouds, on-premise (ie vsphere, openstack), bare metal, and developer laptops. Kubernetes 1.5.2 is a patch release comprised of mostly bugfixes, and we encourage you to &lt;a href=&quot;https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#changelog-since-v151&quot;&gt;check out the release notes&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started:&lt;/h2&gt;

&lt;p&gt;Here’s the simplest way to get a Kubernetes 1.5.2 cluster up and running on an Ubuntu 16.04 system:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-add-repository ppa:juju/stable
sudo apt-add-repository ppa:conjure-up/next
sudo apt update
sudo apt install conjure-up
conjure-up kubernetes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;During the installation conjure-up will ask you what cloud you want to deploy on and prompt you for the proper credentials. If you’re deploying to local containers (LXD) see &lt;a href=&quot;https://kubernetes.io/docs/getting-started-guides/ubuntu/local/&quot;&gt;these instructions&lt;/a&gt; for localhost-specific considerations.&lt;/p&gt;

&lt;p&gt;For production grade deployments and cluster lifecycle management it is recommended to read the &lt;a href=&quot;https://kubernetes.io/docs/getting-started-guides/ubuntu/&quot;&gt;full Canonical Distribution of Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Home page: &lt;a href=&quot;https://jujucharms.com/canonical-kubernetes/&quot;&gt;https://jujucharms.com/canonical-kubernetes/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code: &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;https://github.com/juju-solutions/bundle-canonical-kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-to-upgrade&quot;&gt;How to upgrade&lt;/h2&gt;

&lt;p&gt;With your kubernetes model selected, you can deploy the bundle to upgrade your cluster if on the 1.5.x series of kubernetes. At this time releases before 1.5.x have not been tested. Depending on which bundle you have previously deployed, run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    juju deploy canonical-kubernetes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    juju deploy kubernetes-core
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you have made tweaks to your deployment bundle, such as deploying additional worker nodes as a different label, you will need to manually upgrade the components. The following command list assumes you have made no tweaks, but can be modified to work for your deployment.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju upgrade-charm kubernetes-master
juju upgrade-charm kubernetes-worker
juju upgrade-charm etcd
juju upgrade-charm flannel
juju upgrade-charm easyrsa
juju upgrade-charm kubeapi-load-balancer
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will upgrade the charm code, and the resources to kubernetes 1.5.2 release of the Canonical Distribution of Kubernetes.&lt;/p&gt;

&lt;h2 id=&quot;new-features&quot;&gt;New features:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Full support for Kubernetes v1.5.2.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;general-fixes&quot;&gt;General Fixes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/151&quot;&gt;#151&lt;/a&gt; &lt;a href=&quot;https://docs.google.com/document/d/1amyUwQSrDrSc28FZFFqW0rWnKUcm7nYax6_TXBAyirw/edit#&quot;&gt;#187&lt;/a&gt; It wasn’t very transparent to users that they should be using conjure-up when locally developing, conjure-up is now the defacto default mechanism for deploying CDK.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/173&quot;&gt;#173&lt;/a&gt; Resolved permissions on ~/.kube on kubernetes-worker units&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/169&quot;&gt;#169&lt;/a&gt; Tuned the verbosity of the AddonTacticManager class during charm layer build process&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/162&quot;&gt;#162&lt;/a&gt; Added NO_PROXY configuration to prevent routing all requests through configured proxy [by &lt;a href=&quot;https://github.com/axinojolais&quot;&gt;@axinojolais&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/160&quot;&gt;#160&lt;/a&gt; Resolved an error by flannel sometimes encountered during cni-relation-changed [by &lt;a href=&quot;https://github.com/spikebike&quot;&gt;@spikebike&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/172&quot;&gt;#172&lt;/a&gt; Resolved sporadic timeout issues between worker and apiserver due to nginx connection buffering [by &lt;a href=&quot;https://github.com/axinojolais&quot;&gt;@axinojolais&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/kubernetes/pull/101&quot;&gt;#101&lt;/a&gt; Work-around for offline installs attempting to contact pypi to install docker-compose&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/juju-solutions/kubernetes/pull/95&quot;&gt;#95 &lt;/a&gt;Tuned verbosity of copy operations in the debug script for debugging the debug script.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etcd-layer-specific-changes&quot;&gt;Etcd layer-specific changes&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juju-solutions/layer-etcd/issues/72&quot;&gt;#72&lt;/a&gt; &lt;a href=&quot;https://github.com/juju-solutions/layer-etcd/issues/70&quot;&gt;#70&lt;/a&gt; Resolved a certificate-relation error where etcdctl would attempt to contact the cluster master before services were ready [by &lt;a href=&quot;https://github.com/javacruft&quot;&gt;@javacruft&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;unfiledun-scheduled-fixes&quot;&gt;Unfiled/un-scheduled fixes:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/190&quot;&gt;#190&lt;/a&gt; Removal of assembled bundles from the repository. See bundle author/contributors notice below&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;additional-features&quot;&gt;Additional Feature(s):&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;We’ve open sourced our release management process scripts we’re using in a juju deployed jenkins model. These scripts contain the logic we’ve been running by hand, and give users a clear view into how we build, package, test, and release the CDK. You can see these scripts in the &lt;a href=&quot;https://github.com/juju-solutions/kubernetes-jenkins&quot;&gt;juju-solutions/kubernetes-jenkins&lt;/a&gt; repository. This is early work, and will continue to be iterated on / documented as we push towards the Kubernetes 1.6 release.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;notice-to-bundle-authors-and-contributors&quot;&gt;Notice to bundle authors and contributors:&lt;/h2&gt;

&lt;p&gt;The fix for &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues/190&quot;&gt;#190&lt;/a&gt; is a larger change that has landed in the &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;bundle-canonical-kubernetes&lt;/a&gt; repository. Instead of maintaining several copies across several repositories of a single use-case bundle; we are now assembling the CDK based bundles as fragments (un-official nomenclature).&lt;/p&gt;

&lt;p&gt;This affords us the freedom to rapidly iterate on a CDK based bundle and include partner technologies, such as different SDN vendors, Storage backend components, and other integration points. Keeping our CDK bundle succinct, and allowing the more complex solutions to be assembled easily, reliably, and repeatedly. This does change the contribution guidelines for end users.&lt;/p&gt;

&lt;p&gt;Any changes to the core bundle should be placed in its respective fragment under the &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/tree/master/fragments&quot;&gt;fragments&lt;/a&gt; directory. Once this has been placed/merged, the primary published bundles can be assembled by running &lt;code class=&quot;highlighter-rouge&quot;&gt;./bundle&lt;/code&gt; in the root of the repository. This process has been outlined in the repository &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes#bundle-builder-for-cdk&quot;&gt;README.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We look forward to any feedback on how opaque/transparent this process is, and if it has any useful applications outside of our own release management process. The &lt;code class=&quot;highlighter-rouge&quot;&gt;./bundle&lt;/code&gt; python script is still very much geared towards our own release process, and how to assemble bundles targeted for the CDK. However we’re open to generalizing them and encourage feedback/contributions to make this more useful to more people.&lt;/p&gt;

&lt;h2 id=&quot;how-to-contact-us&quot;&gt;How to contact us:&lt;/h2&gt;

&lt;p&gt;We’re normally found in these Slack channels and attend these sig meetings regularly:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://kubernetes.slack.com/messages/sig-cluster-lifecycle/&quot;&gt;sig-cluster-lifecycle&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://kubernetes.slack.com/messages/sig-cluster-ops/&quot;&gt;sig-cluster-ops&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Operators are an important part of Kubernetes, we encourage you to participate with other members of the Kubernetes community!&lt;/p&gt;

&lt;p&gt;We also monitor the Kubernetes mailing lists and other &lt;a href=&quot;http://kubernetes.io/community/&quot;&gt;community channels&lt;/a&gt;, feel free to reach out to us. As always, PRs, recommendations, and bug reports are welcome: &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;https://github.com/juju-solutions/bundle-canonical-kubernetes&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fresh Kubernetes documentation available now</title>
   <link href="http://castrojo.github.io/2017/01/10/fresh-kubernetes-documentation-available-now/"/>
   <updated>2017-01-10T19:34:12+00:00</updated>
   <id>http://castrojo.github.io/2017/01/10/fresh-kubernetes-documentation-available-now</id>
   <content type="html">&lt;p&gt;Over the past few months our team has been working real hard on the &lt;a href=&quot;https://www.ubuntu.com/cloud/kubernetes&quot;&gt;Canonical Distribution of Kubernetes&lt;/a&gt;. This is a pure-upstream distribution of k8s with our community’s operational expertise bundled in.&lt;/p&gt;

&lt;p&gt;It means that we can use one set of operational code to get the same deployment on GCE, AWS, Azure, Joyent, OpenStack, and Bare Metal.&lt;/p&gt;

&lt;p&gt;Like most young distributed systems, Kubernetes isn’t exactly famous for it’s ease of use, though there has been tremendous progress over the past 12 months. Our documentation on Kubernetes was nearly non-existent and it became obvious that we had to dive in there and bust it out. I’ve spent some time fixing it up and it’s been recently merged. &lt;/p&gt;

&lt;p&gt;You can find the &lt;a href=&quot;http://kubernetes.io/docs/getting-started-guides/ubuntu/&quot;&gt;Official Ubuntu Guides&lt;/a&gt; in the “Create a cluster” section. We’re taking what I call a “sig-cluster-lifecycle” approach to this documentation – the pages are organized into lifecycle topics based on what an operator would do. So “Backups”, or “Upgrades” instead one big page with sections. This will allow us to grow each section based on the expertise we learn on k8s for that given task. &lt;/p&gt;

&lt;p&gt;Over the past few months (and hopefully for Kubernetes 1.6) we will slowly be phasing out the documentation on our individual charm and layer pages to reduce duplication and move to a pure upstream workflow. &lt;/p&gt;

&lt;p&gt;On behalf of our team we hope you enjoy Kubernetes, and if you’re running into issues please &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes/issues&quot;&gt;let us know&lt;/a&gt; or you can find us in the Kubernetes slack channels.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Useful tool alert, explainshell.com</title>
   <link href="http://castrojo.github.io/2017/01/01/useful-tool-alert-explainshell-dot-com/"/>
   <updated>2017-01-01T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2017/01/01/useful-tool-alert-explainshell-dot-com</id>
   <content type="html">&lt;p&gt;Ran into this while using the Stack Overflow; &lt;a href=&quot;http://explainshell.com&quot;&gt;explainshell.com&lt;/a&gt;. Basically they take all of Ubuntu’s manpages and then parse them so you can paste in any Linux command and then see right away what each option does. Example:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://explainshell.com/explain?cmd=rsync+-chavzP+--stats+user%40remote.host%3A%2Fpath%2Fto%2Fcopy+%2Fpath%2Fto%2Flocal%2Fstorage&quot;&gt;rsync -chavzP –stats user@remote.host:/path/to/copy /path/to/local/storage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It then takes the command you put in there and breaks down each of the flags. I like this for a few reasons. First of all, I hate reading manpages because I’m a human being. This shows me exactly what each option does without having to parse the entire manpage, it only tells me what I care about. Secondly, I prefer to learn by example instead of just reading manpages in their entirety. I can see this tool being very useful for people who are just starting to learn. Command on the internet confusing you? You can at least paste it in here and figure out what it’s doing before you end up being &lt;a href=&quot;https://gist.github.com/KartikTalwar/4393116#gistcomment-1947694&quot;&gt;that guy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another example is &lt;a href=&quot;http://bropages.org/rsync&quot;&gt;bropages&lt;/a&gt;, which lets people submit example commands for each tool, and then users vote on the usefulness of the examples for a nice stackoverflow-like list of example commands. It seems as though they haven’t had a commit for almost a year, so not sure if people are still contributing to that, but it seems like a decent enough idea.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Unifi's new cheaper switches are great</title>
   <link href="http://castrojo.github.io/2016/12/29/unifis-new-cheaper-switches-are-great/"/>
   <updated>2016-12-29T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2016/12/29/unifis-new-cheaper-switches-are-great</id>
   <content type="html">&lt;p&gt;I started switching to Ubiquiti’s Unifi equipment at home when one of my coworkers, Sean Sosik-Hamor, recommended them for prosumer use. A little while later Lee Hutchinson published &lt;a href=&quot;http://arstechnica.com/gadgets/2015/10/review-ubiquiti-unifi-made-me-realize-how-terrible-consumer-wi-fi-gear-is/&quot;&gt;Ubiquiti Unifi made me realise how terrible consumer Wi-Fi gear is&lt;/a&gt; when they launched their newer (and cheaper) line of 802.11ac access points. I’ve got one of those, as well as the &lt;a href=&quot;https://www.ubnt.com/unifi-routing/usg/&quot;&gt;USG&lt;/a&gt; for routing duties. The USG isn’t something to write home about, but it gets the job done, and in some advanced cases you can always ssh to it, but generally speaking I just use it as intended and mostly setting it up and forgetting about it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/unifi/unifi1.png&quot; alt=&quot;unifi&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Unlike most routers, you don’t manage Unifi gear through a web UI on the device, you run controller software on a host and then the controller software blasts out the config and updates to the devices. I recommend reading Dustin Kirkland’s &lt;a href=&quot;http://blog.dustinkirkland.com/2016/12/unifi-controller-in-lxd.html&quot;&gt;blog post for running Unifi in LXD&lt;/a&gt; as it currently is 14.04 only, and if you’re like me, you’re finding that it’s becoming much more manageable to keep server software nice and isolated in it’s own container instead of splatting all its dependencies on the host OS. If you prefer things more old school, look for the “EdgeRouter” line of routers and switches.&lt;/p&gt;

&lt;p&gt;At $99 for an AP and $149 for an access point you can come up with a nice business-grade combo, especially with the latest consumer routers starting to get close the $300(!) and utterly terrible software. The one thing that was always expensive though, was the Unifi line of managed switches. It’s nice, but at $199 for 8 ports, just too much for each port. Here’s a nice review from Lee on the &lt;a href=&quot;http://arstechnica.com/gadgets/2016/04/ubiquitis-8-port-poe-switch-is-a-solid-complement-for-a-home-unifi-setup/&quot;&gt;Unifi Switch 8&lt;/a&gt;. Thanks to the wonder of their beta store, I was able to pick up the newer, slimmed down 8 port, the Unifi US-8:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/unifi/unifi8.jpg&quot; alt=&quot;unifi8&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There it is, with the unmanaged switch it replaced. They dropped the SFP ports, and you can see the port LEDs are on the top instead of in each port, probably for cost? And since it’s Unifi, it plops in nicely with the UI, giving me some nice per-port stats:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/unifi/unifi3.png&quot; alt=&quot;unifi3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And it gets better, they’ve done a US-24 and US-48 as well. I put a US-24 in my basement. $215 all day for 24 ports, compared to the older model, which would go north of $500!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/unifi/unifi2.png&quot; alt=&quot;unifi2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’m in the process of still setting up the homelab VLAN, so I don’t have much to report on that, but having everything managed in one system is a really great feature. I didn’t really need SFP plugs or lots of PoE power for my use, so this new low-end line is perfect for me, if you find yourself wanting cheap-but-good equipment with decent software, then I recommend you check them out, and of course drop by &lt;a href=&quot;https://www.reddit.com/r/Ubiquiti/&quot;&gt;/r/ubiquiti&lt;/a&gt; if you need anything.&lt;/p&gt;

&lt;p&gt;See also Troy Hunt’s &lt;a href=&quot;https://www.troyhunt.com/ubiquiti-all-the-things-how-i-finally-fixed-my-dodgy-wifi/&quot;&gt;more indepth blog post&lt;/a&gt; for more information.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New blog, and new status updates</title>
   <link href="http://castrojo.github.io/2016/12/20/new-blog-and-new-status-updates/"/>
   <updated>2016-12-20T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2016/12/20/new-blog-and-new-status-updates</id>
   <content type="html">&lt;p&gt;I’m going to try to blog more in the coming new year, but I figured it would get an early start to get back into the swing of things.&lt;/p&gt;

&lt;p&gt;Things have been going at breakneck speed lately, so here’s the highlights.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We released &lt;a href=&quot;http://insights.ubuntu.com/2016/12/16/announcing-canonical-kubernetes-1-5-1/&quot;&gt;The Canonical Distribution of Kubernetes 1.5.1&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;I’m a new dad! &lt;a href=&quot;https://goo.gl/photos/oUk6qBJsk2wVxTh97&quot;&gt;Rafael Mateo Castro&lt;/a&gt; was born on November 26th 2016. He’s totally healthy and is currently taking up most of my free time.&lt;/li&gt;
  &lt;li&gt;Marco took some time to help launch and run ops for one of &lt;a href=&quot;http://blog.silph.io/&quot;&gt;the coolest Pokemon Go&lt;/a&gt; sites around. Go itself is running on Kubernetes. Marco running this site is a complete coincidence. Make sure you check out that link for some solid gold ops information. All running on Juju of course!&lt;/li&gt;
  &lt;li&gt;Speaking of coincidences, my brother and his wife had a son 6 days early than us, Leonardo Mehta Castro. Again, total coincidence that my son and his son are named after ninja turtles.&lt;/li&gt;
  &lt;li&gt;I’ll be at &lt;a href=&quot;http://cfgmgmtcamp.eu/&quot;&gt;Config Management Camp&lt;/a&gt; and FOSDEM this year, so hope to catch up with everyone there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s cold and wintery now, so here’s a video of Oscar being a super-dog.:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/o24YHckVOyY?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

</content>
 </entry>
 
 <entry>
   <title>Kubernetes the Easy Way</title>
   <link href="http://castrojo.github.io/2016/11/16/kubernetes-the-easy-way/"/>
   <updated>2016-11-16T10:00:00+00:00</updated>
   <id>http://castrojo.github.io/2016/11/16/kubernetes-the-easy-way</id>
   <content type="html">&lt;p&gt;If you’re interested in running Kubernetes you’ve probably heard of Kelsey Hightower’s &lt;a href=&quot;https://github.com/kelseyhightower/kubernetes-the-hard-way&quot;&gt;Kubernetes the Hard Way&lt;/a&gt;. Exercises like these are important, they highlight the coordination needed between components in modern stacks, and it highlights how far the world has come when it comes to software automation. Could you imagine if you had to set everything up the hard way every time?&lt;/p&gt;

&lt;h2 id=&quot;learning-is-fun&quot;&gt;Learning is fun&lt;/h2&gt;

&lt;p&gt;Doing things the hard way is fun, once. After that, I’ve got work to do, and soon after I am looking around to see who else has worked on this problem and how I can best leverage the best open source has to offer.&lt;/p&gt;

&lt;p&gt;It reminds me of the 1990’s when I was learning Linux. Sure, as a professional, you need to know systems and how they work, down to the kernel level if need. Having to do those things without a working keyboard or network makes that process much harder. Give me a working computer, and then I can begin. There’s value in learning how the components work together and understanding the architecture of Kubernetes, I encourage everyone to try the hard way at least one time, if anything it’ll make you appreciate the work people are putting into automating all of this for you in a composable and reusable way.&lt;/p&gt;

&lt;h2 id=&quot;the-easy-way&quot;&gt;The easy way&lt;/h2&gt;

&lt;p&gt;I am starting a new series of videos on how we’re making the Canonical Distribution of Kubernetes easy for anyone to deploy on any cloud. All our code is &lt;a href=&quot;https://github.com/juju-solutions/bundle-canonical-kubernetes&quot;&gt;open source&lt;/a&gt; and we love pull requests. Our goal is to help people get Kubernetes in as many places as quickly and easily as possible. We’ve incorporated lots of the things people tell us they’re looking for in a production-grade Kubernetes, and we’re always looking to codify those best practices.&lt;/p&gt;

&lt;p&gt;Enjoy:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/B7nMFVaOOi8&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Following these steps will get you a working cluster, in this example I’m deploying to &lt;code class=&quot;highlighter-rouge&quot;&gt;us-east-2&lt;/code&gt;, the shiny new AWS region. Subsequent videos will cover how to interact with the cluster and do more things with it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Kubernetes v1.3.3 for Ubuntu ready for testing</title>
   <link href="http://castrojo.github.io/2016/07/29/ubuntu-kubernetes-v1-dot-3-3-ready-for-testing/"/>
   <updated>2016-07-29T10:28:00+00:00</updated>
   <id>http://castrojo.github.io/2016/07/29/ubuntu-kubernetes-v1-dot-3-3-ready-for-testing</id>
   <content type="html">&lt;p&gt;We’ve been trailing the &lt;a href=&quot;http://blog.kubernetes.io/2016/07/kubernetes-1.3-bridging-cloud-native-and-enterprise-workloads.html&quot;&gt;Kubernetes 1.3&lt;/a&gt; release for the past few weeks, mostly to ensure that etcd data migrations are preserved from 1.2 to 1.3. We’re also in the process of adding TLS between all the nodes for security reasons, and that has led to use being a bit behind on getting Kubernetes 1.3 out to you, but don’t worry, we’re in the process of testing the upgrade path and this post will outline how to set up a Kubernetes 1.2 cluster and upgrade it to v1.3.3. Once we get good feedback from the community on how this is working out for you, we’ll go ahead and set v1.3.3 (or subsequent version) as the new default for Ubuntu Kubernetes.&lt;/p&gt;

&lt;p&gt;Our bundle, which we call “observable-kubernetes” features the following model:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Kubernetes (automating deployment, operations, and scaling containers)
    &lt;ul&gt;
      &lt;li&gt;Three node Kubernetes cluster with one master and two worker nodes.&lt;/li&gt;
      &lt;li&gt;TLS used for communication between nodes for security.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Etcd (distributed key value store)
    &lt;ul&gt;
      &lt;li&gt;Three node cluster for reliability.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Elastic stack
    &lt;ul&gt;
      &lt;li&gt;Two nodes for ElasticSearch&lt;/li&gt;
      &lt;li&gt;One node for a Kibana dashboard&lt;/li&gt;
      &lt;li&gt;Beats on every Kubernetes and Etcd node:
        &lt;ul&gt;
          &lt;li&gt;Filebeat for forwarding logs to ElasticSearch&lt;/li&gt;
          &lt;li&gt;Topbeat for inserting server monitoring data to ElasticSearch&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As usual, you get pure Kubernetes direct from upstream and of course it’s cross-cloud, making it easy for you to use your own bare metal for deployment.&lt;/p&gt;

&lt;h2 id=&quot;your-first-kubernetes-cluster&quot;&gt;Your First Kubernetes Cluster&lt;/h2&gt;

&lt;p&gt;After &lt;a href=&quot;https://jujucharms.com/docs/stable/getting-started&quot;&gt;configuring Juju&lt;/a&gt; to use the cloud you prefer we can start the cluster deployment.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju deploy observable-kubernetes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will deploy the bundle with default constraints. This is great for testing out Kubernets but most clouds won’t give you enough CPU and memory to use the cluster in anger, so I recommend &lt;a href=&quot;https://github.com/juju-solutions/bundle-observable-kubernetes&quot;&gt;checking out the documentation&lt;/a&gt; on how to modify the bundle to more accurately reflect either the hardware you have on hand, or the instance size you prefer.&lt;/p&gt;

&lt;p&gt;We can watch the cluster coming up with a &lt;code class=&quot;highlighter-rouge&quot;&gt;watch juju status&lt;/code&gt;, this will give us a near-realtime view of the cluster as it comes up:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/kubes.png&quot; alt=&quot;kubes&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;making-sure-your-cluster-works&quot;&gt;Making sure your cluster works&lt;/h2&gt;

&lt;p&gt;We just wait for things to come up and hit an idle state before moving on. Once we’re up we can manage the cluster with &lt;code class=&quot;highlighter-rouge&quot;&gt;kubectl&lt;/code&gt;. We’ve provided this tool for you on the master node with a config file prepoluated for you, first let’s find the master node.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju run --application kubernetes is-leader
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The output will show you which node is the master node, you can then copy the tools to your local machine:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju scp kubernetes/0:kubectl_package.tar.gz .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Untar that wherever you’d like and cd to that directory, you should have a kubectl binary and a &lt;code class=&quot;highlighter-rouge&quot;&gt;kubeconfig&lt;/code&gt; file for you to use along with &lt;code class=&quot;highlighter-rouge&quot;&gt;kubectl&lt;/code&gt;. You can now check the status of your cluster with:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./kubectl cluster-info --kubeconfig ./kubeconfig 
Kubernetes master is running at https://104.196.123.155:6443
KubeDNS is running at https://104.196.123.155:6443/api/v1/proxy/namespaces/kube-system/services/kube-dns
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now let’s check the version of Kubernetes we’re running, note how it responds with both the client and server version.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./kubectl version --kubeconfig ./kubeconfig 
Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;2&quot;, GitVersion:&quot;v1.2.3&quot;, GitCommit:&quot;882d296a99218da8f6b2a340eb0e81c69e66ecc7&quot;, GitTreeState:&quot;clean&quot;}
Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;2&quot;, GitVersion:&quot;v1.2.3&quot;, GitCommit:&quot;882d296a99218da8f6b2a340eb0e81c69e66ecc7&quot;, GitTreeState:&quot;clean&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;upgrading-to-a-new-version&quot;&gt;Upgrading to a new version&lt;/h2&gt;

&lt;p&gt;So far we’ve done the usual bits on getting Kubernetes running on Ubuntu, now we’re ready to test the latest stuff from upstream.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju set-config kubernetes version=v1.3.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then check &lt;code class=&quot;highlighter-rouge&quot;&gt;juju status&lt;/code&gt; again while the model mutates. Now let’s see the version:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./kubectl version --kubeconfig ./kubeconfig 
Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;2&quot;, GitVersion:&quot;v1.2.3&quot;, GitCommit:&quot;882d296a99218da8f6b2a340eb0e81c69e66ecc7&quot;, GitTreeState:&quot;clean&quot;}
Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;3&quot;, GitVersion:&quot;v1.3.1&quot;, GitCommit:&quot;fe4aa01af2e1ce3d464e11bc465237e38dbcff27&quot;, GitTreeState:&quot;clean&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Aha! As you see here, the cluster has upgraded to v1.3.1, but my local tools are obviously still v1.2.3. Obviously I can just recopy the kubectl tarball from the master node again, but I appear to have made a mistake, as the latest upstream version of Kubernetes is actually v1.3.3. No worries man:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    juju set-config kubernetes version=v1.3.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And let’s check our version:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./kubectl version --kubeconfig ./kubeconfig
Client Version: version.Info{Major:&quot;1&quot;, Minor:&quot;2&quot;, GitVersion:&quot;v1.2.3&quot;, GitCommit:&quot;882d296a99218da8f6b2a340eb0e81c69e66ecc7&quot;, GitTreeState:&quot;clean&quot;}
Server Version: version.Info{Major:&quot;1&quot;, Minor:&quot;3&quot;, GitVersion:&quot;v1.3.3&quot;, GitCommit:&quot;c6411395e09da356c608896d3d9725acab821418&quot;, GitTreeState:&quot;clean&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now that my cluster is up to date, don’t forget to copy a new version of &lt;code class=&quot;highlighter-rouge&quot;&gt;kubectl&lt;/code&gt; from the master so that your client is also up to date. Now we’re ballin’ and on the latest upstream, now we can go ahead and &lt;a href=&quot;http://kubernetes.io/docs/hellonode/&quot;&gt;dive into the Kubernetes docs&lt;/a&gt; to get started deploying a real workload inside your cluster.&lt;/p&gt;

&lt;h2 id=&quot;future-goals&quot;&gt;Future Goals&lt;/h2&gt;

&lt;p&gt;So why isn’t v1.3.3 the default? Well we’d like to see some real feedback from people first and we’re still in the process of validating that your data will get migrated without issues as you upgrade. As you can see upgrading an empty cluster is trivial, and we’d like to make sure we’ve dotted all the t’s and i’s before moving on.&lt;/p&gt;

&lt;p&gt;We’d also like to take the next few weeks to prep the charms for the upcoming v1.4 release, as well as revving the etcd and Elastic stacks to their latest upstream versions, as well as revving the OS itself to xenial so that the ZFS backed storage is more robust and has a better out-of-the-box experience. We should also make it so that getting &lt;code class=&quot;highlighter-rouge&quot;&gt;kubectl&lt;/code&gt; from the master isn’t so annoying.&lt;/p&gt;

&lt;p&gt;Got any feedback for us? You can find us on the &lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/juju&quot;&gt;Juju mailing list&lt;/a&gt; and #sig-cluster-ops and #sig-cluster-lifecycle on &lt;a href=&quot;kubernetes.slack.com&quot;&gt;kubernetes.slack.com&lt;/a&gt;. Hope to see you there!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Nvidia PPA download statistics for May</title>
   <link href="http://castrojo.github.io/2016/06/01/nvidia-ppa-download-statistics-for-may/"/>
   <updated>2016-06-01T08:12:00+00:00</updated>
   <id>http://castrojo.github.io/2016/06/01/nvidia-ppa-download-statistics-for-may</id>
   <content type="html">&lt;p&gt;Welcome back to another exciting update of Nvidia driver downloads!&lt;/p&gt;

&lt;p&gt;The biggest change is 364.15 is the new most popular version of the driver, and of course, we’ve added xenial as a new series. Here are the download statistics for the graphics-drivers PPA:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Version summaries
346.72: 57
346.96: 292
352.21: 219
352.79: 249
355.06: 3291
355.11: 11483
358.09: 16949
358.16: 22317
361.18: 4475
361.28: 20638
364.12: 12170
364.15: 37125

Series summaries
precise: 985
trusty: 51066
vivid: 11307
wily: 36171
xenial: 17996
yakkety: 11740

Arch summaries
amd64: 123560
armhf: 55
i386: 5650
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Want to help? &lt;a href=&quot;http://store.steampowered.com/browse/linux/&quot;&gt;buy a game&lt;/a&gt; and check out &lt;a href=&quot;https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa&quot;&gt;ppa:graphics-drivers&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Zeppelin is now a top level Apache project</title>
   <link href="http://castrojo.github.io/2016/05/31/zeppelin-is-now-a-top-level-apache-project/"/>
   <updated>2016-05-31T13:19:00+00:00</updated>
   <id>http://castrojo.github.io/2016/05/31/zeppelin-is-now-a-top-level-apache-project</id>
   <content type="html">&lt;p&gt;Apache Zeppelin has just graduated to become a &lt;a href=&quot;https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces92&quot;&gt;top-level project&lt;/a&gt; at the Apache Foundation.&lt;/p&gt;

&lt;p&gt;As always, our Big Data team has you covered, you can find all the goodness here:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jujucharms.com/apache-zeppelin&quot;&gt;Apache Zeppelin charm&lt;/a&gt; - use this if you’re looking to build a solution using Zeppelin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for most people you likely just want to be able to consume Zeppelin as part of your Spark cluster, check out these links below for some out-of-the-box clusters:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://jujucharms.com/apache-hadoop-spark-zeppelin/&quot;&gt;6 node Spark Cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;script async=&quot;&quot; src=&quot;https://assets.ubuntu.com/v1/juju-cards-v1.3.0.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;juju-card&quot; data-id=&quot;apache-hadoop-spark-zeppelin&quot;&gt;&lt;/div&gt;

&lt;p&gt;Happy Big-data-ing, and as always, you can join other big data enthusiasts on the mailing list: &lt;a href=&quot;https://lists.ubuntu.com/mailman/listinfo/bigdata&quot;&gt;bigdata@lists.ubuntu.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A quick intro to Juju Resources</title>
   <link href="http://castrojo.github.io/2016/04/19/a-quick-intro-to-juju-resources/"/>
   <updated>2016-04-19T15:58:00+00:00</updated>
   <id>http://castrojo.github.io/2016/04/19/a-quick-intro-to-juju-resources</id>
   <content type="html">&lt;p&gt;For all the fancy bits of technology in your infrastructure there are still
plenty of simple things that are useful and will probably never go away. One of
these is blobs. Blobs are useful, they can be workload payloads, binaries for
software, or whatever bits you need to deploy and manage.&lt;/p&gt;

&lt;p&gt;Juju never had a way of knowing about blobs. Sure, you could plop something on
an http server and your charm could snag it. But then we’re not really solving
any problems for you, you still need to deal with managing that blob, versioning
it, using a server to serve it to clients, etc.&lt;/p&gt;

&lt;p&gt;Ideally, these blobs are accounted for, just like anything else in your
 infrastructure, so it makes sense that as of Juju 2.0 we can &lt;em&gt;model blobs as
part of a model&lt;/em&gt;; we call it Juju Resources. That way we can track them, cache
them, acl them, and so on, just like everything else.&lt;/p&gt;

&lt;h3 id=&quot;resources&quot;&gt;Resources&lt;/h3&gt;

&lt;p&gt;A new concept has been introduced into Charms called
“resources”. Resources are binary blobs that the charm can utilize, and
are declared in the metadata for the Charm. All resources declared will
have a version stored in the Charm store, however updates to these can
be uploaded from an admin’s local machine to the controller.&lt;/p&gt;

&lt;h4 id=&quot;change-to-metadata&quot;&gt;Change to Metadata&lt;/h4&gt;

&lt;p&gt;A new clause has been added to &lt;code class=&quot;highlighter-rouge&quot;&gt;metadata.yaml&lt;/code&gt; for resources. Resources
can be declared as follows:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;resources:
  name:
    type: file                         # the only type initially
    filename: filename.tgz
    description: &quot;One line that is useful when operators need to push it.&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;new-user-commands&quot;&gt;New User Commands&lt;/h4&gt;

&lt;p&gt;Three new commands have been introduced:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;juju list-resources&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;Pretty obvious, this command shows the resources required by and those in use by an
existing service or unit in your model.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;juju push-resource&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;This command uploads a file from your local disk to the juju
controller to be used as a resource for a service.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;juju charm list-resources&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;juju charm&lt;/code&gt; is the the juju CLI equivalent of the “charm” command
 used by charm authors, though only applicable functionality is
 mirrored.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In addition, resources may be uploaded when deploying or upgrading
charms by specifying the resource option to the deploy command. Following
the resource option should be name=filepath pair.  This option may be
repeated more than once to upload more than one resource.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju deploy foo --resource bar=/some/file.tgz --resource baz=./docs/cfg.xml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;juju upgrade-charm foo --resource bar=/some/file.tgz --resource baz=./docs/cfg.xml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Where bar and baz are resources named in the metadata for the foo charm.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;It’s pretty simple. Put stuff in a place and be able to snag it later. People
can use resources for all sorts of things.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Payloads for the service you’re deploying.&lt;/li&gt;
  &lt;li&gt;Software. Let’s face it, when you look at the amount of enterprise software in the wild, you’re not going to be able to &lt;code class=&quot;highlighter-rouge&quot;&gt;apt&lt;/code&gt; eveything; you can now gate trusted binaries into resources to be used by charms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope you enjoy it!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New wiki bundles for you to play with...</title>
   <link href="http://castrojo.github.io/2016/04/05/new-wiki-bundles-for-you-to-play-with-dot-dot-dot/"/>
   <updated>2016-04-05T12:19:00+00:00</updated>
   <id>http://castrojo.github.io/2016/04/05/new-wiki-bundles-for-you-to-play-with-dot-dot-dot</id>
   <content type="html">&lt;p&gt;I’ve pushed new sample bundles to the &lt;a href=&quot;http://jujucharms.com&quot;&gt;Juju Charm Store&lt;/a&gt;. The first is a simple mediawiki with mysql:&lt;/p&gt;

&lt;script async=&quot;&quot; src=&quot;https://assets.ubuntu.com/v1/juju-cards-v1.2.0.js&quot;&gt;&lt;/script&gt;

&lt;div class=&quot;juju-card&quot; style=&quot;width:600px&quot; data-id=&quot;bundle/wiki-simple-0&quot;&gt;&lt;/div&gt;

&lt;p&gt;For a more scalable approach I’ve also pushed up a version with MariaDB, haproxy, and memcached. This allows you to add more wiki units to horizontally scale:&lt;/p&gt;

&lt;div class=&quot;juju-card&quot; style=&quot;width:600px&quot; data-id=&quot;~jorge/bundle/wiki-scalable-0&quot;&gt;&lt;/div&gt;

&lt;p&gt;I’ll be working on a “smoosh everything onto one machine” bundle next, so stay tuned!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Solarized theme in Ubuntu</title>
   <link href="http://castrojo.github.io/2016/03/18/solarized-theme-in-ubuntu/"/>
   <updated>2016-03-18T10:16:00+00:00</updated>
   <id>http://castrojo.github.io/2016/03/18/solarized-theme-in-ubuntu</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;http://www.jorgecastro.org/images/solarized.png&quot; alt=&quot;terminal&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Servers at your fingertips...</title>
   <link href="http://castrojo.github.io/2016/03/03/servers-at-your-fingertips-dot-dot-dot/"/>
   <updated>2016-03-03T16:02:00+00:00</updated>
   <id>http://castrojo.github.io/2016/03/03/servers-at-your-fingertips-dot-dot-dot</id>
   <content type="html">&lt;p&gt;One of the nice things about system containers is that it makes the cost of creating a new machine essentially zero. With &lt;a href=&quot;https://linuxcontainers.org/lxd/news/&quot;&gt;LXD 2.0&lt;/a&gt; around the corner this is now easier than ever. LXD now ships with native simplestreams support, which means we can now list and cache all sorts of interesting OS cloud images.&lt;/p&gt;

&lt;p&gt;You can see every image provided by doing a &lt;code class=&quot;highlighter-rouge&quot;&gt;lxc image list images:&lt;/code&gt;, but the nice thing is the syntax is easy to remember. You can now just launch all sorts of Linux Server cloud images from all sorts of vendors and projects:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ lxc launch images:centos/7/amd64 test-centos
Creating test-centos
Retrieving image: 100%
Starting test-centos
$ lxc exec test-centos /bin/bash
[root@test-centos ~]# yum update
Loaded plugins: fastestmirror
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;… and so on. Give em a try:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lxc launch images:debian/sid/amd64
lxc launch images:gentoo/current/amd64
lxc launch images:oracle/6.5/i386
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And of course ubuntu is supported:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;lxc launch ubuntu:14.04
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So if you’re sick of manually snagging ISOs for things and keeping those up to date, then you’ll dig 16.04, just install LXD and you can launch any Linux almost instantly. We’ll keep ‘em cached and updated for you too. I can &lt;code class=&quot;highlighter-rouge&quot;&gt;lxc launch ubuntu:12.04&lt;/code&gt; and do &lt;code class=&quot;highlighter-rouge&quot;&gt;python --version&lt;/code&gt; faster than I can look it up on packages.ubuntu.com. That’s pretty slick.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>70k Nvidia Downloads in 6 months</title>
   <link href="http://castrojo.github.io/2016/02/17/70k-nvidia-driver-downloads-in-6-months/"/>
   <updated>2016-02-17T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2016/02/17/70k-nvidia-driver-downloads-in-6-months</id>
   <content type="html">&lt;p&gt;It’s been about six months since ricotz and mamarley have &lt;a href=&quot;http://www.omgubuntu.co.uk/2015/08/ubuntu-nvidia-graphics-drivers-ppa-is-ready-for-action&quot;&gt;brought fresh
Nvidia
drivers&lt;/a&gt;
to Ubuntu users. I covered some of this in my SCaLE 14x talk on &lt;a href=&quot;https://www.socallinuxexpo.org/scale/14x/presentations/gaming-ubuntu&quot;&gt;Ubuntu
Gaming&lt;/a&gt;.
If you missed SCaLE then feel free to check out &lt;a href=&quot;http://princessleia.com/journal/?p=11266&quot;&gt;Liz’s
summary&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In that talk I summarized some of the challenges (and victories!) to
making our platform be better for gamers. One of the obvious pain points
is of course, delivering fresh drivers for people, which can be
difficult (especially when it comes to managing regressions). First
let’s look at the version breakdown:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;346.72: 57
346.96: 292
352.21: 219
352.79: 62
355.06: 3291
355.11: 11483
358.09: 16949
358.16: 22317
361.18: 4076
361.28: 10219
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And then by Ubuntu release:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;precise: 630
trusty: 30665
vivid: 10908
wily: 21537
xenial: 5225
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Trusty wins, no surprise there. Wow, way more people on Xenial than I
expected, good to see people are testing our upcoming LTS! And finally,
by architecture:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;amd64: 65661
armhf: 31
i386: 3273
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So when you add them all up, it’s about 70,000 downloads of Nvidia
drivers from the PPA in the last six months. This is great, as it means
there’s certainly a demand for fresh drivers, but it’s also frightening
when you consider the end-user experience of traditional packaging and
all the wonderful face punching that entails. But hey, that’s XCOM.
Snappy can’t come fast enough!&lt;/p&gt;

&lt;p&gt;Want to help? &lt;a href=&quot;http://store.steampowered.com/browse/linux/&quot;&gt;Buy a game&lt;/a&gt;
and check out
&lt;a href=&quot;https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa&quot;&gt;ppa:graphics-drivers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Oh and happy belated Vulkan day!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Ubuntu Steam Box</title>
   <link href="http://castrojo.github.io/2014/08/21/the-ubuntu-steam-box/"/>
   <updated>2014-08-21T00:00:00+00:00</updated>
   <id>http://castrojo.github.io/2014/08/21/the-ubuntu-steam-box</id>
   <content type="html">&lt;p&gt;It’s been about a year since &lt;a href=&quot;http://www.jorgecastro.org/2013/09/25/the-faux-steam-machine/&quot;&gt;I started building my own Steam
console&lt;/a&gt;
for my living room. A ton has changed since then. SteamOS has been
released, In Home Streaming is out of beta and generally speaking the
living room experience has gotten a ton better.&lt;/p&gt;

&lt;p&gt;This blog post will be a summary of what’s changed in the past year, in
the hopes that it will help someone who might be interested in building
their own “next-gen console” for about the same price, and take
advantage of nicer hardware and all the things that PC gaming has to
offer.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;My &lt;a href=&quot;http://www.jorgecastro.org/2013/09/25/the-faux-steam-machine&quot;&gt;first blog
post&lt;/a&gt;
on building your own box.&lt;/li&gt;
  &lt;li&gt;A talk I gave at Penguicon on
&lt;a href=&quot;https://www.youtube.com/watch?v=lXF5VebhhAc&quot;&gt;SteamOS&lt;/a&gt;
for background.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-1-choosing-the-hardware&quot;&gt;Step 1: Choosing the hardware&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;I consider the &lt;a href=&quot;https://www.youtube.com/watch?v=zcrFzOpTHkw&quot;&gt;NVIDIA GTX
750Ti&lt;/a&gt; to be the best
thing to happen in hardware for this sort of project. It’s based on
their newest Maxwell technology so it runs cool, it does not need a
special power supply plug, and it’s pretty small. It’s also between
$120-$150 – which means nearly any computer is now capable of
becoming a game console. And a competent one at that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;I have settled on the Cooler Master 110 case, which is one of the
least obnoxious PC case you can find that won’t look too bad in the
living room. Unfortunately Valve’s &lt;a href=&quot;http://www.washingtonpost.com/blogs/the-switch/files/2013/11/med_STEAM_M_console__hero.jpg&quot;&gt;slick-looking
case&lt;/a&gt;
did not kick the case makers into making awesome-looking living room
style cases. The closest you can find is the &lt;a href=&quot;http://www.silverstonetek.com/raven/products/index.php?model=RVZ01&quot;&gt;Silverstone
RVZ01&lt;/a&gt;,
which has the right insides, but they ruined the outside with crazy
plastic ribs. The &lt;a href=&quot;http://www.pcworld.com/article/2465160/digital-storm-bolt-ii-review-rise-of-the-un-steam-machines.html&quot;&gt;Digital Storm Bolt
II&lt;/a&gt;
looks great, but you can’t buy the case seperately. Both cases have
CD drives for some reason, boo!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://www.jorgecastro.org/images/coolermaster.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Nvidia has a &lt;a href=&quot;http://www.geforce.com/whats-new/guides/geforce-gtx-750-ti-mini-itx-pc-build-guide&quot;&gt;great
guide&lt;/a&gt;
on building a PC within the console-price range if you want to
look around. I also recommend checking out
&lt;a href=&quot;http://www.reddit.com/r/buildapc&quot;&gt;r/buildapc&lt;/a&gt;, which has tons of
Mini-ITX/750Ti builds.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Another alternative is the excellent &lt;a href=&quot;http://www.intel.com/content/www/us/en/nuc/overview.html&quot;&gt;Intel
NUC&lt;/a&gt; and
&lt;a href=&quot;http://www.gigabyte.us/products/list.aspx?s=47&amp;amp;ck=104&quot;&gt;Gigabyte
Brix&lt;/a&gt;. These
make for great portable machines, but for the upcoming AAA titles
for Linux like Metro Redux, Star Citizen, and so on I decided to go
with a dedicated graphics card. Gigabyte makes a &lt;a href=&quot;http://www.gigabyte.us/products/list.aspx?s=47&amp;amp;ck=104&quot;&gt;very
interesting&lt;/a&gt;
model that is the size of a NUC, but with a GTX 760(!). This looks
to be ideal, but unfortunately when &lt;a href=&quot;https://www.youtube.com/watch?v=hGI8iYjk0rc&quot;&gt;Linus reviewed
it&lt;/a&gt; he found
heat/throttling issues. When they make a Maxwell based one of these
it will likely be awesome.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Don’t forget &lt;a href=&quot;http://smile.amazon.com/Microsoft-Xbox-Wireless-Controller-Windows/dp/B004QRKWKQ/ref=sr_1_3?ie=UTF8&amp;amp;qid=1408660327&amp;amp;sr=8-3&amp;amp;keywords=xbox+controller+for+PC&quot;&gt;the
controller&lt;/a&gt;.
The Xbox wireless ones will work out of the box. I recommend
avoiding the off-brand dongles you see on Amazon, they can be hit
or miss.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;step-2-choosing-the-software&quot;&gt;Step 2: Choosing the software&lt;/h2&gt;

&lt;p&gt;I’ve been using SteamOS since it came out. The genious about SteamOS is
that fundamentally it does only 2 things. It boots, and then runs Steam
Big Picture (BPM) mode. This means for a dedicated console, the OS is
really not important. I have 2 drives in the box, one with SteamOS, and
one with Ubuntu running BPM. After running both I prefer Ubuntu/Steam to
SteamOS:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Faster boot (Upstart v. SysV)&lt;/li&gt;
  &lt;li&gt;PPAs enable fresh access to new Nvidia drivers and Plex Home Theater&lt;/li&gt;
  &lt;li&gt;Newer kernels and access to HWE kernels over the next 5 years&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tend to alternate between the two, but since I am more familiar with
Ubuntu it makes it easier to use for, so the rest of this post will
cover how to build a dedicated Steam Box using Ubuntu.&lt;/p&gt;

&lt;p&gt;This isn’t to say SteamOS is bad, in fact, setting it up is actually
easier than doing the next few steps; remember that the entire point is
to not care about the OS underneath, and get you into Steam. So build
whatever is most comfortable for you!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.jorgecastro.org/images/stats.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;step-3-installation&quot;&gt;Step 3: Installation&lt;/h2&gt;

&lt;p&gt;These are the steps I am currently doing. It’s not for beginners, you
should be comfortable admining an Ubuntu system.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Install Ubuntu 14.04.&lt;/li&gt;
  &lt;li&gt;(Optional) - Install &lt;code class=&quot;highlighter-rouge&quot;&gt;openssh-server&lt;/code&gt;. I don’t know about you but
lugging a keyboard/mouse back and forth to my living room is not my
idea of a good time. I prefer to sit on the couch, and ssh into the
box from my laptop.&lt;/li&gt;
  &lt;li&gt;Add the &lt;a href=&quot;https://launchpad.net/~xorg-edgers/+archive/ubuntu/ppa&quot;&gt;xorg-edgers
PPA&lt;/a&gt;. You
don’t need this per se, but let’s go all in!&lt;/li&gt;
  &lt;li&gt;Install the latest Nvidia drivers: As of this
writing, nvidia-graphics-drivers-343.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After you’ve installed the drivers and all the security updates you
should reboot to get to your nice new clean desktop system. Now it’s
time to make it a console:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Log in, and install Steam. Log into steam, make sure it works.&lt;/li&gt;
  &lt;li&gt;Add the Marc Deslaurier’s &lt;a href=&quot;https://launchpad.net/~mdeslaur/+archive/ubuntu/steamos&quot;&gt;SteamOS
packages&lt;/a&gt; PPA.
These are rebuilt for Ubuntu and he does a great job keeping them up
to date.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;sudo apt-get install steamos-compositor steamos-modeswitch-inhibitor steamos-xpad-dkms&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Log out, and in the login screen, click on the Ubuntu symbol by the
username and select the Steam session. This will get you the
dedicated Steam session. Make sure that works. Exit out of that and
now let’s make it so we can boot into that new session by default&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://askubuntu.com/q/51086/235&quot;&gt;Enable autologin in LightDM&lt;/a&gt;
after the fact so that when your machine boots it goes right into
Steam’s Big Picture mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’re using Valve’s xpad module instead of xboxdrv because that’s what
they use in SteamOS and I don’t want to deviate too much. But if you
prefer about xboxdrv then &lt;a href=&quot;http://www.omgubuntu.co.uk/2014/06/ubuntu-xbox-controller-support-xboxdrv-driver&quot;&gt;follow this
guide&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Steam updates itself at the client level so there’s no need to worry
about that, the final step for a console-like experience is to
&lt;a href=&quot;http://askubuntu.com/q/9/235&quot;&gt;enable automatic updates&lt;/a&gt;. Remember
you’re using PPAs, so if you’re not confident that you can fix
things, just leave it and do maintenance by hand every once in
a while.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;step-4-home-theater-bling&quot;&gt;Step 4: Home Theater Bling&lt;/h3&gt;

&lt;p&gt;If you’re going to have a nice living room box, then let’s use it for
other things. I have a dedicated server with media that I share out with
Plex Media Server, so in this step I’ll install the client side.&lt;/p&gt;

&lt;p&gt;Plex Home Theater:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo add-apt-repository ppa:plexapp/plexht
sudo add-apt-repository ppa:ppa:pulse-eight/libcec
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install plexhometheater
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In Steam you can then click on the + symbol, Add a non-steam game, and
then add Plex. Use the gamepad (not the stick) to navigate the UI once
you launch it. If you prefer XBMC/Kodi you can &lt;a href=&quot;http://wiki.xbmc.org/index.php?title=Installing_XBMC_for_Linux&quot;&gt;install that
instead&lt;/a&gt;.
I found that the controller also works out of the box there, so it’s a
nice experience no matter which one you choose.&lt;/p&gt;

&lt;h3 id=&quot;step-5-in-home-streaming&quot;&gt;Step 5: In Home Streaming&lt;/h3&gt;

&lt;p&gt;This is a killer Steam feature, that allows you to stream your Windows
games to your new console. It’s very straight forward, just have both
machines on and logged into Steam on the same network, they will
autodiscover each other, and your Windows games will show up in your
Ubuntu/Steam UI, and you can stream them. Though it works suprisingly
well over wireless, you’ll definately want to ensure you’ve got gigabit
ethernet if you want to stream games 1080p at 60 frames per second.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;And that’s basically it! There’s tons of stuff I’ve glossed over, but
these are the basic steps. There’s lots of little things you can do,
like remove a bunch of desktop packages you won’t need (so you don’t
need to download and update them) and other tips and tricks, I’ll try to
keep everyone up to date on how it’s going.&lt;/p&gt;

&lt;p&gt;Enjoy your new next-gen gaming console!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.jorgecastro.org/images/xcom.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;TODO:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;You can change out the plymouth theme to use &lt;a href=&quot;http://repo.steampowered.com/steamos/pool/main/p/plymouth-themes-steamos/&quot;&gt;the one for
SteamOS&lt;/a&gt; -
but I have an SSD in the box and combined with the fast boot it
never comes up for me anyway.&lt;/li&gt;
  &lt;li&gt;It’d be cool to make a prototype of Ubuntu Core and then provide
Steam in an LXC container on top of that so we don’t have to use a
full blown desktop ISO.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 

</feed>
