fleet

Outline

  1. What is CoreOS?

    1. etcd

    2. systemd

    3. fleet

  2. What is Vagrant?

  3. Vagrant + CoreOS on local machine

  4. Docker on CoreOS

What is CoreOS?

Traditional Linux dist

App in container

Container on CoreOS

CoreOS doesn't ship a package manager 

Any software you would like to use must run within a container

/etc

distribution

fleet

run docker containers on your CoreOS with fleet

fleet & systemd

fleet =Service Manager

What is Vagrant?

A command line tool for VM

Why Using Vagrant?

Operation like Docker

Vagrant Docker
$ vagrant up $ docker run
$ vagrant halt $ docker stop
$ vagrant destroy $ docker rm
$ vagrant ssh $ docker exec
$ vagrant box add $ docker pull
$ vagrant box list $ docker images
$ vagrant push $ docker push
$ vagrant package $ docker package
$ vagrant global-status $ docker ps -a

Vagrantfile

Operation like Docker

Dockerfile

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
end
FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux

Getting Start

$ vagrant init ubuntu/trusty64
$ vagrant box list
$ vagrant up        # power on
$ vagrant halt      # power off
$ vagrant destory   # delete image

Login with SSH

$ vagrant ssh
$ # or
$ ssh -p 2222 vagrant@localhost # password: vagrant

Port forwarding

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

Mac Vlan

config.vm.box = "ubuntu/trusty64"
config.vm.network "public_network", ip: "192.168.1.2"
config.vm.provision "shell",
    run: "always",
    inline: "route add default gw 192.168.1.1"

Docker

config.vm.hostname = "docker-host"
config.vm.provision "docker"

docker-machine

Vagrant

&

(like docker hub)

Vagrant + CoreOS on local machine

How to run CoreOS

in

Vagrant?

How to run CoreOS in Vagrant?

  1. Install Vagrant

  2. Install virtualbox

# Step 1: clone vagrant file
$ git clone https://github.com/coreos/coreos-vagrant
$ cd coreos-vagrant

# Step 2: Edit user-data
$ cp user-data.template user-data
$ vim user-data

# Step 3: Edit config.rb
$ cp config.rb.template config.rb
$ vim config.rb

How to run CoreOS in Vagrant?

Edit user-data

#cloud-config

coreos:
  etcd2:
    discovery: https://discovery.etcd.io/{token}
    advertise-client-urls: http://$public_ipv4:2379
    initial-advertise-peer-urls: http://$private_ipv4:2380
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://$private_ipv4:2380,http://$private_ipv4:7001
  fleet:
    public-ip: "$public_ipv4"
  units:
  - name: etcd2.service
    command: start
  - name: fleet.service
    command: start

curl -w "\n" 'https://discovery.etcd.io/new?size=3'

Edit config.rb

# cluster instance
$num_instances=3

# tocken
$new_discovery_url="https://discovery.etcd.io/new?size=#{$num_instances}"

# docker expose port to localhost
$expose_docker_tcp=2375

# Customize VMs
$vm_gui = false
$vm_memory = 1024
$vm_cpus = 1

Start CoreOS VM

$ vagrant up
$ vagrant ssh core-01
$ vagrant ssh core-02
$ vagrant ssh core-03

Launching containers with fleet

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c \
          "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"
ExecStop=/usr/bin/docker stop busybox1

app.service

[Unit]
Description=My Apache Frontend
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill apache1
ExecStartPre=-/usr/bin/docker rm apache1
ExecStartPre=/usr/bin/docker pull coreos/apache
ExecStart=/usr/bin/docker run --rm --name apache1 -p 80:80 \
          coreos/apache /usr/sbin/apache2ctl -D FOREGROUND
ExecStop=/usr/bin/docker stop apache1

[X-Fleet]
Conflicts=apache@*.service

apache@1.service & apache@2.service

$ fleetctl list-machines
$ fleetctl list-units
$ fleetctl start app.service
$ fleetctl list-units
$ fleetctl start apach@*.service
$ fleetctl list-units

fleet manage service on cluster

Q & A

CoreOSVagrantDocker

By chang-ning tsai

CoreOSVagrantDocker

  • 395