【问题标题】:Persistent Payara Server Admin UI in KubernetesKubernetes 中的持久性 Payara 服务器管理 UI
【发布时间】:2022-12-15 07:07:36
【问题描述】:

我在 Kubernetes 中使用payara/server-full。我想添加一个持久卷,以便在重新创建 pod 后,通过管理 UI 对 Payara 服务器进行的所有配置都将保留下来,包括上传的 .war 文件。

现在我的部署看起来像这样:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: 
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: payara/server-full
          imagePullPolicy: "Always"
          ports:
            - name: myapp-default
              containerPort: 8080
            - name: myapp-admin
          containerPort: 4848
  1. 如何扩充该 yaml 文件以使用持久卷?
  2. payara 中的哪些路径应与持久卷同步,以便 Payara 的配置在重新部署后不会丢失?
  3. 我需要哪些额外的 yaml 文件?

【问题讨论】:

    标签: kubernetes console admin persistent-volumes payara


    【解决方案1】:

    因此,在对问题进行更长时间的考虑之后,我意识到我需要将所有内容保留在/opt/payara/appserver/glassfish/domains 下,以便保留通过管理 UI 进行的所有配置。但是,如果我只是使用指向该路径的 volumeMount 启动 pod,即

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
    spec:
      selector:
        matchLabels:
          app: myapp
      replicas: 3
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 1
          maxSurge: 1
      template:
        metadata:
          labels:
            app: myapp
        spec:
          volumes:
            - name: myapp-vol
              persistentVolumeClaim:
                claimName: myapp-rwo-pvc
          containers:
            - name: myapp
              image: payara/server-full
              imagePullPolicy: "Always"
              ports:
                - name: myapp-default
                  containerPort: 8080
                - name: myapp-admin
              containerPort: 4848
              volumeMounts:
                - mountPath: "/opt/payara/appserver/glassfish/domains"
    

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: myapp-rwo-pvc
      labels:
        app: dont-delete-autom
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 3Gi
    

    那么 Payara 服务器将无法成功启动,因为 Kubernetes 会将一个空的持久卷挂载到该位置。然而,Payara 需要配置文件,这些文件最初位于 /opt/payara/appserver/glassfish/domains 中。

    我需要做的是为该卷提供默认位于该文件夹中的数据。但是,当访问 PV 的唯一方法是将其安装到 pod 中时,该怎么做呢? 首先,我将上述部署缩放为 0:

    kubectl scale --replicas=0 deployment/myapp
    

    这将删除所有访问持久卷的 pod。

    然后我创建了一个“配置”pod,它将之前创建的持久卷挂载到 /tmp 中。

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        app: myapp
      name: pv-provisioner
      namespace: default
    
    spec:
      containers:
        - image: payara/server-full
          imagePullPolicy: Always
          name: pv-provisioner
          ports:
            - containerPort: 8080
              name: myapp-default
              protocol: TCP
            - containerPort: 4848
              name: myapp-admin
              protocol: TCP
          volumeMounts:
            - mountPath: "/tmp"
              name: myapp-vol
          resources:
            limits:
              cpu: "2"
              memory: 2Gi
            requests:
              cpu: 500m
              memory: 128Mi
      volumes:
        - name: myapp-vol
          persistentVolumeClaim:
            claimName: myapp-rwo-pvc 
    

    然后我使用以下命令首先将必要的数据从“配置”pod 复制到本地文件夹 /tmp,然后从 /tmp 复制回持久卷(之前安装到 pv-provisioner:/tmp)。没有直接从 pod:/a 复制到 pod:/b 的选项

    kubectl cp pv-provisioner:/opt/payara/appserver/glassfish/domains/. tmp
    kubectl cp tmp/. pv-provisioner:/tmp
    

    因此,原始 payara 容器中 /opt/payara/appserver/glassfish/domains/ 下存储的所有内容现在都被复制到由持久卷声明“myapp-rwo-pvc”标识的持久卷中。

    为了完成它,我删除了配置 pod 并扩展了部署:

    kubectl delete pod pv-provisioner
    kubectl scale --replicas=3 deployment/myapp
    

    payara 服务器现在已成功启动,并且通过管理 UI 进行的任何配置(包括 .war 部署)都会保留下来,这样 payara pod 就可以随时被终止,重启后一切都和以前一样。

    谢谢阅读。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2013-09-24
      • 2011-02-25
      相关资源
      最近更新 更多