Apache Ignite docker контейнер с постоянным объемом в gcloud не работает должным образом - PullRequest
0 голосов
/ 13 июля 2020

У меня возникли трудности с экземпляром Apache ignite docker с постоянным хранилищем в gcloud.

Я хочу развернуть экземпляр ignite docker в gcloud, когда я sh мой код в github, затем запускается сборка и обновление нового экземпляра docker, он автоматически монтирует и сохраняет данные в постоянном томе в облаке Google из того, что я создал ранее. Кстати, я пока не собираюсь использовать сервис kubernetes по некоторым причинам из-за цены на gcloud.

Я мог бы вручную развернуть постоянный том в консоли.

docker run -d -v persistence-volume:/persistence -e IGNITE_WORK_DIR=/persistence ignite-database:version

[ Что работает] Pu sh код в github для запуска создания нового экземпляра и обновления в gcloud.

[Что не работает] Автоматически монтировать постоянный том, созданный ранее когда я отправляю sh код в github.

мне кажется, что команда gcloud или файл cloud.yaml - это те, которые мне нужно go исправить, чтобы исправить это. Непонятно, что мне делать.

[cloud.yaml] (триггеры github для создания нового обновления)

steps:
- name: 'gcr.io/kaniko-project/executor:v0.20.0'
  args:
  - --destination=gcr.io/$PROJECT_ID/database:latest
  - --cache=true
  - --cache-ttl=168h
- name: gcr.io/cloud-builders/gcloud
  args: [ compute, instances, update-container, database, --container-restart-policy=always, --zone=us-east1-a ]
timeout: 1200s

[Dockerfile ]

# Start from a Java image.
FROM openjdk:8


# Ignite version
ENV IGNITE_VERSION 2.8.0
ENV JVM_OPTS -Xms512m -server -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Djava.net.preferIPv4Stack=true


# Ignite home
ENV IGNITE_HOME /opt/ignite/apache-ignite-${IGNITE_VERSION}-bin

RUN apt-get update && apt-get install -y --no-install-recommends \
        unzip \
        wget \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /opt/ignite

RUN wget https://archive.apache.org/dist/ignite/2.8.0/apache-ignite-2.8.0-bin.zip \
    && unzip apache-ignite-${IGNITE_VERSION}-bin.zip \
    && rm apache-ignite-${IGNITE_VERSION}-bin.zip

COPY ./config/run.sh $IGNITE_HOME/
#COPY ./config/default-config.xml $IGNITE_HOME/apache-ignite@default-config.xml
#COPY ./config/persistence-config.xml $IGNITE_HOME/apache-ignite@persistence-config.xml
COPY ./config/control.sh $IGNITE_HOME/
COPY ./config/run_and_activate.sh $IGNITE_HOME/

#RUN sysctl start apache-ignite@default-config.xml
#RUN sysctl enable apache-ignite@persistence-config.xml

RUN chmod +x $IGNITE_HOME/run.sh
RUN chmod +x $IGNITE_HOME/control.sh
RUN chmod +x $IGNITE_HOME/run_and_activate.sh

CMD $IGNITE_HOME/run_and_activate.sh
EXPOSE 11211 47100 47500 49112

Жду вашего совета.

1 Ответ

1 голос
/ 13 июля 2020

Я не знаком с Kaniko и предполагаю, что вы уверены, что ваш шаг работает в Cloud Build (инструкции здесь ). Вы можете подтвердить это, проверив наличие обновленных образов в Реестре контейнеров.

Я рекомендую не использовать :latest, но, возможно, ваш git коммит (см., Например, ${COMMIT_SHA}).

- name: "gcr.io/kaniko-project/executor:v0.20.0"
  args:
  - --destination="gcr.io/$PROJECT_ID/database:${COMMIT_SHA}"
  ...

Изменение «политики-перезапуска-контейнера» меняет то, как виртуальная машина будет реагировать на сбой контейнера. На самом деле вы хотите выполнить принудительный перезапуск (с новым образом). Я рекомендую вам попробовать:

- name: gcr.io/cloud-builders/gcloud
  args:
  - compute
  - instances
  - update-container
  - database
  - --container-image="gcr.io/${PROJECT_ID}/database:${COMMIT_SHA}"
  ...

Это должно заставить виртуальную машину перезапустить контейнер, и, поскольку SHA будет меняться при каждом изменении вашего git репозитория, это всегда должно вытягивать обновленный образ.

Когда вы создаете экземпляр (в первый раз) вы:

Когда вы обновляете виртуальную машину, вам не нужно не повторно применять эти монтирования или воссоздавать переменные env, поскольку они будут сохранены. Вы можете изменить их, если вы sh (но я думаю, что вам это не нужно).

Так что ng формы:

PD="persistence"
gcloud compute instances create-with-container ${INSTANCE} \
--container-image docker.io/busybox:1.27 \
--disk name=${PD} \
--container-mount-disk=mode="rw",mount-path="/disks/${PD}",name="${PD}" \
--container-env=IGNITE_WORK_DIR="/disks/${PD}" \
...

ПРИМЕЧАНИЕ они необходимы только во время создания виртуальной машины не обновление

...