播客重新创建后如何保留最新队列

时间:2019-01-18 20:04:29

标签: kubernetes

我正在尝试在Kubernetes中运行ActiveMQ。我想保留队列,即使在pod终止并重新创建之后也是如此。到目前为止,即使删除和重新创建Pod,我也要排队。但是,有一个陷阱,似乎是存储了先前的队列列表。

例如:我创建3个队列a,b和c。我删除了吊舱并重新创建了吊舱。队列列表为空。然后,我继续创建队列x和y。当我删除并重新创建Pod时,它将加载队列a,b和c。如果我向其中添加一个队列d并重新创建pod,它将显示x和y。

我已经创建了一个configMap,如下所示 我也在YAML文件中使用了配置映射。

kubectl create configmap amq-config-map --from-file=/opt/apache-activemq- 
5.15.6/data    



apiVersion: apps/v1
kind: Deployment
metadata:
  name: activemq-deployment-local
  labels:
    app: activemq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: activemq
  template:
    metadata:
      labels:
        app: activemq
    spec:
      containers:
      - name: activemq
        image: activemq:1.0
        ports:
        - containerPort: 8161
        volumeMounts:
        - name: activemq-data-local
          mountPath: /opt/apache-activemq-5.15.6/data
          readOnly: false
      volumes:
      - name: activemq-data-local
        persistentVolumeClaim:
          claimName: amq-pv-claim-local
      - name: config-vol
        configMap:
          name: amq-config-map
---
apiVersion: v1
kind: Service
metadata:
  name: my-service-local
spec:
  selector:
    app: activemq
  ports:
  - port: 8161
    targetPort: 8161
  type: NodePort
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: amq-pv-claim-local
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: amq-pv-claim-local
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp

重新创建Pod时,我希望队列保持不变。我快到了,但是我需要一些帮助。

2 个答案:

答案 0 :(得分:1)

您可能在批量声明中缺少一个设置:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: amq-pv-claim-local
  labels:
    type: local
spec:
  storageClassName: manual
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp

还存在一个很好的更改,即由于使用hostPath导致此操作不起作用:HostPath表示将其存储在启动了卷的服务器上。它不会随Pod的重新启动一起迁移,并且会导致PV中的异常行为。看看使用NFS,gluster或任何其他群集文件系统将数据存储在可通用访问的路径中。

如果您使用云提供商,还可以从kubernetes进行自动磁盘挂载,因此您可以使用gcloud,AWS,Azure等为您提供存储,并在kubernetes想要的地方由kubernetes挂载。

答案 1 :(得分:0)

有了这个部署计划,我就可以让activemq在AWS中运行的Kubernetes集群中工作。但是,我仍然试图找出为什么它不能以相同的方式对mysql起作用。

只需运行

    kubectl create -f activemq.yaml 

可以解决问题。队列是持久的,甚至终止pod并重新启动也会弹出队列。它们会一直保留到永久卷和索赔被删除为止。使用此模板,我什至无需显式创建卷。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: activemq-deployment
      labels:
        app: activemq
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: activemq
      template:
        metadata:
          labels:
            app: activemq
        spec:
          securityContext:
            fsGroup: 2000
          containers:
          - name: activemq
            image: activemq:1.0
            ports:
            - containerPort: 8161
            volumeMounts:
            - name: activemq-data
              mountPath: /opt/apache-activemq-5.15.6/data
              readOnly: false
          volumes:
          - name: activemq-data
            persistentVolumeClaim:
              claimName: amq-pv-claim
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: amq-nodeport-service
    spec:
      selector:
        app: activemq
      ports:
      - port: 8161
        targetPort: 8161
      type: NodePort
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: amq-pv-claim
    spec:
      #storageClassName: manual
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2Gi