如何从 docker 图像停止 Kubernetes 运行 中的 Confluence 应用程序?

How do you stop Confluence application in Kubernetes running from a docker image?

我正在使用 Kubernetes 中的官方 Atlassian docker 图像将 Confluence 从 VM 迁移到 Confluence Server 7.11.1 实例。我成功启动了应用程序,并且能够通过设置屏幕启动一个空的 Confluence。

为了自定义我的实例,我想将旧服务器的 confluence 主目录复制到默认的 confluence 主目录并更改数据库连接 URL。根据文档 here,我需要在执行此操作时停止来自 运行ning 的融合。我尝试从 confluence 用户 运行 stop-confluence.sh 脚本,但我无法停止容器,因为 docker 版本的 k8s 中没有 catalina.pid 文件.

我尝试了终止 运行 的 Confluence 的 java 进程的替代方法,但是当我这样做时整个容器都关闭了。

如何在 Kubernetes 中停止 Confluence,以便我可以在容器中复制文件和修改配置? Confluence 应用程序的 docker 图像版本是否意味着停止,所有内容都需要作为 env 变量提供?官方atlassian注释docker图片配置为here.

错误信息:

confluence@usmai-www-confluence-0:~$ /opt/atlassian/confluence/bin/stop-confluence.sh -fg
executing as current user
If you encounter issues starting up Confluence, please see the Installation guide at http://confluence.atlassian.com/display/DOC/Confluence+Installation+Guide

Server startup logs are located in /opt/atlassian/confluence/logs/catalina.out
---------------------------------------------------------------------------
Using Java: /opt/java/openjdk/bin/java
2021-05-19 23:29:48,363 INFO [main] [atlassian.confluence.bootstrap.SynchronyProxyWatchdog] A Context element for ${confluence.context.path}/synchrony-proxy is found in /opt/atlassian/confluence/conf/server.xml. No further action is required
---------------------------------------------------------------------------
Using CATALINA_BASE:   /opt/atlassian/confluence
Using CATALINA_HOME:   /opt/atlassian/confluence
Using CATALINA_TMPDIR: /opt/atlassian/confluence/temp
Using JRE_HOME:        /opt/java/openjdk
Using CLASSPATH:       /opt/atlassian/confluence/bin/bootstrap.jar:/opt/atlassian/confluence/bin/tomcat-juli.jar
Using CATALINA_OPTS:   -XX:ReservedCodeCacheSize=256m -XX:+UseCodeCacheFlushing -Djdk.tls.server.protocols=TLSv1.1,TLSv1.2 -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 -Dconfluence.context.path=/portal  -Djava.locale.providers=JRE,SPI,CLDR -Dorg.apache.tomcat.websocket.DEFAULT_BUFFER_SIZE=32768 -Dsynchrony.enable.xhr.fallback=true -Xms1024m -Xmx1024m -Dconfluence.home= -XX:+UseG1GC -Datlassian.plugins.enable.wait=300 -Djava.awt.headless=true -XX:G1ReservePercent=20 -Xloggc:/opt/atlassian/confluence/logs/gc-2021-05-19_23-29-48.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M -Xlog:gc+age=debug:file=/opt/atlassian/confluence/logs/gc-2021-05-19_23-29-48.log::filecount=5,filesize=2M -XX:-PrintGCDetails -XX:+PrintGCDateStamps -XX:-PrintTenuringDistribution -XX:+IgnoreUnrecognizedVMOptions   -DConfluenceHomeLogAppender.disabled=
Using CATALINA_PID:    /opt/atlassian/confluence/work/catalina.pid
$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted.

显然,confluence java 进程是 docker 容器的“入口点”,因此当您终止 java 进程时,它也会终止容器。

我建议您创建一个设置了 readWriteMany 属性的持久卷,并将其挂载到一个临时 pod - 例如 ubuntu 图像。

然后使用“kubectl cp”将现有主目录复制到 ubuntu pod 上安装的持久卷。

然后您可以根据需要对文件进行任何修改。 完成后,只需杀死 ubuntu pod。

您的文件仍将存在于永久卷上。

现在将此持久卷挂载到您的 confluence pod 中的 /opt/atlassian/confluence,它应该可以正常工作。