Compare commits

...

38 Commits

Author SHA1 Message Date
ofreax d557989f1d Merge branch 'hotfix-0.2.3' into stable 2016-09-03 00:34:13 +02:00
ofreax 56b686c9cd test 2016-09-02 20:56:07 +02:00
ofreax 5028b568eb - 2016-08-29 09:25:20 +02:00
ofreax 4ae2a8641f finish script 2016-08-27 10:37:00 +02:00
ofreax e8fb1f02e2 split environment variables 2016-08-19 11:58:49 +02:00
ofreax 89a69bebc5 Upgrade baseimage: light-baseimage:0.2.5 2016-08-12 14:03:36 +02:00
ofreax 975d9b7b02 [twgit] Init hotfix 'hotfix-0.2.3'. 2016-08-03 21:31:44 +02:00
osixia 30dde078d3 Update README.md 2016-07-26 17:30:58 +02:00
Bertrand Gouny a835acec86 Merge branch 'hotfix-0.2.2' into stable 2016-07-26 13:47:56 +02:00
Bertrand Gouny 1e5715cf8f v0.2.2 / keepalived 1.2.23 2016-07-26 13:44:51 +02:00
Bertrand Gouny 9f12c7f588 [twgit] Init hotfix 'hotfix-0.2.2'. 2016-07-26 13:40:08 +02:00
osixia d897c17294 Update README.md 2016-03-01 15:26:45 +01:00
ofreax 438f86407c Merge branch 'hotfix-0.2.1' into stable 2016-02-20 11:22:26 +01:00
Bertrand Gouny 9a375afa88 follow best practices 2016-02-18 11:18:54 +01:00
Bertrand Gouny fe99a80170 docs 2016-02-01 13:42:50 +01:00
ofreax 4745810e69 v0.2.1 2016-01-29 12:54:00 +01:00
ofreax 295b98ad0c [twgit] Init hotfix 'hotfix-0.2.1'. 2016-01-29 12:50:59 +01:00
Bertrand Gouny 27de0483fa Merge branch 'release-0.2.0' into stable 2016-01-27 14:01:05 +01:00
Bertrand Gouny 56e95efc54 --follow-symlinks 2016-01-27 13:46:29 +01:00
Bertrand Gouny c11e41c673 KEEPALIVED_COMMAND_LINE_ARGUMENTS 2016-01-20 09:48:53 +01:00
ofreax 0fc4b060e3 complex-bash-env 2016-01-19 20:59:40 +01:00
Bertrand Gouny 46b1825a10 docs 2016-01-19 17:18:32 +01:00
ofreax 27699af638 docs 2016-01-18 22:17:29 +01:00
ofreax 3e42563339 docs 2016-01-18 21:38:30 +01:00
ofreax 59869d4a53 docs 2016-01-17 15:19:06 +01:00
ofreax 72151d1efe docs 2016-01-17 12:36:32 +01:00
ofreax 418919e3b0 light-baseimage:0.2.1 2016-01-17 12:24:24 +01:00
ofreax 030d80b0a4 light-baseimage:0.2.1 2016-01-17 12:12:04 +01:00
ofreax 351dd6e113 Merge branch 'release-0.2.0' of github.com:osixia/docker-keepalived into release-0.2.0 2015-12-28 20:50:46 +01:00
ofreax 577da2e6b8 README.md 2015-12-28 20:50:35 +01:00
Bertrand Gouny 1a9c7307ed Merge branch 'release-0.2.0' of github.com:osixia/docker-keepalived into release-0.2.0 2015-12-22 17:40:33 +01:00
Bertrand Gouny b6fdec0d09 fix sed 2015-12-22 17:40:24 +01:00
ofreax 197ac3dee9 --no-install-recommends 2015-12-21 21:39:16 +01:00
Bertrand Gouny b779b4d438 add chmod+x KEEPALIVED_NOTIFY file 2015-12-21 10:20:18 +01:00
ofreax b0905af741 sed with follow-symlinks 2015-12-14 22:33:16 +01:00
ofreax baa3f9649c Makefile with build no cacheMakefile with build no cache 2015-12-14 19:26:21 +01:00
ofreax 76b4efa3fc Upgrade baseimage: light-baseimage:0.2.0 2015-12-12 13:48:53 +01:00
ofreax cc7a2b606b [twgit] Init release 'release-0.2.0'. 2015-12-12 13:46:57 +01:00
13 changed files with 238 additions and 150 deletions
+14
View File
@@ -1,5 +1,19 @@
# Changelog
## 0.2.3
- Upgrade baseimage: light-baseimage:0.2.5
## 0.2.2
- Upgrade baseimage: light-baseimage:0.2.4
- Keepalived version 1.2.23
## 0.2.1
- Upgrade baseimage: light-baseimage:0.2.2
## 0.2.0
- Upgrade baseimage: light-baseimage:0.2.1
- Makefile with build no cache
## 0.1.9
- Upgrade baseimage: light-baseimage:0.1.5
+6 -3
View File
@@ -1,18 +1,21 @@
NAME = osixia/keepalived
VERSION = 0.1.9
VERSION = 0.2.3
.PHONY: all build test tag_latest release
.PHONY: all build build-nocache test tag_latest release
all: build
build:
docker build -t $(NAME):$(VERSION) --rm image
build-nocache:
docker build -t $(NAME):$(VERSION) --no-cache --rm image
test:
env NAME=$(NAME) VERSION=$(VERSION) bats test/test.bats
tag_latest:
docker tag -f $(NAME):$(VERSION) $(NAME):latest
docker tag $(NAME):$(VERSION) $(NAME):latest
release: build test tag_latest
@if ! docker images $(NAME) | awk '{ print $$2 }' | grep -q -F $(VERSION); then echo "$(NAME) version $(VERSION) is not yet built. Please run 'make build'"; false; fi
+116 -16
View File
@@ -1,19 +1,78 @@
# osixia/keepalived
[![](https://badge.imagelayers.io/osixia/keepalived:latest.svg)](https://imagelayers.io/?images=osixia/keepalived:latest 'Get your own badge on imagelayers.io')
[![Docker Pulls](https://img.shields.io/docker/pulls/osixia/keepalived.svg)][hub]
[![Docker Stars](https://img.shields.io/docker/stars/osixia/keepalived.svg)][hub]
[hub]: https://hub.docker.com/r/osixia/keepalived/
Latest release: 0.2.3 - Keepalived 1.2.23 - [Changelog](CHANGELOG.md) | [Docker Hub](https://hub.docker.com/r/osixia/keepalived/) 
A docker image to run Keepalived.
> [keepalived.org](http://keepalived.org/)
- [Quick start](#quick-start)
- [Beginner Guide](#beginner-guide)
- [Use your own Backup Manager config](#use-your-own-backup-manager-config)
- [Fix docker mounted file problems](#fix-docker-mounted-file-problems)
- [Debug](#debug)
- [Environment Variables](#environment-variables)
- [Set your own environment variables](#set-your-own-environment-variables)
- [Use command line argument](#use-command-line-argument)
- [Link environment file](#link-environment-file)
- [Make your own image or extend this image](#make-your-own-image-or-extend-this-image)
- [Advanced User Guide](#advanced-user-guide)
- [Extend osixia/keepalived:0.2.3 image](#extend-osixiakeepalived023-image)
- [Make your own keepalived image](#make-your-own-keepalived-image)
- [Tests](#tests)
- [Under the hood: osixia/light-baseimage](#under-the-hood-osixialight-baseimage)
- [Changelog](#changelog)
## Quick start
This image require the kernel module ip_vs loaded on the host (`modprobe ip_vs`) and need to be run with : --cap-add=NET_ADMIN --net=host
docker run --cap-add=NET_ADMIN --net=host -d osixia/keepalived
docker run --cap-add=NET_ADMIN --net=host -d osixia/keepalived:0.2.3
## Beginner Guide
### Use your own Keepalived config
This image comes with a keepalived config file that can be easily customized via environment variables for a quick bootstrap,
but setting your own keepalived.conf is possible. 2 options:
- Link your config file at run time to `/container/service/keepalived/assets/keepalived.conf` :
docker run --volume /data/my-keepalived.conf:/container/service/keepalived/assets/keepalived.conf --detach osixia/keepalived:0.2.3
- Add your config file by extending or cloning this image, please refer to the [Advanced User Guide](#advanced-user-guide)
### Fix docker mounted file problems
You may have some problems with mounted files on some systems. The startup script try to make some file adjustment and fix files owner and permissions, this can result in multiple errors. See [Docker documentation](https://docs.docker.com/v1.4/userguide/dockervolumes/#mount-a-host-file-as-a-data-volume).
To fix that run the container with `--copy-service` argument :
docker run [your options] osixia/keepalived:0.2.3 --copy-service
### Debug
The container default log level is **info**.
Available levels are: `none`, `error`, `warning`, `info`, `debug` and `trace`.
Example command to run the container in `debug` mode:
docker run --detach osixia/keepalived:0.2.3 --loglevel debug
See all command line options:
docker run osixia/keepalived:0.2.3 --help
## Environment Variables
Environement variables defaults are set in **image/env.yaml**. You can modify environment variable values directly in this file and rebuild the image ([see manual build](#manual-build)). You can also override those values at run time with -e argument or by setting your own env.yaml file as a docker volume to `/container/environment/env.yaml`. See examples below.
Environment variables defaults are set in **image/environment/default.yaml**
See how to [set your own environment variables](#set-your-own-environment-variables)
- **KEEPALIVED_INTERFACE**: Keepalived network interface. Defaults to `eth0`
- **KEEPALIVED_PASSWORD**: Keepalived password. Defaults to `d0cker`
@@ -23,14 +82,14 @@ Environement variables defaults are set in **image/env.yaml**. You can modify en
- 192.168.1.10
- 192.168.1.11
If you want to set this variable at docker run command convert the yaml in python :
If you want to set this variable at docker run command add the tag `#PYTHON2BASH:` and convert the yaml in python:
docker run -e KEEPALIVED_UNICAST_PEERS="[192.168.1.10', '192.168.1.11']" -d osixia/phpldapadmin
docker run --env KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.1.10', '192.168.1.11']" --detach osixia/keepalived:0.2.3
To convert yaml to python online : http://yaml-online-parser.appspot.com/
- **KEEPALIVED_VIRTUAL_IPS** Add a read only user. Defaults to :
- **KEEPALIVED_VIRTUAL_IPS** Keepalived virtual IPs. Defaults to :
- 192.168.1.231
- 192.168.1.232
@@ -39,19 +98,48 @@ Environement variables defaults are set in **image/env.yaml**. You can modify en
- **KEEPALIVED_NOTIFY** Script to execute when node state change. Defaults to `/container/service/keepalived/assets/notify.sh`
### Set environment variables at run time :
- **KEEPALIVED_COMMAND_LINE_ARGUMENTS** Keepalived command line arguments; Defaults to `--log-detail --dump-conf`
Environment variable can be set directly by adding the -e argument in the command line, for example :
### Set your own environment variables
docker run -e KEEPALIVED_INTERFACE="eno1" -e KEEPALIVED_PASSWORD="password!" \
-e KEEPALIVED_PRIORITY="100" -d osixia/keepalived
#### Use command line argument
Environment variables can be set by adding the --env argument in the command line, for example:
Or by setting your own `env.yaml` file as a docker volume to `/container/environment/env.yaml`
docker run --env KEEPALIVED_INTERFACE="eno1" --env KEEPALIVED_PASSWORD="password!" \
--env KEEPALIVED_PRIORITY="100" --detach osixia/keepalived:0.2.3
docker run -v /data/my-env.yaml:/container/environment/env.yaml \
-d osixia/keepalived
## Manual build
#### Link environment file
For example if your environment file is in : /data/environment/my-env.yaml
docker run --volume /data/environment/my-env.yaml:/container/environment/01-custom/env.yaml \
--detach osixia/keepalived:0.2.3
Take care to link your environment file to `/container/environment/XX-somedir` (with XX < 99 so they will be processed before default environment files) and not directly to `/container/environment` because this directory contains predefined baseimage environment files to fix container environment (INITRD, LANG, LANGUAGE and LC_CTYPE).
#### Make your own image or extend this image
This is the best solution if you have a private registry. Please refer to the [Advanced User Guide](#advanced-user-guide) just below.
## Advanced User Guide
### Extend osixia/keepalived:0.2.3 image
If you need to add your custom TLS certificate, bootstrap config or environment files the easiest way is to extends this image.
Dockerfile example:
FROM osixia/osixia/keepalived:0.2.3
MAINTAINER Your Name <your@name.com>
ADD keepalived.conf /container/service/keepalived/assets/keepalived.conf
ADD environment /container/environment/01-custom
ADD scripts.sh /container/service/keepalived/assets/notify.sh
### Make your own keepalived image
Clone this project :
@@ -61,12 +149,14 @@ Clone this project :
Adapt Makefile, set your image NAME and VERSION, for example :
NAME = osixia/keepalived
VERSION = 0.1.6
VERSION = 0.2.3
becomes :
NAME = billy-the-king/keepalived
VERSION = 0.1.0
Add your custom scripts, environment files, config ...
Build your image :
make build
@@ -75,7 +165,7 @@ Run your image :
docker run -d billy-the-king/keepalived:0.1.0
## Tests
### Tests
We use **Bats** (Bash Automated Testing System) to test this image:
@@ -84,3 +174,13 @@ We use **Bats** (Bash Automated Testing System) to test this image:
Install Bats, and in this project directory run :
make test
### Under the hood: osixia/light-baseimage
This image is based on osixia/light-baseimage.
More info: https://github.com/osixia/docker-light-baseimage
## Changelog
Please refer to: [CHANGELOG.md](CHANGELOG.md)
+18 -20
View File
@@ -1,23 +1,21 @@
FROM osixia/light-baseimage:0.1.5
# Use osixia/light-baseimage
# sources: https://github.com/osixia/docker-light-baseimage
FROM osixia/light-baseimage:0.2.5
MAINTAINER Bertrand Gouny <bertrand.gouny@osixia.net>
# Keepalived version
ENV KEEPALIVED_VERSION 1.2.19
ENV KEEPALIVED_VERSION 1.2.23
# Use baseimage's init system.
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/run
CMD ["/container/tool/run"]
# Install Keepalived
# Download, build and install Keepalived
RUN apt-get -y update \
&& LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y \
&& LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
curl \
make \
gcc \
pkg-config \
libssl-dev \
libnl-3-dev \
libnl-genl-3-dev \
libssl-dev \
make \
pkg-config \
&& curl -o keepalived.tar.gz -SL http://keepalived.org/software/keepalived-${KEEPALIVED_VERSION}.tar.gz \
&& mkdir -p /container/keepalived-sources \
&& tar -xzf keepalived.tar.gz --strip 1 -C /container/keepalived-sources \
@@ -25,18 +23,18 @@ RUN apt-get -y update \
&& ./configure --with-kernel-dir=/lib/modules/$(uname -r)/build \
&& make && make install \
&& cd - && mkdir -p /etc/keepalived \
&& apt-get remove -y --purge --auto-remove curl make gcc pkg-config libssl-dev
# Add service directory to /container/service
ADD service /container/service
# Use baseimage install-service script and clean all
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/install-service
RUN /container/tool/install-service \
&& apt-get remove -y --purge --auto-remove curl make gcc pkg-config libssl-dev \
&& rm -f keepalived.tar.gz \
&& rm -rf /container/keepalived-sources \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Add service directory to /container/service
ADD service /container/service
# Use baseimage install-service script
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/install-service
RUN /container/tool/install-service
# Add default env variables
ADD env.yaml /container/environment/env.yaml
ADD environment /container/environment/99-default
+1
View File
@@ -0,0 +1 @@
KEEPALIVED_COMMAND_LINE_ARGUMENTS: --log-detail --dump-conf
@@ -1,11 +1,3 @@
vrrp_sync_group VG_1 {
group {
VI_1
}
{{ keepalived_notify }}
}
vrrp_instance VI_1 {
interface {{ keepalived_interface }}
@@ -30,4 +22,6 @@ vrrp_instance VI_1 {
auth_type PASS
auth_pass {{ keepalived_password }}
}
{{ keepalived_notify }}
}
@@ -1,56 +0,0 @@
#!/bin/bash -e
FIRST_START_DONE="/etc/docker-keepalived-first-start-done"
# container first start
if [ ! -e "$FIRST_START_DONE" ]; then
ln -s /container/service/keepalived/assets/keepalived.conf /etc/keepalived/keepalived.conf
#
# bootstrap config
#
sed -i "s|{{ keepalived_interface }}|$KEEPALIVED_INTERFACE|g" /etc/keepalived/keepalived.conf
sed -i "s|{{ keepalived_priority }}|$KEEPALIVED_PRIORITY|g" /etc/keepalived/keepalived.conf
sed -i "s|{{ keepalived_password }}|$KEEPALIVED_PASSWORD|g" /etc/keepalived/keepalived.conf
if [ -n "$KEEPALIVED_NOTIFY" ]; then
sed -i "s|{{ keepalived_notify }}|notify \"$KEEPALIVED_NOTIFY\"|g" /etc/keepalived/keepalived.conf
else
sed -i "/{{ keepalived_notify }}/d" /etc/keepalived/keepalived.conf
fi
# unicast peers
KEEPALIVED_UNICAST_PEERS=($KEEPALIVED_UNICAST_PEERS)
for peer in "${KEEPALIVED_UNICAST_PEERS[@]}"
do
# it's just a peer
# stored in a variable
if [ -n "${!peer}" ]; then
sed -i "s|{{ keepalived_unicast_peers }}|${!peer}\n {{ keepalived_unicast_peers }}|g" /etc/keepalived/keepalived.conf
# directly
else
sed -i "s|{{ keepalived_unicast_peers }}|${peer}\n {{ keepalived_unicast_peers }}|g" /etc/keepalived/keepalived.conf
fi
done
sed -i "/{{ keepalived_unicast_peers }}/d" /etc/keepalived/keepalived.conf
# virtual ips
KEEPALIVED_VIRTUAL_IPS=($KEEPALIVED_VIRTUAL_IPS)
for vip in "${KEEPALIVED_VIRTUAL_IPS[@]}"
do
# it's just a peer
# stored in a variable
if [ -n "${!vip}" ]; then
sed -i "s|{{ keepalived_virtual_ips }}|${!vip}\n {{ keepalived_virtual_ips }}|g" /etc/keepalived/keepalived.conf
# directly
else
sed -i "s|{{ keepalived_virtual_ips }}|${vip}\n {{ keepalived_virtual_ips }}|g" /etc/keepalived/keepalived.conf
fi
done
sed -i "/{{ keepalived_virtual_ips }}/d" /etc/keepalived/keepalived.conf
touch $FIRST_START_DONE
fi
exit 0
-2
View File
@@ -1,2 +0,0 @@
#!/bin/bash -e
exec /usr/local/sbin/keepalived -f /etc/keepalived/keepalived.conf --dont-fork --log-console -D -d
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash -e
# set -x (bash debug) if log level is trace
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
log-helper level eq trace && set -x
# try to delete virtual ips from interface
for vip in $(complex-bash-env iterate KEEPALIVED_VIRTUAL_IPS)
do
ip addr del ${vip}/32 dev ${KEEPALIVED_INTERFACE} || true
done
exit 0
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash -e
# set -x (bash debug) if log level is trace
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
log-helper level eq trace && set -x
exec /usr/local/sbin/keepalived -f /etc/keepalived/keepalived.conf --dont-fork --log-console ${KEEPALIVED_COMMAND_LINE_ARGUMENTS}
+52
View File
@@ -0,0 +1,52 @@
#!/bin/bash -e
# set -x (bash debug) if log level is trace
# https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
log-helper level eq trace && set -x
FIRST_START_DONE="${CONTAINER_STATE_DIR}/docker-keepalived-first-start-done"
# container first start
if [ ! -e "$FIRST_START_DONE" ]; then
#
# bootstrap config
#
sed -i --follow-symlinks "s|{{ keepalived_interface }}|$KEEPALIVED_INTERFACE|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
sed -i --follow-symlinks "s|{{ keepalived_priority }}|$KEEPALIVED_PRIORITY|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
sed -i --follow-symlinks "s|{{ keepalived_password }}|$KEEPALIVED_PASSWORD|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
if [ -n "$KEEPALIVED_NOTIFY" ]; then
sed -i --follow-symlinks "s|{{ keepalived_notify }}|notify \"$KEEPALIVED_NOTIFY\"|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
chmod +x $KEEPALIVED_NOTIFY
else
sed -i --follow-symlinks "/{{ keepalived_notify }}/d" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
fi
# unicast peers
for peer in $(complex-bash-env iterate KEEPALIVED_UNICAST_PEERS)
do
sed -i --follow-symlinks "s|{{ keepalived_unicast_peers }}|${!peer}\n {{ keepalived_unicast_peers }}|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
done
sed -i --follow-symlinks "/{{ keepalived_unicast_peers }}/d" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
# virtual ips
for vip in $(complex-bash-env iterate KEEPALIVED_VIRTUAL_IPS)
do
sed -i --follow-symlinks "s|{{ keepalived_virtual_ips }}|${!vip}\n {{ keepalived_virtual_ips }}|g" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
done
sed -i --follow-symlinks "/{{ keepalived_virtual_ips }}/d" ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf
touch $FIRST_START_DONE
fi
# try to delete virtual ips from interface
for vip in $(complex-bash-env iterate KEEPALIVED_VIRTUAL_IPS)
do
ip addr del ${vip}/32 dev ${KEEPALIVED_INTERFACE} || true
done
if [ ! -e "/etc/backup-manager.conf" ]; then
ln -sf ${CONTAINER_SERVICE_DIR}/keepalived/assets/keepalived.conf /etc/keepalived/keepalived.conf
fi
exit 0
+4 -40
View File
@@ -30,19 +30,10 @@ clear_container() {
remove_containers_by_cid $CONTAINER_ID
}
is_service_running() {
is_service_running_by_cid $CONTAINER_ID $1
wait_process() {
wait_process_by_cid $CONTAINER_ID $@
}
is_file_exists() {
is_file_exists_by_cid $CONTAINER_ID $1
}
wait_service() {
wait_service_by_cid $CONTAINER_ID $@
}
# generic functions
get_container_ip_by_cid() {
local IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" $1)
@@ -78,34 +69,7 @@ clear_containers_by_cid() {
remove_containers_by_cid $@
}
is_service_running_by_cid() {
docker exec $1 ps cax | grep $2 > /dev/null
}
is_file_exists_by_cid() {
docker exec $1 cat "/etc/my_init_startup_files_completed" > /dev/null 2>&1
}
wait_service_by_cid() {
wait_process_by_cid() {
cid=$1
sleep 1
# first wait image init end
while ! is_file_exists_by_cid $cid /etc/my_init_startup_files_completed
do
sleep 1
done
for service in "${@:2}"
do
# wait service
while ! is_service_running_by_cid $cid $service
do
sleep 1
done
done
sleep 5
docker exec $cid /container/tool/wait-process ${@:2}
}