在我的Kubernetes集群中,我管理四个部署:
- Laravel队列工人:标签是拉拉威尔·库贝·工人。
- Django Queue Workers:标签为django-kube-worker
- Laravel Redis示例:标记为拉拉威尔·库贝·工人·瑞迪斯。
- Django Redis示例:标签是Django-Kube-Worker-Redis。
我的目标是将Laravel worker pod连接到其对应的Redis示例,以处理存储在那里的队列作业。类似地,我尝试对Django队列worker pod和它们的Redis对等体做同样的事情。
单独来说,Laravel和Django的部署都能完美地工作。Laravel无缝填充和处理队列,Django也是如此。但是,当两组部署同时运行时会出现问题:工作pod间歇性地无法连接到它们各自的Redis pod。这种不一致令人费解。
我偶尔会成功建立连接,但它不一致或不可靠。(时间跨度约为15秒)。
我还注意到两个Redis配置之间没有冲突的行为。下面是Laravel Redis部署的配置文件。包含在((....))中的任何内容都表示Django Redis部署的等效配置。
Laravel redis deployment.yml:
apiVersion: v1
kind: Service
metadata:
name: laravel-kube-worker-redis (( django-kube-worker-redis ))
labels:
tier: backend
layer: redis
spec:
ports:
- port: 6379 (( 6380 ))
targetPort: 6379 (( 6380 ))
nodePort: 32379 (( 32380 ))
protocol: TCP
selector:
tier: backend
layer: redis
type: NodePort
Laravel Redis持久-体积-声称.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: laravel-kube-worker-redis (( django-kube-worker-redis ))
spec:
storageClassName: do-block-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Laravel redis statefulset.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: laravel-kube-worker-redis (( django-kube-worker-redis ))
labels:
tier: backend
layer: redis
spec:
serviceName: laravel-kube-worker-redis (( django-kube-worker-redis ))
selector:
matchLabels:
tier: backend
layer: redis
replicas: 1
template:
metadata:
labels:
tier: backend
layer: redis
spec:
containers:
- name: redis
image: redis:alpine
command: ["redis-server", "--appendonly", "yes", "--bind", "0.0.0.0"]
ports:
- containerPort: 6379 (( 6380 ))
name: web
volumeMounts:
- name: redis-aof
mountPath: /data
resources:
requests:
memory: "1048Mi" # Set the minimum memory request
limits:
memory: "4096Mi" # Set the maximum memory limit
volumes:
- name: redis-aof
persistentVolumeClaim:
claimName: laravel-kube-worker-redis (( django-kube-worker-redis ))
值得注意的是,Django Redis中的所有标签都有不同的key:价值观
我还想指出的是,在Laravel worker pod中,我使用laravel-kube-worker-redis:6379连接到Redis环境。
此外,在检查pod、services和statefsets状态时,一切似乎都井然有序。Redis pod没有强制重启,所有配置都符合我的示例中描述的内容。
1条答案
按热度按时间klh5stk11#
您的两个服务都路由到 * 两个 * Redis部署。服务使用Pod上的标签来确定是否应路由到Pod。您正在使用相同的标签启动两个redis部署,并且还使用相同的选择器配置每个服务...
简而言之,您需要:
有关更多上下文,请参见https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/