Dock(erize) those Containers
I do a thing or two with containers from time to time, that involves building Mesosphere or Kubernetes setups. Often enough my OS of choice happens to be CoreOS, but as ashamed as I am I should mention that I often end up scratching my head and wondering what the hell that command was again :pensive:?!? Hope this helps me recall.
Services
Provided, that you are using CoreOS as your VM OS, you may configure your boxes
through the so-called cloud-config files. In several setups you will provide
etcd details in the cloud config file. This section will just give you a
general idea of where to look for your resources when introspecting CoreOS
boxes.
One may query the unit-files known to a CoreOS box by running the followng command
systemctl list-unit-files
I, for one, often end up looking at the the service files of my etcd.service
which happen to be somewhere in /run/systemd/system/etcd.service.d. A
cloud-config containing
#cloud-config
coreos:
etcd:
name: etcd
addr: $private_ipv4:4001
bind-addr: 0.0.0.0
peer-addr: $private_ipv4:7001
cluster-active-size: 1
etcd-http-read-timeout: 86400
snapshot: true
units:
- name: etcd.service
command: start
May result to the following conf in the etcd.service.d directory:
[Service]
Environment="ETCD_ADDR=10.220.4.81:4001"
Environment="ETCD_BIND_ADDR=0.0.0.0"
Environment="ETCD_CLUSTER_ACTIVE_SIZE=1"
Environment="ETCD_NAME=etcd"
Environment="ETCD_PEER_ADDR=10.220.4.81:7001"
Environment="ETCD_SNAPSHOT=true"
Some observation leads one to assume that there happens to be a one-to-one
correspondence between the cloud-config content and the eventual
configuration with the key names capitalized and prefixed with ETCD\_ and
the $private\_ipv4 token substituted for the machines private IP address.
According to the CoreOS documentation one should find unit files
in the /etc/systemd/system directory.
Orchestration
Fleet handles orchestration on CoreOS clusters. Somewhere I once read to “think of it as systemd for the cloud” and darn… that is spot on.
As you start daemons on your box with systemctl (controlling systemd) one
may start services on the cluster with fleetctl (controlling fleetd).
The beautiful thing, I came to learn about fleet is that it stores the settings
in etcd. I discovered it after, destroying some VM’s, creating them anew and
discovering that somehow my services were magically spawned on the fresh boxes
without my intervention. Introspecting the etcd store left me clueless but
some basic sleuthing uncovered that fleet actually keeps
track of this information in hidden etcd keys. There is actually a world of
CoreOS-related etcd secrets to behold if you run
etcdctl ls --recursive _coreos.com).
Discovery
The entire concept of clustering on CoreOS seems to require clustered machines to share a discovery repository. This is the way clustered machines seem to share information in the CoreOS world and etcd seems to be one of the popular solutions for making this happen.
Debugging
Somewhere along the line a unit/service breaks and needs to be debugged.
CoreOS logs everything into /var/log/journal/* and journalctl allows
one to view the content of these binary logs.
sudo journalctl --file=/var/log/journal/REF/FILE.log
I ran into the "Failed units: 1" notification which is presented at login.
After reviewing which services were up with sudo systemctl list-units, I
discovered that the gce-coreos-cloudinit.service had failed. Running
journalctl and filtering for the logs regarding a specific service using
the -u SERVICENAME parameters makes for much easier reading:
sudo journalctl -u gce-coreos-cloudinit.service --file=JOURNAL_FILE.log