容器启动报错: Permission denied_nfs permission denied

背景


我们在 Kubernetes 中挂载 volume 后,有时会遇到容器启动报错 Permission denied,然后 Crash 并重启,一般是文件系统权限问题,本文介绍如何解决。

修改 NFS 目录权限


如果挂载的 volume 存储是 nfs ,在不改动 Kubernetes 部署的情况下,我们可以将挂载的 nfs 目录权限修改成应用启动时使用的 uid 和 gid:

sudo mount -t nfs -o vers=4.0,noresvport 10.10.0.15:/ /localfolder # 挂载 nfs 根目录到本地目录 (如/localfolder)
sudo chown -R 1001:1001 /localfolder/mariadb # 修改挂载 volume 中使用的目录权限为指定的 uid:gid

使用 initContainers 修改目录权限


为 Pod 加入 initContainers 来执行 chown 修改容器内挂载点目录的权限:

  initContainers:
  - name: chown
     image: debian:stable-slim
     command:
      - /bin/sh
      - -c 
      - "chown -R 1001:1001 /data/mnt"

实际应用


部署Grafana时存储位置选择 nfs

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitor
spec:
  selector:
    matchLabels:
      app: grafana
  replicas: 1 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        #image: grafana/grafana
        image: hub-mirror.c.163.com/grafana/grafana
        volumeMounts:
        - mountPath: /var/lib/grafana
          name: data-nfs-app-1
        ports:
        - containerPort: 8080
      volumes:
      - name: data-nfs-app-1
        nfs:
          path: /home/k8s-data/grafana
          server: 172.25.42.242
          readOnly: false

说明
把172.25.42.242:/home/k8s-data/grafana 挂载到容器内
需要把172.25.42.242上面nfs-server的目录权限改为和容器内目录一致的

chown -R 472:root /home/k8s-data/grafana

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/1117.html

发表评论

登录后才能评论