首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RabbitMQ无法从Kubernetes上的持久性存储开始。权限拒绝错误

RabbitMQ无法从Kubernetes上的持久性存储开始。权限拒绝错误
EN

Stack Overflow用户
提问于 2021-05-31 09:32:22
回答 2查看 3.2K关注 0票数 1

我有一个兔子mq,我通过挂载卷配置为在pod重新启动/删除的情况下使用持久性存储。

我配置了所有的东西,但是无法通过这个错误:

代码语言:javascript
运行
复制
/usr/lib/rabbitmq/bin/rabbitmq-server: 42: 
/usr/lib/rabbitmq/bin/rabbitmq-server: 
cannot create /var/lib/rabbitmq/mnesia/rabbit@reana-message-broker-5f45f797ff-cs79m.pid: 
Permission denied

这是我的配置文件和kubernetes的部署应用程序

  1. Dockerfile

代码语言:javascript
运行
复制
FROM ubuntu:16.04
# hadolint ignore=DL3009
RUN apt-get update
# hadolint ignore=DL3008
RUN apt-get -y install --no-install-recommends rabbitmq-server
RUN apt-get -y autoremove && apt-get -y clean
# hadolint ignore=DL3001
RUN service rabbitmq-server start
COPY start.sh /start.sh
RUN chmod 755 ./start.sh
EXPOSE 5672
EXPOSE 15672
CMD ["/start.sh", "test", "1234"]

  1. start.sh

代码语言:javascript
运行
复制
#!/bin/sh
cat > /etc/rabbitmq/rabbitmq.conf <<EOF
listeners.tcp.default = 5672

default_user = <<"$1">>
default_pass = <<"$2">>
EOF
rabbitmq-server

  1. rabbitmq.yaml

代码语言:javascript
运行
复制
---
apiVersion: v1
kind: Service
metadata:
  name: message-broker
  namespace: {{ .Release.Namespace }}
spec:
  ports:
   - port: 5672
     targetPort: 5672
     name: "tcp"
     protocol: TCP
   - port: 15672
     targetPort: 15672
     name: "management"
     protocol: TCP
  selector:
    app: message-broker
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: message-broker
  namespace: {{ .Release.Namespace }}
spec:
  replicas: 1
  selector:
    matchLabels:
      app: message-broker
  template:
    metadata:
      labels:
        app: message-broker
    spec:
      containers:
      - name: message-broker
        image: {{ .Values.message_broker.image }}
        imagePullPolicy: {{ .Values.components.message_broker.imagePullPolicy }}
        ports:
        - containerPort: 5672
          name: tcp
        - containerPort: 15672
          name: management
        volumeMounts:
        - name: data
          mountPath: /var/lib/rabbitmq/mnesia
        env:
        - name: RABBITMQ_DEFAULT_PASS
          valueFrom:
            secretKeyRef:
              name: rabbitmq-secrets
              key: password # password = root
        - name: RABBITMQ_DEFAULT_USER
          valueFrom:
            secretKeyRef:
              name: rabbitmq-secrets
              key: user # user = root
      ...
      nodeSelector:
      ....
      volumes:
      - name: data
        hostPath:
          path: /var/test/rabbitmq

告诉我我可能错过了什么。:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-31 12:10:12

您在/var/lib/rabbitmq/mnesia中挂载的卷属于root。

rabbitmq进程是以rabbitmq用户的身份运行的,没有对此目录的写访问权限。

在您的start.sh中添加:

代码语言:javascript
运行
复制
chown rabbitmq:rabbitmq /var/lib/rabbitmq/mnesia

在启动rabbitmq-服务器进程之前。

票数 1
EN

Stack Overflow用户

发布于 2021-05-31 10:40:04

该错误说“无法创建拒绝的/var/lib/rabbitmq/mnesia/rabbit@reana-message-broker-5f45f797ff-cs79m.pid:权限”。尝试为/var/lib/rabbitmq/mnesia/目录提供写权限。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67771239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档