Mixed Architecture Kubernetes Cluster

I've been playing around with my Kubernetes cluster running on Raspbery Pi's and had a cool idea for demo's. Since the pi's are a bit underpowered, I added some VM's to my laptop as Nodes in the cluster.

So now I have a mix of ARM servers and x86 servers that I can schedule work. This is a great example of how node selection and labels can work in a Kubernetes cluster since I can target either architecture easily!

Looking at the above image, you can see I've added a "type" label to each node. Nodes 04 && 05 are VM's on my laptop and the others are pi's. In the NodeSelector field of a ReplicationController, I can simply enter which type I request and the pod will schedule accordingly.

Install NodeJs - Linux

Here are the simple steps to install nodejs on a linux machine. I always struggle to get the latest version from http://nodejs.org, and wanted to write up the simple steps to get installed:

Manually

$ wget http://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-x64.tar.gz
$ tar xzf node-v4.2.2-linux-x64.tar.gz
$ sudo cp -rp node-v4.2.2-linux-x64 /usr/local/
$ sudo ln -s /usr/local/node-v4.2.2-linux-x64 /usr/local/node

Note: This is referencing version 4.2.2, but update the commands with the version you are wanting to install.

Package Manager

https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions

kubectl config

sample kubectl config

I seem to always forget the syntax for setting up a new connection to a cluster via kubectl. Here's my quick cheat sheet which just is what I typically use:

kubectl config set-cluster <env> --server=<apiServer>  
kubectl config set-context <env> --cluster=<env> --user=<env> --namespace=<namespace>  
kubectl config set-credentials <env> --token=<token>  
kubectl config use-context <env>  

NOTE: This setup assumes the you are using tokens for auth to the cluster.

Legend:

  • env = What you want to use to reference the environment
  • token = The token to access the API server
  • namespace = Namespace to use if not wanting to use default

$ANDROID_HOME

I recently was playing with the Ionic Framework on my fancy new Mac Book Pro. I started the hello world project and was able to get the ios project up and running without much hassle, however, I wasn't able to get the android version to work.

Turns out I had to install the sdk and set my $ANDROID_HOME variables as well as add to my $PATH.

In addition, the android studio v1.0 is now released, and I thought the old way of unzipping the zip file was gone (Turns out if you scroll a bit you can still get it it).

Here's what I used to get it running:

export ANDROID_HOME=/Users/<username>/Library/Android/sdk export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools

Here's a link to another post which gives a bit more detail, but didn't work (copy/paste) for me: Setting ANDROID_HOME Environmental Variable On Mac

Setting Up Domain on Azure

I recently just setup this blog on Microsoft Azure. Getting Ghost (my blog) engine up and running was the easy part. To get setup there was a template from the gallery. Yes, Ok, Yes, I agree and we're rolling.

I'm still working on how to get Ghost upgraded to the newest version (I'll write another post once I figure that part out).

Setup WebSite in Azure

To setup a domain you first need to create the website in azure and get it running.

To use custom domains, choose a "web hosting plan mode" of "Shared" or higher. Custom domains cannot be used in the free offering.

Configure DNS

DNS or Domain Name System is what relates a website address to an IP Address.

The Domain Name System (DNS) is a hierarchical distributed naming system for computers, services, or any resource connected to the Internet or a private network. It associates information from domain names with each of the assigned entities. Most prominently, it translates easily memorized domain names to the numerical IP addresses needed for locating computer services and devices worldwide. --wikipedia

Azure wants to authorize that you own the domain. To do that Azure says:

...create a CNAME resource record with your DNS provider that points from either www.yourdomain.com to stevesloka.azurewebsites.net, or from awverify.www.yourdomain.com to awverify.stevesloka.azurewebsites.net.

Ok cool so I go out and setup my A Records and CNAMEs BUT, there's a problem. According to the spec, you cannot create CName's for "naked" domains which makes sense.

The trick is that Azure wants to handle the IP's internally, so we basically just point our site to the azure DNS name (e.g. stevesloka.azurewebsites.net) and we're good to go.

Also, make sure you set your A Records to "none". This was the magic that make everything work.