Назад | Перейти на главную страницу

Как настроить модуль Redis для использования в качестве хранилища данных сеанса для ColdFusion в развертывании Kubernetes?

Мы рассматриваем возможность переноса наших серверов ColdFusion на AKS и долго возились с тестовым развертыванием, чтобы посмотреть, как все работает. Чтобы обрабатывать масштабирование серверов CF, мы хотели бы настроить модуль Redis для управления сеансами для кластера 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 на этом этапе, но я не знаю, как получить к ним доступ в модуле. В любом случае мне кажется, что ColdFusion дает сбой, вероятно, из-за некоторых неправильных настроек в yaml при настройке Redis в качестве хранилища данных сеанса (поскольку я только что сколотил этот yaml методом проб и ошибок). К сожалению, поиск в Google по запросу "kubernetes yaml redis coldfusion" дает ошеломляющие 7 результатов.

Как правильно определить контейнер Redis в yaml и заставить ColdFusion использовать его в качестве хранилища данных сеанса?

Недоступность службы времени выполнения обычно означает недопустимый файл конфигурации XML в домашнем сервере или фатальную ошибку во время создания служб. Просмотрите полные журналы вывода сервлета / ошибок при первой загрузке сервера, а также журнал application.log для получения дополнительных сведений. Я ничего не знаю о части Redis в вашем вопросе, но это может помочь вам устранить ошибку CF.