In a recent trip to Aruba my wife and I found a great little local restaurant to get fresh fish about 5 miles south of the airport in a little town called Savaneta. There we found Zeerover. A great little fish market restaurant where the fish is loaded off the ships that morning and served that day. If you like "fish fry" you are going to love this place. Part of the restaurant is the whole experience.
Be prepared to wait
This is a really popular place especially on Sundays. The wait to order your food can sometimes take 1 1/2 hour, but we were lucky this Sunday because we only waited for 30 minutes. Waiting in line just increases your appetite and everything tastes better when you are hungry.
Ordering the simple way (Cash Only)
Zeerover Menu
This is a cash only business. So be prepared to pay with Cash (USD or Aruban Florins) they do not take a credit or debit card. Their boat captains get paid cash for bringing in the catch of the day, and they expect the same from their customers, Cash only. When you finally get to the counter to order. You have a couple of choices. Corn bread, Fries, Shrimp (typically a little over priced) and Fish. What kind of fish depends on what the boats brought in that morning. You pick from an ice chest right there at the ordering counter. You can pick how many pieces you want. and they weigh it and tell you how much you owe them. You have no idea what fish is available until you get up to the counter. When they run out of fish for the day they are done. So don't get there too late.
They also don't post any prices, but the prices seem to be pretty reasonable. I thought the shrimp was kind of expensive, but the fish was most definitely a good deal. For two people it was about $30 USD. Which in Aruba is a pretty good deal.
Incredible food
Fish and Shrimp fry
We ordered Fish, Fries, Shrimp and Corn bread. We could have skipped the corn bread it was more like a corn pancake, and we did not care much for it. The rest of the food was great. If you like fresh deep fried food this is the place to go.
Great Location
If you like the sound of the a busy restaurant next to an ocean, you will like this place. My wife found the perfect spot right next to the water. In the morning the boat come right up to the restaurant and unload their fish.When it is time for lunch every part of the dock becomes part of the restaurant. All of the tables are outside and most have some kind of shade. No need to worry about rain, because it never rain on Aruba. Or so I am told by the natives.
Everyone needs a vacation! We all need a break from the busy lives that we lead. A chance to rejuvenate. Get away from all of our responsibilities. Pretend if only for a moment that there aren't science fair projects to get done, bills to pay, kids to run from music lessons to sport practices, deadlines at work.... My wife and I actually do a really good job disconnecting from the "Normal" world that we live in when we are on vacation. One of the things we don't take a vacation from is our religion.
Benefits of Church on Vacation
Okay, I know you are thinking this is going to be preachy, but many that know us know that our religion is part of who we are. So one of the things we always do is go to church on Sunday. Not only do we get a spiritual booster shot, we get to enjoy the company of people in the place we are visiting. Because we have something in common with these people, our belief in Jesus Christ and his Gospel, we quickly make friends and have something to share. We have never had a bad experience doing this. Just the opposite. Many times we have found some connection, albeit sometimes a very distant connection with someone there.
Finding the Church in Aruba
There are great resources on LDS tools, the meeting house locator (https://www.lds.org/maps/meetinghouses/) to find where churches are and when they hold church. So if you have a smart phone or even a computer, you can quickly find out where and when church is held. You can also find out what language the meetings are held in. This was very handy in Aruba because they speak 4 languages on the small island. Papiamento, Dutch, English, and Spanish. We had two choices. A branch in Oranjestad (Spanish/Papiamento) or in San Nicolas (English). We chose the English speaking branch in the town of San Nicolas. It was about a 20 minute drive from our hotel in Oranjestad.
Strange looks from the tourist
We got dressed in our Sunday best and headed down from our hotel room through the lobby. A lobby filled with vacationers in their swimsuits and beach gear ready for another sunny day on the beach. To say we had strange looks from people is an understatement. We had several questions from people on where we were going. Many people asked us where the wedding was being held. We just mentioned that we where headed to Church. You should have seen their looks. Some were "good for you", others gave a look of confusion. Anyway, we used it as a small missionary moment. We hopped in the car and headed south on the 10 mile drive to the other side of the island. It was another beautiful day in Aruba.
Every Branch has its own Culture
Every time we have gone to church on vacation we always find something unique and special about the wards or branches that we go to. The San Nicolas Aruba branch was no different. We walked into a branch building which we quickly learned used to be a house at one time. It is a cute building that you could tell had several great branch activities and you could feel a closeness of the members of the branch. We looked at pictures on the the wall of their branch activities, baptisms and a missionary plaque of a missionary recently sent out from the branch to the Paris France mission. We took our seats in the makeshift chapel which was mostly just chairs (enough for 40 people) in what used to be a family room in the house.
Before the Sacrament meeting started, we were greeted by the branch president, several other members of the branch and the missionaries. Of course we have a soft spot for the missionaries because Dallin is out on his mission. They were a very friendly congregation and we felt right at home. We also met another couple that were there on vacation as well. They where from Utah and were there on a get away from life just like us. (Great minds think alike).
Bi-lingual Church
The San Nicolas Aruba Branch is an interesting branch because their meetings are in English and Spanish. We found this out from talking to the missionaries. They told us that Sacrament meeting would be in English and Spanish. All of the announcements would be given in both languages and then there would be a Spanish talk and an English talk. The Elders and some members of the ward would translate to people that only spoke one or the other languages. Most people in Aruba speak 3 or more languages so the only translating I saw being down was to us on the other couple there from Utah.
Music Loud and Reverent
Anytime you go to another ward or branch you always find a big difference in the musicality of the congregation. We have been in some wards that sang so quietly you could only hear the organ, others you could not hear the organ at all. As we started the first hymn we were shocked at how loud this small branch of 30 people sang. It was awe-inspiring. When they sang the hymns you felt they really meant what they sang. It was loud yet reverent at the same time. You could really feel the closeness and spirituality of the branch. What would it be like if all of the wards/branches in the Church sang like this small branch in Aruba, with conviction, reverence and volume.
The music was also sung in both English and Spanish at the same time. So they always annouced the hymns numbers in Spanish and English. It was very interesting hearing the hymns sung in two languages at the same time.
Surprise connection
With every trip Paige and I take we always find some kind of connection. This of course is even
more prevalent at church. Well we found that there is an Elder Sheppard (Paige's maiden name) in Aruba. It is such a small name in the Church so they started looking at how they are related. They did not find a connection but of course being true Sheppards they hit it off great.
What a great trip and a great experience. I can't wait for our next trip and to find new people to talk to and learn more about how the Gospel is influencing their lives.
I have a simple DevOps setup I want to put into the cloud. I was looking at the fastest way I could repeatability set up an infrastructure. I found AWS CloudFormation to be pretty straight forward. And I found that I can use my same CloudFormation Templates in my OpenStack cloud as well as AWS.
In this configuration I am setting up a BuildServer(TeamCity), BuildAgents, and a Defect/Work Management Server (YouTrack). Since these tools come from the same vendor they have nice integrations that I want to take advantage.
CloudFormation Templates
CloudFormation templates are XML or JSON files that are used to describe resources, their configuration and applications running on those resources. When I first started looking at CloudFormation I put all three nodes into the same Template file. This did not work since I can only define one EC2 instance per Template file. You can describe multiple resources like Databases, Storage, Load Balanacers, etc...
The Template has two major parts: the Description and the Resources.
Description
Resources
Auto Scaling Group – Ensure that at least one is running
Launch Group – Defines the EC2 Image, Init Scripts and where to get binary.
EC2 image – ami file, Instance Type, and Security key to use for SSH
Init Scripts- Installation scripts, start server scripts, stop server scripts.
Sources for installation – Stored in an S3 location. Automatically unzips in specified directory.
Security Group
Defines the ports to open in the firewall.
Installations of Applications
Inside the CloudFormation Template you can specify the installation zip or tar file that can be used for the installation of the application. It will automatically unzip/untar the file and put it in the directory you specify. Make sure the installation zip file is in a location that your instances can use. I use S3 containers to do this. It helps decrease cost from loading over the internet everytime it starts up. It also gives me a way to do "poor-mans" configuration management. I couple of things to remember when you are doing this.
Make sure you set permission so your instances can access them.
Get the install zip file URL and put it in your Template file.
If you are using public installations. You can make use the Public URL and set the Permission to public (readonly).
Init Scripts
These are used to setup and tear-down your applications on the Instances. I use the cfn-init helper script that gives my instance access to the template file.
The cfn-init helper script reads template metadata from the AWS::CloudFormation::Init key and acts accordingly to:
Fetch and parse metadata from CloudFormation
Install packages
Write files to disk
Enable/disable and start/stop services
Store the stop, start, install scripts in the metadata in the template file. It allows for multiple configsets, which gives me the ability to use the same template file for different configurations of the same application or different platform configurations.
Only one type of EC2 Image can be used in a CloudFormation File. (No-heterogeneous environments). You can have more than one instance in your autoscaling group but they must all be the same instance type.
Most AWS services can be used. ElasticBeanStalk, OpsWare, EC2, S3, SecurityGroups, etc..
Use a Common SSH key for everything in the same infrastructure deployment. It makes it easier to check on everything.
Create an Custom Image for instance that you want quick spin up times. No additional installation of software or packages. (BuildAgents are images).
TeamCity Template File
For the TeamCity Template file I set up the following for AWS:
Julianne Pulsipher: Thank You: One thing I have noticed over the past few years is that teenagers are spoiled. I do not say such a thing in a rotten or a cruel way, but r...
The Kubernetes Training (k8s) was built on top of the understanding of Docker and running a simple webapp (NodeJS) in a container and accessing it through security.
This is the second blog in a series of blogs about Docker and Kubernetes training. The first blog covers Docker Containers and a tutorial on how to set things up in Google Compute Engine. Check it out here (Docker Training)
Key Concepts
One of the things I quickly learned was that managing a single Container in Docker is very easy, but I can see how managing several instances of the container can be difficult and managing hundreds of heterogeneous containers would be impossible.
This is where k8s comes in. It basically lets me manage clusters of containers running on different machines in my cloud. To start k8s has a whole new nomenclature
Master - maintains the state of k8s server runtime, control entry point for nodes, pods, services
Node - represents a resource (machine) that pods are provisioned on. It runs docker, etcd, and kubelet daemons.
Pod - a collections of containers that run on a machine in a node. Way to group containers together. Good way to share storage volumes across multiple containers in the same pod.
Service and Labels - Defines a logical set of pods that make up a service or application. Policies are set up to the containers in the pods can communicate with each other. Sets up IP/Port configurations for inter-service communication. Creates a kube-proxy to front end the Service for external access.
Volume - Storage element served up from etcd. Can connect to AWS EBS, GCE Persistent disk, iSCSI volumem etc...
Container - Docker Container.
Hands On Tutorial
After the session went over the concepts we dove right into getting everything up and running. This is when things began to get hard. Mostly because I was on a windows box and "kubectl" (Command to control the k8s master) did not run on my windows box. So I created another VM in the Google Cloud to run through my tutorial. That ran into problems with ssh keys and security so it took much longer than it should have. I was not the only one having problems at this point. So we threw together a quick diagram to see how the k8s installation worked with the docker installation I had set up from the previous session (Docker Training) This diagram on the right shows how this all fits together.
Kubernetes introduces another command line tool "kubectl" This is accessible after loading components via the glcoud components command. The problem mentioned before is it is not supported on Windows without jumping through some hoops. So I had to create a linux VM instance to run the commands. But I had a hard time getting the right ssh keys on the VM to talk to my Google Cloud Engine Instance. The presenter of and his helpers were having a hard time getting everyone up and running on this step as well. After over an hour of trying to get this set up. about 70% of the people were able to create a k8s pod. "kubeclt create"
One thing that k8s gives developers is the ability to define higher level services with a simple script. They have chosen YAML for the description language to do this. Since YAML is quickly becoming a de facto standard for service description this was the logical choice. My first task was to create a multi-tierd web application. The tutorial walk me through a wordpress installation that had a mysql database, and the wordpress web application.
There are 4 YAML files that need to be created.
mysql pod - Describes the mysql node. Which volume to mount for the containers in the node.
mysql-service file - Describes the mysql-service. It contains the docker container description, ports to expose, volumes to access, user names and passwords.
wordpress pod file - Describes the wordpress node.
wordpress-service file - Describes the wordpress service. It contains the docker container description, ports, volumes and configuration information.
Some of the things to watch out for using k8s to define services:
There is no way to reference secure passwords/usernames for authenticated services. These are stored as clear text in the YAML file descriptions.
Don't even try this with Windows boxes or images. It just is not there yet.
There is not a federated k8s Master. So if your master goes down, you have lost controller of your containers and volumes. They will still be running and consuming resources, with no way to control and monitor them.
k8s really requires a higher level scheduler to set up kubelet nodes. Mesos is a good option for this.
SSH key management is not as easy as it was with just a simple docker set up.
I had the opportunity to attend a couple of days of OSCON this year. Basically this was full of Open Source Developers learning about the latest and greatest of Open Source projects. As my wife said. I got to "get my geek on" during the two days I spent at OSCON.
The first day I spent the day in a Kubernetes (K8s) and Docker hands on training from the guys at Mesos and Google. The room was packed and they actually increased the size of the room about an hour and a half into the training to allow more people to come in.
There where four sessions in the training: Container overview, Docker overview and setup, K8s overview, K8s hands on.
Training Environment - Google Cloud
To decease the amount of set up the tutorial started with a running cloud that would be easy to install and deploy Docker and Kubernetes. The obvious choice was Google Cloud. So that is what we did. Everyone downloaded the Google cloud command line tools to their laptop. I was at a disadvantage because I had a windows laptop and most of these guys had Linux or MacOS boxes. But with a couple of tweaks I got everything working fine. The setup of the tutorial was easy to get going because they had a git hub repo that we just had to clone to our boxes. Everything was in there including the slides for the lecture. Very simple and made the start of the training fast.
Container Session
This was a great overview on how containers work, why docker came about, and why using docker makes life so much easier. Containers use old technology that have been in Unix OSs for about 20 years. They are based primarily on chroot, namespaces and cgroups. There were a couple of BKMs and warnings from the trainers:
Containers are not as secure as VMs or bare-metal.
Having multiple tenants on the same VM with multiple containers is not advised. It can be done, but not advised.
Use Docker images to spin up Containers faster.
There are public repositories with images that groups can share.
Create your own private repositories for secure images.
Do not use Docker images from the public domain unless you know they are secure. Because Docker images can access the root on your os. You have to be careful what you are down loading.
Docker Session
Because they had a git repo with all of the scripts and command line setup for us. The tutorial was easy and it worked right out of the box. I created a docker container that had a little nodejs web app and made sure that I could access it remotely. I used the command line to accomplish all of the google cloud commands. There were a couple of problems with copying files from my laptop to the instance because of the windows laptop and ssh keys, but I worked around that by downloading the files from the github repository. Here are the steps we took in the tutorial:
Create a VM Instance to running my docker container on.
Create a Docker image
Inspect a running Docker container
Find Docker images
Launch pre-defined Docker image
I used the command line for most of the work and it was very easy to set up a VM and get my own docker container working on it.
There where a couple of gotcha's I took note:
Much of the docker work needed to be done on the VM and could not be done remote on my Laptop.
Windows is not a "first class" citizen with Docker Containers You really need to be running command line tools on Linux.
You need to install the google cloud command line tools on the VM as well as your laptop.
Store your Docker images in your own repository or make sure you have a global unique name in the google repo. We stepped on each other several times.
Make sure you expose the ports on the VM that you want to access any web app from the Docker Container Instance.
Running through the tutorial gave me a better understanding of terminology that is thrown around and confusing at times. The following is the list of terms that we covered and finally made some sense:
Image - This is a description of the container to run. Similar to a VM image. Images are built and stored in a registry.
Container - This is an instance of a image running on a VM in its own namespace and cgroup.
VM Instance - This is a virtual machine running in a cloud, in this example it is a Compute Engine.
Docker Daemon - This manages the containers on a specific VM or Bare metal machine. The docker command communicates with the Docker Daemon.
Overall the tutorial took about 30 minutes. I would say about 90% of the people made it through the tutorial without any problems. I got some terminology cleared up and found how easy it was to get containers up and running in Google Compute Engine. The one thing that was very clear was that docker managed containers on one machine and not multiple machines.