Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 具有共享存储的Kuberenetes上的ActiveMQ_Kubernetes_Activemq_Kubernetes Pvc - Fatal编程技术网

Kubernetes 具有共享存储的Kuberenetes上的ActiveMQ

Kubernetes 具有共享存储的Kuberenetes上的ActiveMQ,kubernetes,activemq,kubernetes-pvc,Kubernetes,Activemq,Kubernetes Pvc,我有使用ApacheCamel和ActiveMQ构建的现有应用程序。作为迁移到Kubernetes的一部分,我们正在将使用ApacheCamel开发的相同服务迁移到Kubernetes。我需要部署ActiveMQ,以便在其中一个Pod死亡时不会丢失数据 我现在要做的是运行RelicaSet值为2的部署。这将启动2个吊舱,在前面有一个服务,我可以在至少1个吊舱启动时提供任何请求。但是,如果一个吊舱死亡,我不想丢失数据。我想在pod之间实现一些类似于共享文件系统的东西。我的环境在AWS中,因此我可以

我有使用ApacheCamel和ActiveMQ构建的现有应用程序。作为迁移到Kubernetes的一部分,我们正在将使用ApacheCamel开发的相同服务迁移到Kubernetes。我需要部署ActiveMQ,以便在其中一个Pod死亡时不会丢失数据

我现在要做的是运行RelicaSet值为2的部署。这将启动2个吊舱,在前面有一个服务,我可以在至少1个吊舱启动时提供任何请求。但是,如果一个吊舱死亡,我不想丢失数据。我想在pod之间实现一些类似于共享文件系统的东西。我的环境在AWS中,因此我可以使用EBS。你能建议一下,如何做到这一点

下面是我的部署和服务YAML

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: smp-activemq
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: smp-activemq
    spec:
      containers:
        - name: smp-activemq
          image: dasdebde/activemq:5.15.9
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 61616
          resources:
            limits:
              memory: 512Mi

---
apiVersion: v1
kind: Service
metadata:
  name: smp-activemq
spec:
  type: NodePort
  selector:
    app: smp-activemq
  ports:
    - nodePort: 32191
      port: 61616
      targetPort: 61616

在高级术语中,您需要的是一个StatefulSet,而不是ActiveMQ的部署。您想要的是“共享文件系统”——在kubernetes中,这表示为“持久卷”,它可以通过“卷装载”提供给状态集中的POD

这些是您需要查找的内容。

对于需要稳定、持久存储的应用程序非常有用。删除和/或向下缩放StatefulSet不会删除与该StatefulSet关联的卷。这样做是为了确保数据安全。yaml中的“volumeClaimTemplates”部分将使用PersistentVolume Provisionier提供的资源提供稳定的存储

在您的情况下,StatefulSet文件定义将类似于以下内容:

apiVersion: v1
kind: Service
metadata:
  name: smp-activemq
  labels:
    app: smp-activemq
spec:
  type: NodePort
  selector:
    app: smp-activemq
  ports:
  - nodePort: 32191
    port: 61616
    name: smp-activemq
    targetPort: 61616

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: smp-activemq
spec:
  selector:
    matchLabels:
      app: smp-activemq
  serviceName: smp-activemq
  replicas: 1
  template:
    metadata:
      labels:
        app: smp-activemq
    spec:
      containers:
      - name: smp-activemq
        image: dasdebde/activemq:5.15.9
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 61616
          name: smp-activemq
        volumeMounts:
        - name: www
          mountPath: <mount-path>
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "<storageclass-name>"
      resources:
        requests:
          storage: 1Gi
apiVersion:v1 种类:服务 元数据: 名称:smp activemq 标签: 应用程序:smp activemq 规格: 类型:节点端口 选择器: 应用程序:smp activemq 端口: -节点端口:32191 端口:61616 名称:smp activemq 目标港:61616 --- apiVersion:apps/v1 种类:StatefulSet 元数据: 名称:smp activemq 规格: 选择器: 火柴标签: 应用程序:smp activemq 服务名称:smp activemq 副本:1份 模板: 元数据: 标签: 应用程序:smp activemq 规格: 容器: -名称:smp activemq 图片:dasdebde/activemq:5.15.9 imagePullPolicy:如果不存在 端口: -集装箱港口:61616 名称:smp activemq 体积数量: -姓名:www 安装路径: VolumeClaim模板: -元数据: 姓名:www 规格: accessModes:[“ReadWriteOnce”] storageClassName:“ 资源: 请求: 存储:1Gi
您需要定义的是StorageClass名称和装载路径。我希望它能对您有所帮助。

请正确格式化yaml文件:)请注意,您不必在容器中运行所有内容,因为无状态组件的容器比有状态组件的容器受益更多。AWS提供ActiveMQ作为托管服务,称为“Amazon MQ”。我知道,但在我的情况下,环境将使用DMZ运行。所以我尽量避免使用AWS服务,让我试试你的建议。谢谢