diff --git a/k8s/helm/PostDock/templates/postgres/configmap.yaml b/k8s/helm/PostDock/templates/postgres/configmap.yaml index 07a4ee0e..70b05528 100644 --- a/k8s/helm/PostDock/templates/postgres/configmap.yaml +++ b/k8s/helm/PostDock/templates/postgres/configmap.yaml @@ -8,4 +8,4 @@ data: app.db.database: "{{ .Values.postgres.db.name }}" app.db.cluster.name: "{{ .Values.postgres.clusterName }}" app.db.cluster.replication.db: "{{ .Values.postgres.replicationDb.name }}" - app.db.pool.backends: "{{ range $i, $e := .Values.postgres.nodes }}{{ if $i }},{{ end }}{{ $i }}:{{ $.Values.postDock.name }}-db-node-{{ $i }}.{{ $.Values.postDock.name }}-db::::{{ end }}" \ No newline at end of file + app.db.pool.backends: "{{ range $i, $e := .Values.postgres.nodes }}{{ if $i }},{{ end }}{{ $i }}:{{ $.Values.postDock.name }}-db-node-{{ $i }}.{{ $.Values.postDock.name }}-db.{{ $.Values.postDock.k8sFullDomainName }}::::{{ end }}" diff --git a/k8s/helm/PostDock/templates/postgres/service.yaml b/k8s/helm/PostDock/templates/postgres/service.yaml index 806b4050..46f670e1 100644 --- a/k8s/helm/PostDock/templates/postgres/service.yaml +++ b/k8s/helm/PostDock/templates/postgres/service.yaml @@ -5,6 +5,7 @@ metadata: labels: name: database system: {{ .Values.postDock.name }} + app: {{ .Values.postDock.name }} spec: clusterIP: None ports: @@ -13,4 +14,4 @@ spec: selector: name: database system: {{ .Values.postDock.name }} - \ No newline at end of file + diff --git a/k8s/helm/PostDock/templates/postgres/statefulset.yaml b/k8s/helm/PostDock/templates/postgres/statefulset.yaml index e4e6e59d..92ba2d9d 100644 --- a/k8s/helm/PostDock/templates/postgres/statefulset.yaml +++ b/k8s/helm/PostDock/templates/postgres/statefulset.yaml @@ -20,6 +20,7 @@ spec: containers: - name: db-node image: {{ .Values.postgres.image }}:{{ .Values.postgres.tag }} + imagePullPolicy: Always livenessProbe: exec: command: ['bash', '-c', '/usr/local/bin/cluster/healthcheck/is_major_master.sh'] @@ -28,7 +29,6 @@ spec: periodSeconds: 30 successThreshold: 1 failureThreshold: 3 - imagePullPolicy: Always {{ if .Values.postgres.resources }} resources: {{ toYaml .Values.postgres.resources | indent 12 }} @@ -42,13 +42,13 @@ spec: fieldRef: fieldPath: metadata.name - name: "REPLICATION_PRIMARY_HOST" - value: "{{ .Values.postDock.name }}-db-node-0.{{ .Values.postDock.name }}-db" + value: "{{ .Values.postDock.name }}-db-node-0.{{ .Values.postDock.name }}-db.{{ .Values.postDock.k8sFullDomainName }}" - name: "PARTNER_NODES" - value: "{{ range $i, $e := .Values.postgres.nodes }}{{ if $i }},{{ end }}{{ $.Values.postDock.name }}-db-node-{{ $i }}.{{ $.Values.postDock.name }}-db{{ end }}" + value: "{{ range $i, $e := .Values.postgres.nodes }}{{ if $i }},{{ end }}{{ $.Values.postDock.name }}-db-node-{{ $i }}.{{ $.Values.postDock.name }}-db.{{ $.Values.postDock.k8sFullDomainName }}{{ end }}" - name: "NODE_NAME" value: "$(MY_POD_NAME)" - name: "CLUSTER_NODE_NETWORK_NAME" - value: "$(MY_POD_NAME).{{ .Values.postDock.name }}-db" + value: "$(MY_POD_NAME).{{ .Values.postDock.name }}-db.{{ .Values.postDock.k8sFullDomainName }}" - name: "POSTGRES_DB" valueFrom: configMapKeyRef: @@ -92,4 +92,4 @@ spec: volumeClaimTemplates: - metadata: name: db-data - \ No newline at end of file + diff --git a/k8s/helm/PostDock/values.yaml b/k8s/helm/PostDock/values.yaml index db7ba079..93899112 100644 --- a/k8s/helm/PostDock/values.yaml +++ b/k8s/helm/PostDock/values.yaml @@ -5,6 +5,13 @@ postDock: # setup.name - name for your setup, unique name allows you to have many releases of postdock in the same namespace name: mysystem + # kubernetes namespace + k8sNamespace: default + # kubernetes domain (set when k8s cluster has been created 'kubeadm init --service-dns-domain XXXX') + k8sDnsDomainName: myk8scluster.local + # kubernetes full domain name + # concat does not work k8sFullDomainName: "{{ .Values.postDock.k8sNamespace }}.svc.{{ .Values.postDock.k8sDnsDomainName }}" + k8sFullDomainName: default.svc.myk8scluster.local # postgres - postgres component related settings postgres: # postgres.image - is the image to use for postgres component @@ -13,8 +20,8 @@ postgres: tag: latest-postgres10-repmgr32 # postgres.replicas - number of nodes in you postgres cluster replicas: 3 - # postgres.clusterName - cluster name inside PostDock - clusterName: mysystem_cluster + # postgres.clusterName - cluster name inside PostDock (no '_' or '-' allowed) + clusterName: mysystemCluster # postgres.db - database and credentials for it which will be created on PostDock start db: # postgres.db.name - database name @@ -104,4 +111,4 @@ barman: # barman.volume - same as {postgres.nodes.[*].volume} volume: size: 200Gi - recalimPolicy: Delete \ No newline at end of file + recalimPolicy: Delete diff --git a/make/make.sh b/make/make.sh index d88d5640..b104b691 100755 --- a/make/make.sh +++ b/make/make.sh @@ -33,14 +33,13 @@ function template { } # Getting templates processor -if [ ! -f "tmp/mo" ]; then +if [ ! -f "/tmp/mo" ]; then echo "> Getting Mustache template processor Mo" - mkdir tmp - curl -sSL https://git.io/get-mo > tmp/mo - chmod +x tmp/mo + curl -sSLk https://git.io/get-mo > /tmp/mo + chmod +x /tmp/mo fi -. ./tmp/mo +. /tmp/mo for SYSTEM_PATH in `find ./make/* -maxdepth 1 -type d`; do SYSTEM=`basename $SYSTEM_PATH` if [ "$SYSTEM_TO_MAKE" != "" ] && [ "$SYSTEM_TO_MAKE" != "$SYSTEM" ]; then diff --git a/src/Pgpool-3.7-Postgres-10.Dockerfile b/src/Pgpool-3.7-Postgres-10.Dockerfile index 24ec3617..d60c56a8 100644 --- a/src/Pgpool-3.7-Postgres-10.Dockerfile +++ b/src/Pgpool-3.7-Postgres-10.Dockerfile @@ -13,10 +13,10 @@ RUN groupadd -r postgres --gid=999 && useradd -r -g postgres -d /home/postgres ARG GOSU_VERSION=1.7 RUN set -x \ && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ - && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ - && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ + && wget --no-check-certificate -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ + && wget --no-check-certificate -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ && export GNUPGHOME="$(mktemp -d)" \ - && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ + && gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ && rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \ && chmod +x /usr/local/bin/gosu \ @@ -32,7 +32,7 @@ RUN apt-get install -y postgresql-client-10 RUN apt-get install -y libpgpool0=3.7\* pgpool2=3.7\* -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ +RUN wget --no-check-certificate https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz COPY ./ssh /home/postgres/.ssh diff --git a/src/includes/dockerfile/Pgpool-3.3-3.7.part.Dockerfile b/src/includes/dockerfile/Pgpool-3.3-3.7.part.Dockerfile index d56afe47..ab8492c8 100644 --- a/src/includes/dockerfile/Pgpool-3.3-3.7.part.Dockerfile +++ b/src/includes/dockerfile/Pgpool-3.3-3.7.part.Dockerfile @@ -7,10 +7,10 @@ RUN groupadd -r postgres --gid=999 && useradd -r -g postgres -d /home/postgres ARG GOSU_VERSION=1.7 RUN set -x \ && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ - && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ - && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ + && wget --no-check-certificate -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ + && wget --no-check-certificate -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ && export GNUPGHOME="$(mktemp -d)" \ - && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ + && gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ && rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \ && chmod +x /usr/local/bin/gosu \ @@ -26,7 +26,7 @@ RUN apt-get install -y libffi-dev libssl-dev openssh-server RUN apt-get install -y postgresql-client-{{ PG_CLIENT_VERSION }} {{ /PG_CLIENT_LATEST }}{{ ^PG_CLIENT_LATEST }} RUN TEMP_DEB="$(mktemp)" && \ - wget -O "$TEMP_DEB" "http://atalia.postgresql.org/morgue/p/postgresql-{{ PG_CLIENT_VERSION }}/postgresql-client-{{ PG_CLIENT_VERSION }}_{{ PG_CLIENT_PACKAGE_VERSION }}_amd64.deb" && \ + wget --no-check-certificate -O "$TEMP_DEB" "http://atalia.postgresql.org/morgue/p/postgresql-{{ PG_CLIENT_VERSION }}/postgresql-client-{{ PG_CLIENT_VERSION }}_{{ PG_CLIENT_PACKAGE_VERSION }}_amd64.deb" && \ (dpkg -i "$TEMP_DEB" || apt-get install -y -f) && rm -f "$TEMP_DEB" {{ /PG_CLIENT_LATEST }} @@ -34,11 +34,11 @@ RUN TEMP_DEB="$(mktemp)" && \ RUN apt-get install -y libpgpool0={{ PGPOOL_VERSION }}\* pgpool2={{ PGPOOL_VERSION }}\* {{ /PGPOOL_LATEST }}{{ ^PGPOOL_LATEST }} RUN TEMP_DEB="$(mktemp)" && \ - wget -O "$TEMP_DEB" "http://atalia.postgresql.org/morgue/p/pgpool2/pgpool2_{{ PGPOOL_PACKAGE_VERSION }}_amd64.deb" && \ + wget --no-check-certificate -O "$TEMP_DEB" "http://atalia.postgresql.org/morgue/p/pgpool2/pgpool2_{{ PGPOOL_PACKAGE_VERSION }}_amd64.deb" && \ (dpkg -i "$TEMP_DEB" || apt-get install -y -f) && rm -f "$TEMP_DEB" {{ /PGPOOL_LATEST }} -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ +RUN wget --no-check-certificate https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \ tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz COPY ./ssh /home/postgres/.ssh diff --git a/src/pgsql/bin/functions/postgres_configure b/src/pgsql/bin/functions/postgres_configure index 52980166..ddbba0dc 100755 --- a/src/pgsql/bin/functions/postgres_configure +++ b/src/pgsql/bin/functions/postgres_configure @@ -23,3 +23,5 @@ do done chown postgres:postgres $CONFIG_FILE + +echo "<<< DONE Configuring $CONFIG_FILE" diff --git a/src/pgsql/bin/postgres/entrypoint.sh b/src/pgsql/bin/postgres/entrypoint.sh index 7f6da843..d343e806 100755 --- a/src/pgsql/bin/postgres/entrypoint.sh +++ b/src/pgsql/bin/postgres/entrypoint.sh @@ -48,10 +48,14 @@ source /usr/local/bin/cluster/repmgr/configure.sh echo ">>> Sending in background postgres start..." if [[ "$CURRENT_REPLICATION_PRIMARY_HOST" == "" ]]; then - cp -f /usr/local/bin/cluster/postgres/primary/entrypoint.sh /docker-entrypoint-initdb.d/ + cp -f /usr/local/bin/cluster/postgres/primary/entrypoint.sh /primary-entrypoint.sh /docker-entrypoint.sh postgres & + sleep 20s + echo ">>> Starting primary postgres image entrypoint process..." + gosu postgres /primary-entrypoint.sh + echo "<<< DONE primary postgres image entrypoint process" else /usr/local/bin/cluster/postgres/standby/entrypoint.sh fi -/usr/local/bin/cluster/repmgr/start.sh \ No newline at end of file +/usr/local/bin/cluster/repmgr/start.sh diff --git a/src/pgsql/bin/postgres/primary/entrypoint.sh b/src/pgsql/bin/postgres/primary/entrypoint.sh index b8451f5f..3969534d 100755 --- a/src/pgsql/bin/postgres/primary/entrypoint.sh +++ b/src/pgsql/bin/postgres/primary/entrypoint.sh @@ -1,13 +1,20 @@ #!/usr/bin/env bash set -e + +echo ">>> STARTING primary postgres entrypoint..." + FORCE_RECONFIGURE=1 postgres_configure echo ">>> Creating replication user '$REPLICATION_USER'" -psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -c "CREATE ROLE $REPLICATION_USER WITH REPLICATION PASSWORD '$REPLICATION_PASSWORD' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;" +psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -tc "SELECT 1 FROM pg_user WHERE usename='$REPLICATION_USER'" \ + | grep -q 1 || psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -c "CREATE ROLE $REPLICATION_USER WITH REPLICATION PASSWORD '$REPLICATION_PASSWORD' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;" echo ">>> Creating replication db '$REPLICATION_DB'" -createdb $REPLICATION_DB -O $REPLICATION_USER +psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -c "DROP DATABASE IF EXISTS $REPLICATION_DB;" +createdb -U "${POSTGRES_USER}" "${REPLICATION_DB}" -O "${REPLICATION_USER}" #TODO: make it more flexible, allow set of IPs # Why db_name='replication' - https://dba.stackexchange.com/questions/82351/postgresql-doesnt-accept-replication-connection echo "host replication $REPLICATION_USER 0.0.0.0/0 md5" >> $PGDATA/pg_hba.conf + +echo "<<< DONE primary postgres entrypoint!" diff --git a/src/pgsql/bin/postgres/standby/entrypoint.sh b/src/pgsql/bin/postgres/standby/entrypoint.sh index 379c1de3..c9ca6f1f 100755 --- a/src/pgsql/bin/postgres/standby/entrypoint.sh +++ b/src/pgsql/bin/postgres/standby/entrypoint.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -e +echo ">>> Starting standby entrypoint process..." + wait_upstream_postgres if [ `ls $PGDATA/ | wc -l` != "0" ]; then diff --git a/src/pgsql/extensions/bin/extensions/pgrouting/install.sh b/src/pgsql/extensions/bin/extensions/pgrouting/install.sh new file mode 100755 index 00000000..fe5e3ee2 --- /dev/null +++ b/src/pgsql/extensions/bin/extensions/pgrouting/install.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +apt-get install -y postgresql-$PG_MAJOR-pgrouting diff --git a/src/pgsql/extensions/bin/extensions/postgis/install.sh b/src/pgsql/extensions/bin/extensions/postgis/install.sh index a169cf7c..12a0716c 100755 --- a/src/pgsql/extensions/bin/extensions/postgis/install.sh +++ b/src/pgsql/extensions/bin/extensions/postgis/install.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash POSTGIS_VERSION=2.4 -apt-get install -y postgresql-$PG_MAJOR-postgis-$POSTGIS_VERSION \ No newline at end of file +apt-get install -y postgresql-$PG_MAJOR-postgis-$POSTGIS_VERSION postgresql-$PG_MAJOR-postgis-$POSTGIS_VERSION-scripts