Trip Report: Codemotion in Rome

The Eternal City

Last week, I was in one of my favorite cities, Rome, for Codemotion conference. There are many cities to see in the world and normally, I do not like to revisit cities that I’ve been before. However, Rome is a great exception. It was my fifth visit there over the years and it was still as exciting as the first time. I also found out that Google has a small office in Rome, so I paid a quick visit next morning before attending the conference.

Codemotion

Codemotion is a tech conference that happens in multiple locations around Europe like Amsterdam, Tel Aviv and of course, its original home Rome. Codemotion Rome lasts 2 days and there are all sorts of topics on all sorts of languages, frameworks and technologies. The audience is mainly software engineers from Italy and speakers are from all over the world. I don’t know the official numbers but my guess is that there were more than 1500 developers over 2 days. Overall, it’s a very diverse and fun conference to be part of.

Google Cloud was one of the sponsors and we had good presence in Codemotion with 4 speakers. On the first day, Giovanni Galloro, a customer engineer from Rome office, had a talk in the opening keynote. It was followed by a Big Data and Machine Learning talk by my colleague and good friend, Felipe Hoffa. I had my talk in the afternoon right after lunch and Alfredo Morresi, our community manager in Italy, did his talk on the second day. Azzura Rogone, our community specialist was there as well with a number of Google Developer Group people and their booth. I had to unfortunately fly out of Rome next day for another conference, so I missed the second day.

My talk on Istio

It was my second time speaking at Codemotion Rome. Last year, I talked about gRPC and this year I did a talk on Istio, an open source project to manage microservices. The room was full of about 80 people, with some people standing.

In my talk, I briefly talked about containers and Kubernetes and how they fall short in managing microservices. Then, I gave an overview of Istio and how it helps with managing microservices in production. Finally, I got into details of Istio building blocks like Envoy, Pilot, Mixer, Traffic Management and showed demos along the way.

My laptop refused to connect to the projector, so I had to use someone else’s laptop to present. I was planning on doing live demos of Istio running on Kubernetes in Minikube but without my laptop, that was not possible. Thankfully, I had videos of my demos, so I could show those instead. If you want to have my slides, here they are:

Stop reinventing the wheel with Istio

 

Questions

After the talk, I got some questions. These are some of them that I remember.

First question was whether Kubernetes and Istio will merge into a single project at some point as they seem to complement each other well. My answer was probably not because someone people just need Kubernetes, some people need more. These are two open source projects that will coexist and complement each other but it will be up to people to decide if they want to use it together.

There was a question on whether you can have custom metrics in Istio and the answer was yes. Istio is quite pluggable. By default, you get some default metrics but it’s quite easy to add your custom metrics.

Another question was whether there’s a way to plug in their default web gateway to Istio. I wasn’t too sure of this question but in Istio, there’s Ingress that controls all the incoming traffic, so whatever the gateway is doing, it should be possible to limit things with Ingress.

Finally, the last question was about custom dashboards. Someone was wondering whether it’s possible to create a custom dashboard and plug that into Istio, instead of Grafana. Again, since Istio is pluggable, it should be possible to create your own add-ons and plug that in but I told him that it’s not something I have tried myself.

Advertisements

Istio + Kubernetes on Windows

23534644

I’ve been recently looking into Istio, an open platform to connect and manage microservices. After Containers and Kubernetes, I believe that Istio is the next step in our microservices journey where we standardize on tools and methods on how to manage and secure microservices. Naturally, I was very excited to get my hands on Istio.

While setting up Istio on Google Kubernetes Engine (GKE) is pretty straightforward, it’s always useful to have a local setup for debugging and testing. I specifically wanted to setup Istio on my local Minikube Kubernetes cluster on my Windows machine. I ran into a few minor issues that I want to outline here in case it is useful to someone out there.

I assume you have a Minikube cluster setup already and running. If not, you can check out my previous post on how to setup and run a Minikube cluster on your Windows machine. Istio has a Quickstart tutorial for Kubernetes. I’ll follow that but it’s Linux-centric and some of the commands have to be adopted for Windows.

Download Istio

Here is the command to download Istio from Quickstart:

curl -L https://git.io/getLatestIstio | sh -

This is a Linux shell command and it won’t work on Windows cmd or PowerShell. Thankfully, someone already wrote an equivalent PowerShell script here. I used the script as is, only changed the IstioVersion to 0.5.1, the latest Istio version as of today:

param(
 [string] $IstioVersion = "0.5.1"
)

The script downloads Istio and sets an ISTIO_HOME as environment variable.

PS C:\dev\local\istio> .\getLatestIstio.ps1
Downloading Istio from https://github.com/istio/istio/releases/download/
0.5.1/istio_0.5.1_win.zip to path C:\dev\local\istio

Then, I added %ISTIO_HOME%\bin to PATH  to make sure I can run istoctl commands.

Install and Verify Istio

To install Istio and enable mutual TLS authentication between sidecars, I ran the same command in the quickstart:

PS C:\istio-0.5.1> kubectl apply -f install/kubernetes/istio-auth.yaml
namespace "istio-system" created
clusterrole "istio-pilot-istio-system" created
clusterrole "istio-sidecar-injector-istio-system" created
clusterrole "istio-mixer-istio-system" created
clusterrole "istio-ca-istio-system" created
clusterrole "istio-sidecar-istio-system" created

And verify that all the Istio pods are running:

PS C:\istio-0.5.1> kubectl get pods -n istio-system
NAME                           READY STATUS  RESTARTS AGE
istio-ca-797dfb66c5-x4bzs      1/1   Running  0       2m
istio-ingress-84f75844c4-dc4f9 1/1   Running  0       2m
istio-mixer-9bf85fc68-z57nq    3/3   Running  0       2m
istio-pilot-575679c565-wpcrf   /2    Running  0       2m

Deploy the sample app

Deploying an app is a little different on Windows as well. To deploy the BookSample app with Envoy container injection, this is the command you would normally run on Linux:

kubectl create -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)

The redirection causes problems on PowerShell. Instead, you can first run the istioctl command and save it to an intermediate yaml:

istioctl kube-inject -f .\samples\bookinfo\kube\bookinfo.yaml > bookinfo_inject.yaml

Then, you can apply the intermediate yaml:

PS C:\istio-0.5.1> kubectl create -f .\bookinfo_inject.yaml
service "details" created
deployment "details-v1" created
service "ratings" created
deployment "ratings-v1" created
service "reviews" created
deployment "reviews-v1" created
deployment "reviews-v2" created
deployment "reviews-v3" created
service "productpage" created
deployment "productpage-v1" created
ingress "gateway" created

 

With that, you will have BookInfo app deployed and managed by Istio. Hope this was useful to get Istio + Kubernetes running in Minikube on Windows.

Minikube on Windows

When I’m playing with Kubernetes, I usually get a cluster from Google Kubernetes Engine (GKE) because it’s literally a single gcloud command to get a Kubernetes cluster up and running on GKE.  It is sometimes useful though to have a Kubernetes cluster running locally for testing and debugging. Minikube is perfect for this.

logo

Minikube runs a single-node Kubernetes cluster inside a VM on your laptop. There are instructions on how to install it on Linux, Mac and Windows. Unfortunately, instructions for Windows is a little lacking, so I want to document how I got Minikube up and running on my Windows 10 machine.

First, you need to download the minikube-windows-amd64.exe file, rename it to minikube.exe and add it to your path, as explained in the instructions for Windows. Instructions make it sound like you’re done at this point but if you try to start minikube in PowerShell admin mode, you will get an error like this:

carbon

This is because Minikube needs a VM and by default, it tries to use VirtualBox. On Windows, you can either use Hyper-V (available natively on Windows 10) or you can install VirtualBox. Many people (here and here) recommend VirtualBox to avoid issues but I didn’t want to install something extra like VirtualBox, so I decided to go with Hyper-V. You can tell Minikube via –vm-driver=hyperv flag to use Hyper-V but this also failed with the same error earlier.

carbon (1)

What’s happening? Turns out, there’s a bug on Minikube and Windows 10. This GitHub issue explains the details if you’re interested and this very useful comment explains what you need to do. You basically need to create a Virtual Switch in Hyper-V and allow your actual internet connection share its connection with this Virtual Switch.

After you create the Virtual Switch, you can start minikube with Hyper-V with additional –hyperv-virtual-switch flag. It’s a good idea to also delete .minikube folder under your home folder and don’t forget to start PowerShell in admin mode.

carbon

This takes a while for the first time as it needs to download ISO images etc. but once done, you can test the local cluster by creating a deployment and deploying an echoserver pod:

carbon (1)

That’s it! Hope this was useful for you to get Minikube up and running on Windows.

Little Mermaid and the Balkans

I don’t get to visit this many new places in this short amount of time usually but last week I got to visit 4 cities in 4 countries. The amazing thing was that I had never been to any of these cities or countries before!

My journey started in Copenhagen, Denmark on Monday. I had been in all countries around Denmark but not in Denmark itself, so I was happy to finally add Denmark to the list of visited countries. I had to work on Monday, so I paid a visit the Google office in Copenhagen. This was my the 27th Google office I ever visited 🙂

IMG_20171016_192415-01

Monday evening, we organised a meetup with the Google Developer Group (GDG) in the Google. I talked about .NET apps on Gooogle Cloud to a group of about 30 people. It was nice to connect with GDG members in Copenhagen. I even met someone who lived in northern Cyprus, my home country, before.

The main reason to be in Copenhagen was for DockerCon Europe conference. DockerCon is one of the largest tech conferences I’ve been this year with focus on Docker and Containers. DockerCon US happened earlier in the year in Austin, Texas and this was the second edition of the conference in Europe. Google Cloud was a sponsor, so we had a booth and I got to hang out with other Googlers from New York, San Francisco and Seattle offices. I also delivered a talk on Google Cloud and Containers to a full room of about 200 people probably. Overall, it was a nice event with lots of sessions. The highlight for me was when Docker announced Kubernetes support in the keynote on the first day. This was big news and a lot of people asked me about it at our booth after the announcement.

I only had Tuesday evening after the conference to see Copenhagen. I walked around the city a little bit and visited the Little Mermaid statue in the northern part of the town. Copenhagen is a nice little city but I didn’t find anything remarkable about it. I probably need to spend more time next time.

 

Wednesday evening, I flew to Belgrade, Serbia. This was the first time I ever visited a Balkan country. I grew up watching the breakup of Yugoslavia and the wars around them on TV when I was a boy in 1990s. It was nice to see that things are back to normal in that part of the world now.

I was there for Voxxed Days Belgrade on Thursday. Voxxed Days is another series of conferences that happen all around Europe. I spoke at Voxxed Days in Vienna and Luxembourg earlier this year, so this was my third Voxxed Days event. We had strong Google presence at the conference with 5 speakers. I got to meet my co-worker, Casey West, for the first time at the conference 🙂

Overall, I really enjoyed the conference. There were more than 500/600 people and my session on Kubernetes was well attended by probably around 200 or so people. After my talk, I answered questions for half an hour or more which is always nice. I also liked the artwork and slogans at the conference. Here’s an example.

IMG_20171019_134307-02

We received the same slogan as a t-shirt and a bag. We even received a rose liquor, a local beer and a Street Art in Belgrade book as gifts. Organisers went above and beyond to make sure people received good gifts.

On Friday, I had half a day in Belgrade, so I did what I always do in a new city: walk around. I went to the Belgrade Fortress, visited a couple of churches, tried some local cuisine and of course took some pictures. I was lucky that it was a gorgeous sunny and warm day.

 

Friday afternoon, I flew to Zagreb, Croatia with Edson Yanaga from RedHat for ChangeCon. This was a small but nicely organised event. Edson did the opening keynote and then I had my talk on Kubernetes again. It was unique that the conference happened at a local chocolate factory called Kras. Speakers also received a lot of chocolate as gifts, I probably have enough chocolate to last me for a year now 🙂

 

After Zagreb, I decided to take a day off on Monday and see the neighboring country, Slovenia. I took the bus from Zagreb to the capital of Slovenia: Ljubljana. It’s one of the nicest cities I’ve been with a nice fortress, cute old town. I only had a day there, so I just walked around the city, visited the main touristy areas and tried some local food.

 

As I head to the airport, I was quite happy about my little marathon of 4 cities in 4 countries.

Ada Lovelace Day in London, Unter den Linden in Berlin and DevFest in beautiful Lviv

October 10 was Ada Lovelace Day, a special day to celebrate women in science, technology, engineering and maths. Unfortunately, there are not enough women in software engineering and technology in general. Programs like Women Techmakers do a good job to encourage more women participation in technology with meetups, conferences and hackathons. One of those conferences, Tech(k)now Day, happened in London on Ada Lovelace Day and I was happy that Google Cloud was a sponsor. We had a booth and I was there with other Googlers answering questions. I also gave a talk on Containers and Kubernetes to a small group of 30+ people.

IMG_20171010_093939

After my talk, I had to rush to another conference, JAX London. It had been a while since I gave 2 talks in 1 day but at least, it was on the same topic. JAX is mainly a Java conference in a few different cities in Germany and London. I spoke at JAX conference in Mainz, Germany before. Like in Mainz, the event in London was well organised and my session was full with 100+ people, some standing (sorry!).

IMG_20171010_175742

Wednesday was travel day for Codemotion Berlin conference. I have been to Berlin before once about 5 years ago and I remember really liking it. It’s a nice city with a good vibe, good beer and lots of places to see. The tech scene in Berlin is pretty good as well. I’ve been to Germany a number of times since then but never to Berlin, so I was excited to visit again. After I finished some work at the hotel, I walked around the city a little bit. Brandenburg Gate, Reichstag Building and the Tiergarten were all near, so I didn’t waste the chance to take some pictures. Google also has an office in Berlin, I stopped by quickly to get lunch. This was my 26th Google office that I visited in my travels 🙂

Codemotion is a generalist IT/Tech conference that happens in multiple cities throughout Europe. I spoke at their events in Milan, Tel Aviv and Amsterdam before, so Berlin was the fourth Codemotion that I had the chance to speak. I again talked about containers and Kubernetes to a small group of about 40 people.

After my 24 hours in Berlin, it was time to fly to beautiful Lviv in western Ukraine to speak at DevFest Ukraine. DevFests are community organised conferences organised by Google Developer Groups (GDGs). They usually happen from September until December and some of them are like big meetups of 100 people and some of them are quite big, more than 1000 people.

I visited Lviv for the first time last year in September. At that time, I hadn’t heard anything about Lviv and I had never been to Ukraine before. I also did not know what DevFests were, so I had zero expectations. As they say, when you have zero expectations, you always get nice surprises and that’s exactly what happened with Lviv last year. I had a really good time there. The city was beautiful, I met a lot of good people that I kept in touch throughout the year and the DevFest Ukraine was one of the best and fun conferences that I attended last year.

As you can imagine, I was looking forward to visiting Lviv again and of course, DevFest Ukraine did not disappoint. This year it was more than 1000 people at the conference. There were a lot of great speakers from different companies. I did a talk on Apache Beam and Dataflow, got to meet a number of friends again, visited my favorite places in Lviv, took lots of pictures and drank quite a bit of cherry liquor at the speaker’s dinner evening after the conference 😉

It was also a little bit sad. Organisers announced that 2018 will be the last year the current committee will organise a DevFest. These people put a lot of time and effort into organising DevFest Ukraine in the last 5 years and I guess they want to take a break. While I understand it, it is still quite sad that such an amazing community event will come to an end in 2018.

This was one of those weeks that I wished did not end but as they say, all good things come to an end.