Разделить объем NFS между кластерами kubernetes - PullRequest
0 голосов
/ 26 июня 2018

У нас есть настройка в GKE с двумя разными кластерами. В одном кластере работает nfs-сервер, и в этом кластере у нас есть постоянный том, который указывает на сервер. Этот PV затем устанавливается на модуль, работающий на этом кластере. Второй кластер также имеет PV и модуль, который должен монтировать тот же том NFS. Здесь возникает проблема. Где мы указываем на сервер, он не работает с использованием адреса кластера nfs-сервера. Это понятно, но мне интересно, как лучше всего этого достичь.

Установка в основном такая:

Заявка о постоянном объеме и постоянном объеме, используемая NFS

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 20Gi
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  gcePersistentDisk:
    pdName: files
    fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

Развертывание NFS-сервера

apiVersion: extensions/v1beta1
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: mypvc
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: nfs-pvc

Служба NFS-сервера

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

Постоянный объем и Запрос постоянного объема, используемый модулями:

  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: nfs
  spec:
    capacity:
      storage: 20Gi
    storageClassName: manual
    accessModes:
      - ReadWriteMany
    nfs:
      server: 10.4.0.20
      path: "/"

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

Часть файла развертывания для подключения модуля nfs

      volumes:
        - name: files
          persistentVolumeClaim:
            claimName: nfs

Вывод kubectl get pv и kubectl get pvc

user@HP-EliteBook:~/Downloads$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM             STORAGECLASS   REASON    AGE
nfs       100Gi      RWX            Retain           Bound     default/nfs       manual                   286d
nfs-pv    100Gi      RWO            Retain           Bound     default/nfs-pvc   manual                   286d
user@HP-EliteBook:~/Downloads$ kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs       Bound     nfs       100Gi      RWX            manual         286d
nfs-pvc   Bound     nfs-pv    100Gi      RWO            manual         286d

Проблема в том, что ip в PV используется стручками. Модуль в том же кластере может подключаться к нему, но не модуль в другом кластере. Я могу использовать реальный podIP из другого кластера, но podIP меняется с каждым развертыванием, так что это не рабочее решение. Как лучше всего обойти эту проблему, я только хочу, чтобы этот второй кластер имел доступ к серверу nfs и не открывал его для мира, например.

...