Skip to content

Instantly share code, notes, and snippets.

@Umkus
Last active August 1, 2016 17:18
Show Gist options
  • Save Umkus/3fcdfc6e2f06b21c8e60 to your computer and use it in GitHub Desktop.
Save Umkus/3fcdfc6e2f06b21c8e60 to your computer and use it in GitHub Desktop.
CoreOS service discovery using flannel, etcd and SkyDNS.
[Unit]
Description=Service discovery for %i
After=%i.service
Requires=%i.service
[Service]
Restart=always
Environment="SLEEP=5"
Environment="TTL=10"
Environment='FORMAT="{{ .NetworkSettings.IPAddress }}"'
ExecStartPre=-/usr/bin/echo Starting watcher
ExecStart=/bin/sh -c "while sleep ${SLEEP}; do SERVICE_NAME=$(echo %i | cut -d @ -f1); INSTANCE_NAME=$(echo %i | cut -d @ -f2); IMAGE_NAME=$(echo %i | tr -d @); IP=$(docker inspect --format ${FORMAT} $IMAGE_NAME); echo Refreshing IP of $IMAGE_NAME; etcdctl set --ttl ${TTL} /skydns/yourdomain/$SERVICE_NAME/$INSTANCE_NAME '{\"host\":\"'$IP'\"}'; done;"
[X-Fleet]
MachineOf=%i.service
[Unit]
Description=SkyDNS
After=docker.service
Requires=docker.service
[Service]
Restart=always
TimeoutStartSec=600s
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker rm -f skydns
ExecStartPre=/usr/bin/docker pull skynetservices/skydns
ExecStartPre=/usr/bin/etcdctl set /skydns/config '{"nameservers": ["8.8.8.8:53","8.8.4.4:53"]}'
ExecStart=/usr/bin/docker run --rm --name skydns --net host -e "SKYDNS_ADDR=${COREOS_PRIVATE_IPV4}:53" -e "SKYDNS_NAMESERVERS=8.8.8.8:53" skynetservices/skydns -verbose -discover -domain yourdomain
ExecStop=-/usr/bin/docker rm -f skydns
[X-Fleet]
Global=true
#cloud-config
coreos:
flannel:
interface: $public_ipv4
etcd:
discovery: https://discovery.etcd.io/generate_your_own
addr: $public_ipv4:4001
peer-addr: $public_ipv4:7001
fleet:
public-ip: $public_ipv4
units:
- name: flanneld.service
drop-ins:
- name: 50-network-config.conf
content: |
[Service]
ExecStartPre=/usr/bin/etcdctl set /coreos.com/network/config '{ "Network": "10.3.0.0/16" }'
command: start
- name: etcd.service
command: start
- name: fleet.service
command: start
- name: docker-tcp.socket
command: start
enable: true
content: |
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=2375
Service=docker.service
BindIPv6Only=both
[Install]
WantedBy=sockets.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment