首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在gcloud上具有持久卷的Apache Ignite docker容器不能正常工作。

在gcloud上具有持久卷的Apache Ignite docker容器不能正常工作。
EN

Stack Overflow用户
提问于 2020-07-13 15:05:47
回答 1查看 263关注 0票数 0

在使用gcloud中的持久存储时,Apache点燃了docker实例,我遇到了困难。

我想在gcloud中部署一个点燃对接实例的方式是,当我将代码推送到github,然后它触发一个构建和更新新的docker实例时,它会从我以前创建的内容中自动地在Google云中以持久卷的形式挂载和存储数据。顺便说一句,我现在不打算使用kubernetes服务,因为gcloud价格有一些原因。

我可以在控制台中手动部署持久性卷。

代码语言:javascript
运行
复制
docker run -d -v persistence-volume:/persistence -e IGNITE_WORK_DIR=/persistence ignite-database:version

正在运行的将代码推送到github以触发以构建新实例并在gcloud中进行更新。

当我将代码推到github时,不工作的会自动挂载之前创建的持久卷。

我觉得gcloud命令或cloud.yaml文件是我必须要通过的才能修复它。我要做什么还不清楚。

cloud.yaml

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
# 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

我期待着你的建议。

EN

回答 1

Stack Overflow用户

发布于 2020-07-13 19:20:08

我不熟悉Kaniko,并假设您有信心您的步骤在云构建下工作(指令这里)。您可以通过检查Container查看更新的映像来确认这一点。

我建议不要使用:latest,但可能使用recommend (参见${COMMIT_SHA})。

代码语言:javascript
运行
复制
- name: "gcr.io/kaniko-project/executor:v0.20.0"
  args:
  - --destination="gcr.io/$PROJECT_ID/database:${COMMIT_SHA}"
  ...

更改“容器-重新启动-策略”会改变虚拟机在容器失败时的反应。实际上,您要做的是强制重新启动(使用您的新映像)。我建议您尝试:

代码语言:javascript
运行
复制
- name: gcr.io/cloud-builders/gcloud
  args:
  - compute
  - instances
  - update-container
  - database
  - --container-image="gcr.io/${PROJECT_ID}/database:${COMMIT_SHA}"
  ...

这将迫使VM重新启动容器,而且,由于SHA将随着git的每次更改而更改,因此应该总是提取更新的映像。

当您创建实例(第一次)时,您将:

  • 挂载持久卷(请参阅链接)
  • 配置env (请参阅链接)。

更新VM时,不需要,需要重新应用这些挂载,或者重新创建将保留的env变量。如果你愿意,你可以改变它们(但我认为你不需要)。

所以,某种形式:

代码语言:javascript
运行
复制
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}" \
...

注意只在VM创建而不是更新时才需要这些

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62878682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档