[英]ActiveMQ on Kuberenetes with Shared storage
我有使用Apache Camel和ActiveMQ构建的现有应用程序。 作为迁移到Kubernetes的一部分,我们正在做的是将使用Apache Camel开发的相同服务转移到Kubernetes。 我需要部署ActiveMQ,这样我就不会丢失数据,以防其中一个Pod死掉。
我现在正在做的是运行一个RelicaSet值为2的部署。这将启动2个pod并且前面有一个Service,我可以在至少1个Pod启动时提供任何请求。 但是,如果一个Pod死了,我不想丢失数据。 我想在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表示为“ 持久卷 ”,这是提供给使用“ 卷装入 ”你StatefulSet豆荚。
这些是你需要查找的东西。
StatefulSet对于需要稳定,持久存储的应用程序非常有用。 删除和/或缩放StatefulSet将不会删除与StatefulSet关联的卷。 这样做是为了确保数据安全。 在YAML的“volumeClaimTemplates”部分将使用提供稳定的存储PersistentVolumes由PersistentVolume置备供应。
在您的情况下,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
您需要定义的是StorageClass名称和mountPath。 我希望它会对你有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.