在使用gcloud中的持久存储时,Apache点燃了docker实例,我遇到了困难。
我想在gcloud中部署一个点燃对接实例的方式是,当我将代码推送到github,然后它触发一个构建和更新新的docker实例时,它会从我以前创建的内容中自动地在Google云中以持久卷的形式挂载和存储数据。顺便说一句,我现在不打算使用kubernetes服务,因为gcloud价格有一些原因。
我可以在控制台中手动部署持久性卷。
docker run -d -v persistence-volume:/persistence -e IGNITE_WORK_DIR=/persistence ignite-database:version
正在运行的将代码推送到github以触发以构建新实例并在gcloud中进行更新。
当我将代码推到github时,不工作的会自动挂载之前创建的持久卷。
我觉得gcloud命令或cloud.yaml文件是我必须要通过的才能修复它。我要做什么还不清楚。
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
我期待着你的建议。
发布于 2020-07-13 19:20:08
我不熟悉Kaniko,并假设您有信心您的步骤在云构建下工作(指令这里)。您可以通过检查Container查看更新的映像来确认这一点。
我建议不要使用:latest
,但可能使用recommend (参见${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}"
...
这将迫使VM重新启动容器,而且,由于SHA将随着git的每次更改而更改,因此应该总是提取更新的映像。
当您创建实例(第一次)时,您将:
更新VM时,不需要,需要重新应用这些挂载,或者重新创建将保留的env变量。如果你愿意,你可以改变它们(但我认为你不需要)。
所以,某种形式:
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创建而不是更新时才需要这些
https://stackoverflow.com/questions/62878682
复制相似问题