我正在尝试在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时,我希望队列保持不变。我快到了,但是我需要一些帮助。
答案 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