[JAVA] Die Geschichte, Sprint-Boot mit Kubernetes (GKE) auszuführen und keine Verbindung zu CloudSQL herzustellen

TL;DR

  1. Ich verwende gke + CloudSQL Proxy und habe versucht, die Konfigurationsdatei aus configmap mit Spring-Boot anzugeben. Vgl. Verbindung von GKE zu CloudSQL-Proxy herstellen
  2. Ich habe eine Java-API vorbereitet, die das Abfrageergebnis auf dem Bildschirm zurückgibt und darauf trifft, konnte jedoch keine Verbindung zu CloudSQL herstellen.
  3. Ich habe den mountPath geändert und es hat gut funktioniert.
  4. Es ist besser, mountPath an einer Stelle anzugeben, die nichts mit dem Arbeitsverzeichnis des Containers zu tun hat.
ex.
/deployment/config
/daemonset/config
/pod/config
etc...

Voraussetzungen

Dockerfile

FROM frolvlad/alpine-glibc:alpine-3.9

###########################################################################
# variables:
###########################################################################

ENV JAVA_VERSION=8 \
    JAVA_UPDATE=201 \
    JAVA_BUILD=09 \
    JAVA_PATH=42970487e3af4f5aa5bca3f542482c60 \
    JAVA_HOME="/usr/lib/jvm/default-jvm" \
    MYSQL_CONNECTOR_JAVA_VERSION=5.1.40

###########################################################################
# default:
###########################################################################

RUN apk add --no-cache tzdata bash dumb-init

###########################################################################
# jdk:
###########################################################################

RUN apk add --no-cache --virtual=build-dependencies wget ca-certificates unzip && \
    cd "/tmp" && \
    wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \
        "http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION}u${JAVA_UPDATE}-b${JAVA_BUILD}/${JAVA_PATH}/jdk-${JAVA_VERSION}u${JAVA_UPDATE}-linux-x64.tar.gz" && \
    tar -xzf "jdk-${JAVA_VERSION}u${JAVA_UPDATE}-linux-x64.tar.gz" && \
    mkdir -p "/usr/lib/jvm" && \
    mv "/tmp/jdk1.${JAVA_VERSION}.0_${JAVA_UPDATE}" "/usr/lib/jvm/java-${JAVA_VERSION}-oracle" && \
    ln -s "java-${JAVA_VERSION}-oracle" "$JAVA_HOME" && \
    ln -s "$JAVA_HOME/bin/"* "/usr/bin/" && \
    rm -rf "$JAVA_HOME/"*src.zip && \
    wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \
        "http://download.oracle.com/otn-pub/java/jce/${JAVA_VERSION}/jce_policy-${JAVA_VERSION}.zip" && \
    unzip -jo -d "${JAVA_HOME}/jre/lib/security" "jce_policy-${JAVA_VERSION}.zip" && \
    rm "${JAVA_HOME}/jre/lib/security/README.txt" && \
    apk del build-dependencies && \
    rm "/tmp/"*

###########################################################################
# Install mysql client & mysql-connector-java for hivemetastore
###########################################################################

RUN apk add --no-cache --no-progress mysql-client && \
    apk add --no-cache --virtual=build-dependencies wget ca-certificates tar && \
    wget -q -O - http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MYSQL_CONNECTOR_JAVA_VERSION}.tar.gz | tar -xzf - -C /tmp && \
    mv /tmp/mysql-connector-java-${MYSQL_CONNECTOR_JAVA_VERSION}/mysql-connector-java-${MYSQL_CONNECTOR_JAVA_VERSION}-bin.jar ${JAVA_HOME}/lib && \
    apk del build-dependencies && \
    rm -rf /tmp/mysql-connector-java-${MYSQL_CONNECTOR_JAVA_VERSION}

ENV app_dir /opt/apps
WORKDIR ${app_dir}
COPY ./build/libs/test.jar .
COPY ./src/main/resources/log4j2.xml .
COPY ./src/main/resources/application.yml .

EXPOSE ####

COPY docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["java", "-jar", "-Dserver.port=####", "-Dlog4j.configurationFile=log4j2.xml", "test.jar"]

docker-entrypoint.sh

#!/usr/bin/dumb-init /bin/bash
set -e

if [ "${1:0:1}" = '-' ]; then
    set -- java "@"
fi

exec "$@"

configmap.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: application-yml
data:
  application.yml: |+
    server:
      port: ####

    datasource:
      testCommonDb:
        protocol: jdbc:mysql
        host: 127.0.0.1
        port: 3306
        driverClassName: com.mysql.jdbc.Driver
        database: ${ENV:dev}_test
        username: ${MYSQL_USERNAME}
        password: ${MYSQL_PASSWORD}

Prüfergebnis

## NG!!!

・ ・ ・
command: ['java', '-jar', '-Dserver.port=####', '-Dlog4j.configurationFile=log4j2.xml', '-Dspring.config.location="file:/opt/apps/config/application.yml"', 'test.jar']
・ ・ ・
volumeMounts:
- name: application-yml-volume
  mountPath: "/opt/apps/config"
  readOnly: true
・ ・ ・
- name: application-yml-volume
  configMap:
    name: application-yml

## OK!
・ ・ ・
command: ['java', '-jar', '-Dserver.port=####', '-Dlog4j.configurationFile=log4j2.xml', '-Dspring.config.location="file:/deployments/config/application.yml"', 'test.jar']
・ ・ ・
volumeMounts:
- name: application-yml-volume
  mountPath: "/deployments/config"
  readOnly: true
・ ・ ・
- name: application-yml-volume
  configMap:
    name: application-yml

Ref.

Recommended Posts

Die Geschichte, Sprint-Boot mit Kubernetes (GKE) auszuführen und keine Verbindung zu CloudSQL herzustellen
Eine Geschichte über die Verbindung zu einem CentOS 8-Server mit einem alten Ansible
Bei der Einführung von JOOQ in Spring Boot wurde eine Geschichte behandelt, die behandelt wurde, weil bei Liquidbase ein Fehler aufgetreten ist
Eine Geschichte, als ich versuchte, ein Video zu erstellen, indem ich Processing und Resolume verknüpfte
Eine Geschichte, die mir sehr gut gefallen hat, als ich mit Ruby Triple DES gemacht habe
Eine Geschichte, die Zeit brauchte, um eine Verbindung herzustellen
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Eine Geschichte, nach der ich süchtig war, als ich einen Schlüssel bekam, der automatisch auf MyBatis ausprobiert wurde
Java: Eine Geschichte, in der ich mich unwohl fühlte, als mir beigebracht wurde, Strings ohne Grund mit Gleichen zu vergleichen.
Eine Geschichte über den Versuch, mit Mockito auszukommen
Eine Geschichte über die Reduzierung des Speicherverbrauchs auf 1/100 mit find_in_batches
Ein problematischer Hinweis beim Versuch, nginx mit Remote-Containern von vscode zu verwenden
Eine Geschichte, die eine Pause einlegte, wenn sie Linked List mit einem leichten Gefühl benutzte
Eine Geschichte, die es so einfach wie möglich machte, den Vorgang beim automatischen Erstellen eines PR für Bibliotheksaktualisierungen mit Github Dependabot zu überprüfen