From 26466237b99f9d2202bd8ad50ab45cd1781cd9cf Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Mon, 23 Jul 2018 17:41:17 +0300 Subject: [PATCH] Update docker-compose example to postgres 10 (#737) Some other changes are related to the new version of confd, which now requires specifying etcd url instead of etcd host. --- Dockerfile | 21 +++++++++------------ docker-compose.yml | 8 ++++---- docker/dev_patroni_cluster.sh | 2 +- docker/entrypoint.sh | 10 +++++----- extras/README.md | 2 +- 5 files changed, 20 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index d412ebd9..897de850 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,45 +1,42 @@ ## This Dockerfile is meant to aid in the building and debugging patroni whilst developing on your local machine ## It has all the necessary components to play/debug with a single node appliance, running etcd -FROM postgres:9.6 +FROM postgres:10 MAINTAINER Alexander Kukushkin RUN export DEBIAN_FRONTEND=noninteractive \ && echo 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";' > /etc/apt/apt.conf.d/01norecommend \ && apt-get update -y \ && apt-get upgrade -y \ - && apt-get install -y curl jq haproxy python-psycopg2 python-yaml python-requests python-six python-pysocks \ - python-dateutil python-pip python-setuptools python-prettytable python-wheel python-psutil python locales \ + # postgres:10 is based on debian, which has patroni package. We will install all required dependencies + && apt-get install -s patroni | sed -n -e '/^Inst patroni /d' -e 's/^Inst \([^ ]\+\) .*$/\1/p' \ + | xargs apt-get install -y curl jq haproxy locales python3-etcd python3-kazoo \ ## Make sure we have a en_US.UTF-8 locale available && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \ - && pip install 'python-etcd>=0.4.3,<0.5' click tzlocal cdiff \ - && mkdir -p /home/postgres \ && chown postgres:postgres /home/postgres \ # Clean up - && apt-get remove -y python-pip python-setuptools \ + && apt-get purge -y libpython2.7-stdlib libpython2.7-minimal \ && apt-get autoremove -y \ && apt-get clean -y \ && rm -rf /var/lib/apt/lists/* /root/.cache -ENV ETCDVERSION 3.2.3 +ENV ETCDVERSION 3.2.23 RUN curl -L https://github.com/coreos/etcd/releases/download/v${ETCDVERSION}/etcd-v${ETCDVERSION}-linux-amd64.tar.gz \ | tar xz -C /usr/local/bin --strip=1 --wildcards --no-anchored etcd etcdctl -ENV CONFDVERSION 0.11.0 +ENV CONFDVERSION 0.16.0 RUN curl -L https://github.com/kelseyhightower/confd/releases/download/v${CONFDVERSION}/confd-${CONFDVERSION}-linux-amd64 > /usr/local/bin/confd \ && chmod +x /usr/local/bin/confd ADD patronictl.py patroni.py docker/entrypoint.sh / ADD patroni /patroni/ ADD extras/confd /etc/confd -RUN ln -s /patronictl.py /usr/local/bin/patronictl -### Setting up a simple script that will serve as an entrypoint -RUN mkdir /data/ && touch /pgpass /patroni.yml \ - && chown postgres:postgres -R /patroni/ /data/ /pgpass /patroni.yml /etc/haproxy /var/run/ /var/lib/ /var/log/ +RUN sed -i 's/env python/&3/' patroni*.py && ln -s /patronictl.py /usr/local/bin/patronictl && mkdir /data/ /run/haproxy \ + && touch /pgpass /patroni.yml && chown postgres:postgres -R /patroni/ /data/ /pgpass /patroni.yml /etc/haproxy /var/run/ /var/lib/ /var/log/ EXPOSE 2379 5432 8008 diff --git a/docker-compose.yml b/docker-compose.yml index b6824c91..bff610de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,7 +15,7 @@ dbnode1: - ./patroni:/patroni env_file: docker/patroni-secrets.env environment: - PATRONI_ETCD_HOST: patroni_etcd:2379 + PATRONI_ETCD_URL: http://patroni_etcd:2379 PATRONI_NAME: dbnode1 PATRONI_SCOPE: testcluster @@ -28,7 +28,7 @@ dbnode2: - ./patroni:/patroni env_file: docker/patroni-secrets.env environment: - PATRONI_ETCD_HOST: patroni_etcd:2379 + PATRONI_ETCD_URL: http://patroni_etcd:2379 PATRONI_NAME: dbnode2 PATRONI_SCOPE: testcluster @@ -41,7 +41,7 @@ dbnode3: - ./patroni:/patroni env_file: docker/patroni-secrets.env environment: - PATRONI_ETCD_HOST: patroni_etcd:2379 + PATRONI_ETCD_URL: http://patroni_etcd:2379 PATRONI_NAME: dbnode3 PATRONI_SCOPE: testcluster @@ -53,6 +53,6 @@ haproxy: - "5000:5000" - "5001:5001" environment: - PATRONI_ETCD_HOST: patroni_etcd:2379 + PATRONI_ETCD_URL: http://patroni_etcd:2379 PATRONI_SCOPE: testcluster command: --confd diff --git a/docker/dev_patroni_cluster.sh b/docker/dev_patroni_cluster.sh index 9f21b128..2e21faac 100755 --- a/docker/dev_patroni_cluster.sh +++ b/docker/dev_patroni_cluster.sh @@ -84,7 +84,7 @@ function docker_run() ETCD_CONTAINER="${PATRONI_SCOPE}_etcd" docker_run ${ETCD_CONTAINER} ${DOCKER_IMAGE} --etcd -DOCKER_ARGS="--link=${ETCD_CONTAINER}:${ETCD_CONTAINER} -e PATRONI_SCOPE=${PATRONI_SCOPE} -e PATRONI_ETCD_HOST=${ETCD_CONTAINER}:2379" +DOCKER_ARGS="--link=${ETCD_CONTAINER}:${ETCD_CONTAINER} -e PATRONI_SCOPE=${PATRONI_SCOPE} -e PATRONI_ETCD_URL=http://${ETCD_CONTAINER}:2379" PATRONI_ENV=$(sed 's/#.*//g' docker/patroni-secrets.env | sed -n 's/^PATRONI_.*$/-e &/p' | tr '\n' ' ') PATRONI_VOLUME="-v $(dirname $(dirname $(realpath $0)))/patroni:/patroni" diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 0796b70c..1daa9c8b 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -38,10 +38,10 @@ while getopts "$optspec" optchar; do done exec $CONFD zookeeper -node ${PATRONI_ZOOKEEPER_HOSTS} else - while ! curl -s ${PATRONI_ETCD_HOST}/v2/members | jq -r '.members[0].clientURLs[0]' | grep -q http; do + while ! curl -s ${PATRONI_ETCD_URL}/v2/members | jq -r '.members[0].clientURLs[0]' | grep -q http; do sleep 1 done - exec $CONFD etcd -node $PATRONI_ETCD_HOST + exec $CONFD etcd -node $PATRONI_ETCD_URL fi ;; etcd) @@ -74,9 +74,9 @@ while getopts "$optspec" optchar; do done ## We start an etcd -if [[ -z ${PATRONI_ETCD_HOST} && -z ${PATRONI_ZOOKEEPER_HOSTS} ]]; then +if [[ -z ${PATRONI_ETCD_URL} && -z ${PATRONI_ZOOKEEPER_HOSTS} ]]; then etcd $ETCD_ARGS > /var/log/etcd.log 2> /var/log/etcd.err & - export PATRONI_ETCD_HOST="127.0.0.1:2379" + export PATRONI_ETCD_URL="http://127.0.0.1:2379" fi export PATRONI_SCOPE @@ -108,7 +108,7 @@ __EOF__ mkdir -p "$HOME/.config/patroni" [ -h "$HOME/.config/patroni/patronictl.yaml" ] || ln -s /patroni.yml "$HOME/.config/patroni/patronictl.yaml" -[ -z $CHEAT ] && exec python /patroni.py /patroni.yml +[ -z $CHEAT ] && exec python3 /patroni.py /patroni.yml while true; do sleep 60 diff --git a/extras/README.md b/extras/README.md index a4c3d59a..03b7cf1a 100644 --- a/extras/README.md +++ b/extras/README.md @@ -3,7 +3,7 @@ `confd` directory contains haproxy template files for the [confd](https://github.com/kelseyhightower/confd) -- lightweight configuration management tool You need to copy content of `confd` directory into /etcd/confd and run confd service: ```bash -$ confd -prefix=/service/$PATRONI_SCOPE -backend etcd -node $PATRONI_ETCD_HOST -interval=10 +$ confd -prefix=/service/$PATRONI_SCOPE -backend etcd -node $PATRONI_ETCD_URL -interval=10 ``` It will periodically update haproxy.cfg with the actual list of Patroni nodes from `etcd` and "reload" haproxy when it is necessary.