Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

PVC no Objeto Deployment

Prezados, boa tarde!

Estou trabalhando num projeto onde eu preciso criar LOGs com monolog e salvar esses dados em um volume, atualmente estou utilizando a nuvem do GCP consegui montar os volumes que preciso com a permissão RWX porém quando tento salvar os logs dentro do volume que criei (/mnt) recebo uma mensagem de Permission Denied porém quando montei o mesmo volume com Statefulset não recebo essa mensagem.

Existe alguma forma de modificar as permissões de um PVC utilizando Deployment?

4 respostas

Olá Samuel, tudo bem? Eu particularmente nunca usei o Kubernetes no GCP , porém temos a opção de setar as permissões no volumente usando o mountOptions, então você já tentou usar da seguinte forma:

mountOptions:
  - dir_mode=0777
  - file_mode=0777

E o accessModes está da seguinte forma:

accessModes:
    - ReadWriteMany

Fala pra gente se já tentou usar dessa forma!

Infelizmente não deu certo, poderia verificar se fiz algo errado por favor? Pois acredito que esteja tudo certo e seja apenas alguma limitação da Google em seus discos permanente. Para utilizar o accessModes como ReadWriteMany eu preciso criar um disco permanente e criar um NFS Server.

Desde já agradeço sua ajuda.

Segue meus arquivos de configuração:

Crio um deployment para controlar o meu pod que será responsável pelo recebimento dos arquivos que serão salvos no disco:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-server
spec:
  replicas: 1
  selector:
    matchLabels:
      role: nfs-server
  template:
    metadata:
      labels:
        role: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: gcr.io/google_containers/volume-nfs:0.8
        ports:
          - name: nfs
            containerPort: 2049
          - name: mountd
            containerPort: 20048
          - name: rpcbind
            containerPort: 111
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /exports
            name: disk-01
      volumes:
        - name: disk-01
          gcePersistentDisk:
            pdName: nfs-disk
            fsType: ext4

Depois um serviço para expor o Pod

apiVersion: v1
kind: Service
metadata:
  name: nfs-server
spec:
  ports:
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
  selector:
    role: nfs-server

Depois o disco permanente foi aqui que coloquei as informações que você me passou:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  capacity:
    storage: 10Gi
  mountOptions:
   - dir_mode=0777
   - file_mode=0777
  accessModes:
    - ReadWriteMany
  nfs:
    server: nfs-server.default.svc.cluster.local
    path: "/exports"

Aqui eu crio o PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi

O erro que aparece quando tento privisionar o novo pod é:

MountVolume.SetUp failed for volume "nfs" : mount failed: exit status 1 Mounting command: systemd-run Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/f5d0861c-7355-4699-80fb-62c6ae13bca8/volumes/kubernetes.ionfs/nfs --scope -- /home/kubernetes/containerized_mounter/mounter mount -t nfs -o dir_mode=0777,file_mode=0777 nfs-server.default.svc.cluster.local:/exports /var/lib/kubelet/pods/f5d0861c-7355-4699-80fb-62c6ae13bca8/volumes/kubernetes.ionfs/nfs Output: Running scope as unit: run-raaf81c234e6049f6837b188e40580cc7.scope Mount failed: mount failed: exit status 32 Mounting command: chroot Mounting arguments: [/home/kubernetes/containerized_mounter/rootfs mount -t nfs -o dir_mode=0777,file_mode=0777 nfs-server.default.svc.cluster.local:/exports /var/lib/kubelet/pods/f5d0861c-7355-4699-80fb-62c6ae13bca8/volumes/kubernetes.io~nfs/nfs] Output: mount.nfs: an incorrect mount option was specified

solução!

Samuel, você tentou usando discos permanentes do Compute Engine? Sem ser NFS, e você tentou criar o Persistent Volume Claim usando o comando kubectl apply -f seu_arquivo_de_PersistentVolumeClaim.yaml? E qual o resultado, tentou executar os passos de acordo com a documentação? E quais os resultados?