Skip to content

Commit 070f834

Browse files
committed
added ENV to start pgbackrest repohost as runit service on pg pod
1 parent 69f3463 commit 070f834

4 files changed

Lines changed: 57 additions & 61 deletions

File tree

bootstrap/docker/postgres/Dockerfile

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,9 @@ RUN pip3 install patroni[kubernetes$EXTRAS]==$PATRONI_VERSION
9595

9696
RUN mkdir /usr/lib/postgresql
9797
ENV PATHBACKUP = $PATH
98-
#ENV PATH=$PATH:/usr/pgsql-$PGVERSION/bin
99-
#RUN echo $PATH
10098
# Install pam_oauth2.so
10199
RUN git clone -b $PAM_OAUTH2 --recurse-submodules https://github.com/zalando-pg/pam-oauth2.git \
102100
&& make -C pam-oauth2 install \
103-
#&& curl -sL https://github.com/zalando-pg/bg_mon/archive/$BG_MON_COMMIT.tar.gz | tar xz \
104-
#&& curl -sL https://github.com/zalando-pg/pg_auth_mon/archive/$PG_AUTH_MON_COMMIT.tar.gz | tar xz \
105101
&& curl -sL https://github.com/cybertec-postgresql/pg_permissions/archive/$PG_PERMISSIONS_COMMIT.tar.gz | tar xz \
106102
&& curl -sL https://github.com/x4m/pg_tm_aux/archive/$PG_TM_AUX_COMMIT.tar.gz | tar xz \
107103
&& curl -sL https://github.com/zubkov-andrei/pg_profile/archive/$PG_PROFILE.tar.gz | tar xz \
@@ -110,7 +106,6 @@ RUN git clone -b $PAM_OAUTH2 --recurse-submodules https://github.com/zalando-pg/
110106
&& git clone https://github.com/dimitri/pgextwlist.git \
111107
&& git clone https://github.com/powa-team/pg_stat_kcache.git \
112108
&& git clone https://github.com/crunchydata/pgnodemx \
113-
#&& git clone https://github.com/pgq/pgqd.git \
114109
\
115110
&& ${PACKAGER} -y install --nodocs --noplugins --setopt=install_weak_deps=0 postgresql${PGVERSION} libevent-devel brotli-devel libbrotli \
116111
&& ${PACKAGER} -y clean all\
@@ -122,30 +117,11 @@ RUN git clone -b $PAM_OAUTH2 --recurse-submodules https://github.com/zalando-pg/
122117
&& for version in $PG_SUPPORTED_VERSIONS; do \
123118
${PACKAGER} -y update && \
124119
${PACKAGER} -y install postgresql${version}-pltcl \
125-
# postgresql${version}-dirtyread \
126-
# postgresql${version}-extra-window-functions \
127-
# postgresql${version}-first-last-agg \
128-
# postgresql${version}-hll \
129-
# postgresql${version}-hypopg \
130120
pgaudit*${version} \
131-
# postgresql${version}-pg-checksums \
132-
# postgresql${version}-pgl-ddl-deploy \
133-
# postgresql${version}-pglogical \
134-
# postgresql${version}-pglogical-ticker \
135-
# postgresql${version}-pgq-node \
136-
# postgresql${version}-pldebugger \
137-
# postgresql${version}-pllua \
138-
# postgresql${version}-plpgsql-check \
139-
# postgresql${version}-plproxy \
140-
# postgresql${version}-repack \
141-
# postgresql${version}-wal2json \
142-
#&& ${PACKAGER} -y clean all; \
143121
# Install PostgreSQL binaries, contrib, plproxy and multiple pl's
144122
&& ${PACKAGER} -y install -y postgresql${version}-contrib \
145123
postgresql${version}-plpython3 postgresql${version}-devel \
146124
pg_cron_${version} \
147-
#postgresql-${version}-pgq3 \
148-
#postgresql-${version}-pg-stat-kcache $EXTRAS \
149125
# Modify for using origial-spilo scripts
150126
&& ln -s /usr/pgsql-${version} /usr/lib/postgresql/${version} \
151127
&& export PATH=$PATHBACKUP:/usr/pgsql-${version}/bin \
@@ -175,6 +151,14 @@ RUN git clone -b $PAM_OAUTH2 --recurse-submodules https://github.com/zalando-pg/
175151
&& ${PACKAGER} -y clean all; \
176152
done
177153

154+
RUN ${PACKAGER} -y install --nodocs --noplugins --setopt=install_weak_deps=0 \
155+
glibc-devel glibc-static
156+
157+
RUN mkdir /package && cd /package && wget http://smarden.org/runit/runit-2.1.2.tar.gz && tar -xvzf runit-2.1.2.tar.gz && rm runit-2.1.2.tar.gz && cd admin/runit-2.1.2 && package/install
158+
159+
# Modify for using origial-spilo scripts
160+
RUN ln -s /usr/local/bin/dumb-init /usr/bin/dumb-init && ln -s /usr/local/bin/runsvdir /usr/bin/runsvdir
161+
178162
# Clean Up git-repos
179163
RUN rm -rf /pgextwlist \
180164
&& rm -rf /pg_stat_kcache \
@@ -247,14 +231,6 @@ RUN rm /etc/pgbackrest.conf && rm -rf /var/spool/pgbackrest;
247231
COPY scripts bootstrap major_upgrade /scripts/
248232
COPY launcher/postgres/launch.sh /
249233

250-
RUN ${PACKAGER} -y install --nodocs --noplugins --setopt=install_weak_deps=0 \
251-
glibc-devel glibc-static
252-
253-
RUN mkdir /package && cd /package && wget http://smarden.org/runit/runit-2.1.2.tar.gz && tar -xvzf runit-2.1.2.tar.gz && rm runit-2.1.2.tar.gz && cd admin/runit-2.1.2 && package/install
254-
255-
# Modify for using origial-spilo scripts
256-
RUN ln -s /usr/local/bin/dumb-init /usr/bin/dumb-init && ln -s /usr/local/bin/runsvdir /usr/bin/runsvdir
257-
258234
#RUN curl -LO https://dl.k8s.io/release/v1.26.0/bin/linux/amd64/kubectl && chmod +x kubectl && mv ./kubectl /usr/local/bin/
259235

260236
USER 26

bootstrap/scripts/configure_spilo.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040

4141
def parse_args():
42-
sections = ['all', 'patroni', 'certificate', 'wal-e', 'crontab',
42+
sections = ['all', 'patroni', 'certificate', 'pgbackrest', 'wal-e', 'crontab',
4343
'pam-oauth2', 'pgbouncer', 'bootstrap', 'standby-cluster', 'log']
4444
argp = argparse.ArgumentParser(description='Configures Spilo',
4545
epilog="Choose from the following sections:\n\t{}".format('\n\t'.join(sections)),
@@ -555,6 +555,9 @@ def get_placeholders(provider):
555555
# in Kubernetes with Etcd in a non-default namespace
556556
placeholders.setdefault('NAMESPACE', placeholders.get('POD_NAMESPACE', 'default')
557557
if USE_KUBERNETES and placeholders.get('DCS_ENABLE_KUBERNETES_API') else '')
558+
#pgBackRest
559+
placeholders.setdefault('USE_PGBACKREST', False)
560+
placeholders.setdefault('PGBACKREST_SERVER', False)
558561
# use namespaces to set WAL bucket prefix scope naming the folder namespace-clustername for non-default namespace.
559562
placeholders.setdefault('WAL_BUCKET_SCOPE_PREFIX', '{0}-'.format(placeholders['NAMESPACE'])
560563
if placeholders['NAMESPACE'] not in ('default', '') else '')
@@ -1115,6 +1118,9 @@ def main():
11151118
elif section == 'log':
11161119
if bool(placeholders.get('LOG_S3_BUCKET')):
11171120
write_log_environment(placeholders)
1121+
elif section == 'pgbackrest':
1122+
if placeholders['PGBACKREST_SERVER']:
1123+
link_runit_service(placeholders, 'pgbackrest')
11181124
elif section == 'wal-e':
11191125
if placeholders['USE_WALE']:
11201126
write_wale_environment(placeholders, '', args['force'])

launcher/pgbackrest/launch.sh

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,46 @@
44
#Define Path
55
PGBACKREST_PATH=${PGBACKREST_PATH:-'/opt/pgbackrest'}
66
source "${PGBACKREST_PATH}/bin/shell_lib.sh"
7+
78
output_info "Start pgBackRest-PreCondition-Check"
89

9-
if [ "$MODE" == "pgbackrest" ] && [ "$COMMAND" == "repo-host" ]; then
10-
output_info "pgBackRest: Start Repo-Host"
11-
pgbackrest server
10+
if [ "$USE_PGBACKREST" == true ]; then
11+
output_info "Check if RepoHost-Server needs to start"
12+
if [ "$USE_PGBACKREST" == true ] && [ "$PGBACKREST_SERVER" == true ]; then
13+
output_info "pgBackRest: Start Repo-Host"
14+
pgbackrest server &
15+
else
16+
output_info "RepoHost-Server not needed. Skip Step"
17+
fi
1218

13-
elif [ "$MODE" == "pgbackrest" ] && [ "$COMMAND" == "backup" ]; then
14-
output_info "pgBackRest: Backup-Job found"
15-
source "${PGBACKREST_PATH}/bin/backup/start.sh"
16-
output_success "pgBackRest: Backup-Job completed"
17-
else
18-
#For Restore with pgBackrest
19-
if [ "$RESTORE_ENABLE" == "true" ]; then
20-
output_info "pgBackRest: Restore-Job found"
21-
source "${PGBACKREST_PATH}/bin/restore/start.sh"
22-
output_success "Restore-Job completed"
19+
if [ "$USE_PGBACKREST" == true ] && [ "$PGBACKREST_MODE" == "backup" ]; then
20+
output_info "pgBackRest: Backup-Job found"
21+
source "${PGBACKREST_PATH}/bin/backup/start.sh"
22+
output_success "pgBackRest: Backup-Job completed"
2323
else
24-
output_info "Restore not defined - Skip Restore-Step"
25-
if [ "$RESTORE_BASEBACKUP" == "false" ]; then
26-
output_info "pgBackRest: Backup-Job found"
27-
export SELECTOR="cluster-name=${SCOPE},spilo-role=master"
28-
export COMMAND_OPTS="--type=full --stanza=db --repo=1"
29-
source "${PGBACKREST_PATH}/bin/backup/start.sh"
30-
output_info "pgBackRest: Update Restore-Configmap"
31-
configmap="${SCOPE}-pgbackrest-restore"
32-
kubectl get cm $configmap -o yaml | \
33-
sed -e 's|restore_basebackup: "false"|restore_basebackup: "true"|' | \
34-
kubectl apply -f -
35-
output_success "pgBackRest: Backup-Job completed"
24+
#For Restore with pgBackrest
25+
if [ "$RESTORE_ENABLE" == "true" ]; then
26+
output_info "pgBackRest: Restore-Job found"
27+
source "${PGBACKREST_PATH}/bin/restore/start.sh"
28+
output_success "Restore-Job completed"
3629
else
37-
output_info "Basebackup not defined - Skip create basebackup"
30+
output_info "Restore not defined - Skip Restore-Step"
31+
if [ "$RESTORE_BASEBACKUP" == "false" ]; then
32+
output_info "pgBackRest: Backup-Job found"
33+
export SELECTOR="cluster-name=${SCOPE},spilo-role=master"
34+
export COMMAND_OPTS="--type=full --stanza=db --repo=1"
35+
source "${PGBACKREST_PATH}/bin/backup/start.sh"
36+
output_info "pgBackRest: Update Restore-Configmap"
37+
configmap="${SCOPE}-pgbackrest-restore"
38+
kubectl get cm $configmap -o yaml | \
39+
sed -e 's|restore_basebackup: "false"|restore_basebackup: "true"|' | \
40+
kubectl apply -f -
41+
output_success "pgBackRest: Backup-Job completed"
42+
else
43+
output_info "Basebackup not defined - Skip create basebackup"
44+
fi
3845
fi
3946
fi
47+
else
48+
output_info "pgBackRest not used. Skip Container"
4049
fi

scripts/configure_spilo.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040

4141
def parse_args():
42-
sections = ['all', 'patroni', 'certificate', 'wal-e', 'crontab',
42+
sections = ['all', 'patroni', 'certificate', 'pgbackrest', 'wal-e', 'crontab',
4343
'pam-oauth2', 'pgbouncer', 'bootstrap', 'standby-cluster', 'log']
4444
argp = argparse.ArgumentParser(description='Configures Spilo',
4545
epilog="Choose from the following sections:\n\t{}".format('\n\t'.join(sections)),
@@ -563,14 +563,16 @@ def get_placeholders(provider):
563563
# in Kubernetes with Etcd in a non-default namespace
564564
placeholders.setdefault('NAMESPACE', placeholders.get('POD_NAMESPACE', 'default')
565565
if USE_KUBERNETES and placeholders.get('DCS_ENABLE_KUBERNETES_API') else '')
566+
#pgBackRest
567+
placeholders.setdefault('USE_PGBACKREST', False)
568+
placeholders.setdefault('COMMAND', '')
566569
# use namespaces to set WAL bucket prefix scope naming the folder namespace-clustername for non-default namespace.
567570
placeholders.setdefault('WAL_BUCKET_SCOPE_PREFIX', '{0}-'.format(placeholders['NAMESPACE'])
568571
if placeholders['NAMESPACE'] not in ('default', '') else '')
569572
placeholders.setdefault('WAL_BUCKET_SCOPE_SUFFIX', '')
570573
placeholders.setdefault('WAL_RESTORE_TIMEOUT', '0')
571574
placeholders.setdefault('WALE_ENV_DIR', os.path.join(placeholders['RW_DIR'], 'etc', 'wal-e.d', 'env'))
572575
placeholders.setdefault('USE_WALE', False)
573-
placeholders.setdefault('USE_PGBACKREST', False)
574576
cpu_count = str(min(psutil.cpu_count(), 10))
575577
placeholders.setdefault('WALG_DOWNLOAD_CONCURRENCY', cpu_count)
576578
placeholders.setdefault('WALG_UPLOAD_CONCURRENCY', cpu_count)
@@ -1131,6 +1133,9 @@ def main():
11311133
elif section == 'log':
11321134
if bool(placeholders.get('LOG_S3_BUCKET')):
11331135
write_log_environment(placeholders)
1136+
elif section == 'pgbackrest':
1137+
if placeholders['PGBACKREST_SERVER']:
1138+
link_runit_service(placeholders, 'pgbackrest')
11341139
elif section == 'wal-e':
11351140
if placeholders['USE_WALE']:
11361141
write_wale_environment(placeholders, '', args['force'])

0 commit comments

Comments
 (0)