Постоянное хранилище — Кластер Pi K8s — транспортный протокол версии NFS не поддерживается

#kubernetes #raspberry-pi #persistent-volumes #persistent-volume-claims

Вопрос:

У меня есть кластер Raspberry Pi, состоящий из 1-главных 20-узлов:

  • 192.168.0.92 (Мастер)
  • 192.168.0.112 (Узел с USB-накопителем)

Я смонтировал USB-накопитель /media/hdd и установил на него ярлык - purpose=volume .

Используя следующее, я смог настроить сервер NFS:

 apiVersion: v1
kind: Namespace
metadata:
  name: storage
  labels:
    app: storage
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv
  namespace: storage
spec:
  capacity:
    storage: 3.5Ti
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /media/hdd
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: purpose
          operator: In
          values:
          - volume
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: local-claim
  namespace: storage
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  resources:
    requests:
      storage: 3Ti
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-server
  namespace: storage
  labels:
    app: nfs-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-server
  template:
    metadata:
      labels:
        app: nfs-server
        name: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: itsthenetwork/nfs-server-alpine:11-arm
        env:
          - name: SHARED_DIRECTORY
            value: /exports
        ports:
          - name: nfs
            containerPort: 2049
          - name: mountd
            containerPort: 20048
          - name: rpcbind
            containerPort: 111
        securityContext:
          privileged: true
        volumeMounts:
          - mountPath: /exports
            name: mypvc
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: local-claim
      nodeSelector:
        purpose: volume
---
kind: Service
apiVersion: v1
metadata:
  name: nfs-server
  namespace: storage
spec:
  ports:
    - name: nfs
      port: 2049
    - name: mountd
      port: 20048
    - name: rpcbind
      port: 111
  clusterIP: 10.96.0.11
  selector:
    app: nfs-server
 

И я даже смог сделать постоянный объем с помощью этого:

 apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-nfs-volume
  labels:
    directory: mysql
spec:
  capacity:
    storage: 200Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  nfs:
    path: /mysql
    server: 10.244.19.5
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-nfs-claim
spec:
  storageClassName: slow
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  selector:
    matchLabels:
      directory: mysql
 

Но когда я пытаюсь использовать громкость вот так:

 apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-nfs-claim
 

Я получаю ошибку «Транспортный протокол версии NFS не поддерживается».

Комментарии:

1. Какую версию Kubernetes вы использовали? Пожалуйста, предоставьте свои журналы. Вы видели эту статью ? Пожалуйста, дайте мне знать, работает ли для вас какое-либо из этих решений.

2. На самом деле это было очень полезно. Вы должны включить 3 шага статьи в качестве ответа, чтобы я мог принять его.

Ответ №1:

При обнаружении mount.nfs: requested NFS version or transport protocol is not supported ошибки есть три основные причины:

  1. Службы NFS не запущены на сервере NFS
  2. Утилиты NFS не установлены на клиенте
  3. Служба NFS зависла на сервере NFS

В соответствии с этой статьей есть три решения для решения проблемы с вашей ошибкой.

Первый:

Войдите на сервер NFS и проверьте состояние служб NFS. Если следующая команда service nfs status возвращает информацию о том, что службы NFS остановлены на сервере — просто запустите их использование service nfs start . Для подключения общего ресурса NFS на клиенте используйте ту же команду.

Второй:

Если после первой попытки решения ваша проблема не будет решена

попробуйте установить пакет nfs-utils на свой сервер.

Третий:

Откройте файл /etc/sysconfig/nfs и попробуйте проверить следующие параметры

 # Turn off v4 protocol support
#RPCNFSDARGS="-N 4"
# Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
 

Удаление хэша из RPCNFSDARGS строк отключит поддержку определенных версий. Таким образом, клиенты с указанными версиями NFS не смогут подключиться к серверу NFS для подключения общего ресурса. Если у вас что-либо из этого включено, попробуйте отключить его и установить на клиенте после перезапуска службы сервера NFS.

Комментарии:

1. Привет @Proximo. Подумайте о том, чтобы принять ответ, если он решит вашу проблему.