In this blog post we'll set up Kontena on top of CoreOS on GCE. In the previous blog, I described Kontena's architecture.
We'll use the authentication service hosted by kontena.
To register an account, we need to install the command line interface. It's packaged at the moment as a ruby gem, so make sure that ruby is installed.
I personally use this trick to install gems local to a project directory:
cat env.sh
(out) export GEM_HOME=`pwd`/.gems
(out) export PATH=$PATH:`pwd`/.gems/bin
source env.sh # evaluate the exports in the current shell
And install the cli, and register an account. Follow the instructions provided by the client.
gem install kontena-cli
kontena register
We'll adapt the instructions on how to set up a CoreOS cluster. I recommend to browse through them as well, to get a feeling of what we're about to do.
master.yml
file with the cloud config content described on the CoreOS cluster page.KONTENA_VAULT_KEY
and KONTENA_VAULT_IV
with the provided command cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1
. Put them in the master.yml
file.Now we should add a SSL certificate to encrypt the http traffic. If you're going to deploy something else than an experiment, I strongly recomment to get a domain name, and get a valid certificate. A Let's Encrypt certificate will do.
We'll create a self signed certificate for now, because we will not be using a domain name.
openssl genrsa -out private.key 2048
openssl req -new -key private.key -out public.csr -subj "/CN=kontena-master/"
openssl x509 -req -days 365 -in public.csr -signkey private.key -out public.crt
cat public.crt private.key > kontena-master.pem
cat kontena-master.pem
Copy the content of kontena-master.pem
in the master.yml file. Mind the indentation!
Now we'll create the master server. I picked the instructions on how to create a CoreOS stable instance from the CoreOS documentation.
gcloud compute instances create kontena-master \
(out) --image https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-1122-2-0-v20160906 \
(out) --zone europe-west1-b \
(out) --machine-type n1-standard-1 \
(out) --metadata-from-file user-data=master.yml \
(out) --tags=http-server,https-server
Find the external IP address of the master in the output from gcloud, and put it in an environmental variable.
export KONTENA_MASTER_IP=aaa.bbb.ccc.ddd
As the last step of setting up the master, we'll log in to it. Note that we have to ignore the validity of our self-signed certificate. This is not how things should be done, but will get a fast result for a quick evaluation.
SSL_IGNORE_ERRORS=true kontena login --name kontena-master-gce https://$KONTENA_MASTER_IP
SSL_IGNORE_ERRORS=true kontena grid create testgrid
SSL_IGNORE_ERRORS=true kontena grid cloud-config testgrid > grid_node.yml
gcloud compute instances create \
(out) kontena-testgrid-node1 \
(out) --image https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-1122-2-0-v20160906 \
(out) --zone europe-west1-b \
(out) --machine-type n1-standard-1 \
(out) --metadata-from-file user-data=grid_node.yml \
(out) --tags=http-server,https-server
(out)
gcloud compute instances create \
(out) kontena-testgrid-node2 \
(out) --image https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-1122-2-0-v20160906 \
(out) --zone europe-west1-b \
(out) --machine-type n1-standard-1 \
(out) --metadata-from-file user-data=grid_node.yml \
(out) --tags=http-server,https-server
gcloud compute instances create \
(out) kontena-testgrid-node3 \
(out) --image https://www.googleapis.com/compute/v1/projects/coreos-cloud/global/images/coreos-stable-1122-2-0-v20160906 \
(out) --zone europe-west1-b \
(out) --machine-type n1-standard-1 \
(out) --metadata-from-file user-data=grid_node.yml \
(out) --tags=http-server,https-server
Take a look at some of the provided example applications on GitHub. Clone the repo, go to one of the directories containing a kontena.yml
file, and run kontena app deploy
to deploy that application.