添加 readOnlyRootFilesystem 后 Kubernetes crashloopbackoff 错误:true

Kubernetes crashloopbackoff error after adding readOnlyRootFilesystem: true

Azure Kubernetes 服务给出了建议——应该为容器强制执行可变(只读)根文件系统

我的部署在没有它的情况下按预期工作,但在添加后 readOnlyRootFilesystem: true 它不起作用,因为容器无法写入。

我也在使用带有 Azure 存储文件的 PVC,它显示绑定成功,但始终显示为空。

这是我的deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-healthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        container.apparmor.security.beta.kubernetes.io/redis: runtime/default
    spec:
      containers:
      - name: redis
        image: <customer-registry>.azurecr.io/redis:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 250Mi
        securityContext:
          privileged: false
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          runAsNonRoot: true
          runAsUser: 1000
       volumeMounts:
       - mountPath: "/mnt/azure"
         name: volume
       - mountPath: "mnt/secrets-store"
         name: secrets-mount
         readOnly: true
   volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: helloworld-pvc 
    - name: secrets-mount
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "azure-keyvault"

下面是 pod 的错误:

rm: can't remove '/home/test/mi-4.0.0/tmp/README': Read-only file system
rm: can't remove '/home/test/mi-4.0.0/tmp/work': Read-only file system

如果我使用的是 PVC,那么 pod/container 不应该写入 PVC 吗??

如果有人能帮助解决这个问题,我将不胜感激。 我很乐意提供更多详细信息

的确,read-only 文件系统是首选,如果可能的话。但是,出于某种原因,某些应用程序需要将数据写入磁盘。

您的错误与挂载的卷无关,而是与 /tmp 目录有关。

您可以通过将 empty dir 卷安装到此路径来保持您的只读文件系统并只使该部分可写。

volumes:
  - name: tmp
    emptyDir: {}
volumeMounts:
  - name: tmp
    mountPath: /home/test/mi-4.0.0/tmp

请注意,该卷将覆盖安装到的位置。如果您在容器启动时需要此目录中的数据,您可以选择一个 initContainer 来装载相同的卷并向其中添加所需的文件。