From d0a842a5096d754852c424e25a4b3e1dc609fade Mon Sep 17 00:00:00 2001 From: Em Sharnoff Date: Thu, 16 Nov 2023 18:17:42 +0100 Subject: [PATCH] Update vm-builder to v0.19.0 and move its customization here (#5783) ref neondatabase/autoscaling#600 for more --- .github/workflows/build_and_test.yml | 5 +- vm-image-spec.yaml | 126 +++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 vm-image-spec.yaml diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index ed7c0d3dfa..caa7ebee05 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -852,7 +852,7 @@ jobs: run: shell: sh -eu {0} env: - VM_BUILDER_VERSION: v0.18.5 + VM_BUILDER_VERSION: v0.19.0 steps: - name: Checkout @@ -874,8 +874,7 @@ jobs: - name: Build vm image run: | ./vm-builder \ - -enable-file-cache \ - -cgroup-uid=postgres \ + -spec=vm-image-spec.yaml \ -src=369495373322.dkr.ecr.eu-central-1.amazonaws.com/compute-node-${{ matrix.version }}:${{needs.tag.outputs.build-tag}} \ -dst=369495373322.dkr.ecr.eu-central-1.amazonaws.com/vm-compute-node-${{ matrix.version }}:${{needs.tag.outputs.build-tag}} diff --git a/vm-image-spec.yaml b/vm-image-spec.yaml new file mode 100644 index 0000000000..2aa935fac6 --- /dev/null +++ b/vm-image-spec.yaml @@ -0,0 +1,126 @@ +# Supplemental file for neondatabase/autoscaling's vm-builder, for producing the VM compute image. +--- +commands: + - name: cgconfigparser + user: root + sysvInitAction: sysinit + shell: 'cgconfigparser -l /etc/cgconfig.conf -s 1664' + - name: pgbouncer + user: nobody + sysvInitAction: respawn + shell: '/usr/local/bin/pgbouncer /etc/pgbouncer.ini' + - name: postgres-exporter + user: nobody + sysvInitAction: respawn + shell: 'DATA_SOURCE_NAME="user=cloud_admin sslmode=disable dbname=postgres" /bin/postgres_exporter' +shutdownHook: | + su -p postgres --session-command '/usr/local/bin/pg_ctl stop -D /var/db/postgres/compute/pgdata -m fast --wait -t 10' +files: + - filename: pgbouncer.ini + content: | + [databases] + *=host=localhost port=5432 auth_user=cloud_admin + [pgbouncer] + listen_port=6432 + listen_addr=0.0.0.0 + auth_type=scram-sha-256 + auth_user=cloud_admin + auth_dbname=postgres + client_tls_sslmode=disable + server_tls_sslmode=disable + pool_mode=transaction + max_client_conn=10000 + default_pool_size=16 + max_prepared_statements=0 + - filename: cgconfig.conf + content: | + # Configuration for cgroups in VM compute nodes + group neon-postgres { + perm { + admin { + uid = postgres; + } + task { + gid = users; + } + } + memory {} + } +build: | + # Build cgroup-tools + # + # At time of writing (2023-03-14), debian bullseye has a version of cgroup-tools (technically + # libcgroup) that doesn't support cgroup v2 (version 0.41-11). Unfortunately, the vm-monitor + # requires cgroup v2, so we'll build cgroup-tools ourselves. + FROM debian:bullseye-slim as libcgroup-builder + ENV LIBCGROUP_VERSION v2.0.3 + + RUN set -exu \ + && apt update \ + && apt install --no-install-recommends -y \ + git \ + ca-certificates \ + automake \ + cmake \ + make \ + gcc \ + byacc \ + flex \ + libtool \ + libpam0g-dev \ + && git clone --depth 1 -b $LIBCGROUP_VERSION https://github.com/libcgroup/libcgroup \ + && INSTALL_DIR="/libcgroup-install" \ + && mkdir -p "$INSTALL_DIR/bin" "$INSTALL_DIR/include" \ + && cd libcgroup \ + # extracted from bootstrap.sh, with modified flags: + && (test -d m4 || mkdir m4) \ + && autoreconf -fi \ + && rm -rf autom4te.cache \ + && CFLAGS="-O3" ./configure --prefix="$INSTALL_DIR" --sysconfdir=/etc --localstatedir=/var --enable-opaque-hierarchy="name=systemd" \ + # actually build the thing... + && make install + + FROM quay.io/prometheuscommunity/postgres-exporter:v0.12.0 AS postgres-exporter + + # Build pgbouncer + # + FROM debian:bullseye-slim AS pgbouncer + RUN set -e \ + && apt-get update \ + && apt-get install -y \ + curl \ + build-essential \ + pkg-config \ + libevent-dev \ + libssl-dev + + ENV PGBOUNCER_VERSION 1.21.0 + ENV PGBOUNCER_GITPATH 1_21_0 + RUN set -e \ + && curl -sfSL https://github.com/pgbouncer/pgbouncer/releases/download/pgbouncer_${PGBOUNCER_GITPATH}/pgbouncer-${PGBOUNCER_VERSION}.tar.gz -o pgbouncer-${PGBOUNCER_VERSION}.tar.gz \ + && tar xzvf pgbouncer-${PGBOUNCER_VERSION}.tar.gz \ + && cd pgbouncer-${PGBOUNCER_VERSION} \ + && LDFLAGS=-static ./configure --prefix=/usr/local/pgbouncer --without-openssl \ + && make -j $(nproc) \ + && make install +merge: | + # tweak nofile limits + RUN set -e \ + && echo 'fs.file-max = 1048576' >>/etc/sysctl.conf \ + && test ! -e /etc/security || ( \ + echo '* - nofile 1048576' >>/etc/security/limits.conf \ + && echo 'root - nofile 1048576' >>/etc/security/limits.conf \ + ) + + COPY cgconfig.conf /etc/cgconfig.conf + COPY pgbouncer.ini /etc/pgbouncer.ini + RUN set -e \ + && chown postgres:postgres /etc/pgbouncer.ini \ + && chmod 0644 /etc/pgbouncer.ini \ + && chmod 0644 /etc/cgconfig.conf + + COPY --from=libcgroup-builder /libcgroup-install/bin/* /usr/bin/ + COPY --from=libcgroup-builder /libcgroup-install/lib/* /usr/lib/ + COPY --from=libcgroup-builder /libcgroup-install/sbin/* /usr/sbin/ + COPY --from=postgres-exporter /bin/postgres_exporter /bin/postgres_exporter + COPY --from=pgbouncer /usr/local/pgbouncer/bin/pgbouncer /usr/local/bin/pgbouncer