我们正在考虑将 ColdFusion 服务器迁移到 AKS,并且一直在进行测试部署以了解其运行情况。为了处理 CF 服务器的扩展,我们希望设置一个 Redis pod 来处理 CF 集群的会话管理。
按照我在以下网址找到的说明https://helpx.adobe.com/coldfusion/using/docker-images-coldfusion.html和https://github.com/kubernetes/examples/blob/master/staging/storage/redis/redis-master.yaml,由于直接复制/粘贴时出现错误,我进行了修改,得出了以下 yaml 文件:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: cfsample
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
app: cfsample
spec:
containers:
- name: cfsample
image: cftest.azurecr.io/coldfusion:v1
ports:
- containerPort: 8500
volumeMounts:
- name: code
mountPath: /app
resources:
requests:
cpu: 250m
limits:
cpu: 500m
env:
- name: acceptEULA
value: "YES"
- name: password
value: "testCF321"
- name: configureExternalSessions
value: "true"
- name: externalSessionsHost
value: "cfredis"
- name: externalSessionsPort
value: "6379"
- name: cfredis
image: redis:latest
ports:
- containerPort: 6379
volumeMounts:
- name: redis
mountPath: /redis-master-data
imagePullSecrets:
- name: registrycreds
volumes:
- name: code
azureFile:
secretName: azure-secret
shareName: code
readOnly: false
- name: redis
azureFile:
secretName: azure-secret
shareName: redis
readOnly: false
---
apiVersion: v1
kind: Service
metadata:
name: cfsample
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8500
selector:
app: cfsample
当我在浏览器中访问此服务器上的测试页面(我的任何测试页面)时,它确实可以工作,甚至会设置会话变量并转储会话范围。但是,我尝试访问的下一个页面报告了错误:
Message coldfusion.server.ServiceFactory$ServiceNotAvailableException: The Runtime service is not available.
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: coldfusion.server.ServiceFactory$ServiceNotAvailableException: The Runtime service is not available.
coldfusion.bootstrap.ClassloaderHelper.initServletClass(ClassloaderHelper.java:129)
coldfusion.bootstrap.BootstrapServlet.init(BootstrapServlet.java:111)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:834)
此时我通常会检查 CF 日志,但我不知道如何在 pod 中访问它们。无论如何,在我看来,ColdFusion 崩溃了,可能是因为在将 Redis 设置为会话数据存储时 yaml 中的一些设置不正确(因为我只是通过反复试验拼凑了这个 yaml)。不幸的是,在 Google 上搜索“kubernetes yaml redis coldfusion”会返回惊人的 7 个结果。
在 yaml 中定义 Redis 容器并让 ColdFusion 将其用作会话数据存储的正确方法是什么?
答案1
运行时服务不可用通常意味着服务器主目录中的 XML 配置文件无效,或者在创建服务期间出现致命错误。在服务器首次启动时检查完整的 servlet 输出/错误日志以及 application.log 以获取潜在详细信息。我对您问题中的 Redis 部分一无所知,但这可能有助于您解决 CF 错误。