web-dev-qa-db-ja.com

Windowsの使用SMB Kubernetesデプロイメントアプリからの共有

レガシーJavaおよび.netアプリケーションをオンプレミスVMからオンプレミスKubernetesクラスターに移行しています。

これらのアプリケーションの多くは、Windowsファイル共有を利用して、他の既存のシステムとの間でファイルを転送します。 Kubernetesへのデプロイは、Samba共有の使用を回避するためにすべてのソリューションをリエンジニアリングするよりも優先度が低いため、移行する場合は、多くのものをそのまま維持する方法を見つける必要があります。

KubeadmとCanalを使用して3centos7マシンに3ノードクラスターをセットアップしました。

Azureボリュームを除いて、マウントするアクティブに保守されているプラ​​グインまたはライブラリが見つかりませんでしたSMB.

私が思いついたのは、すべてのノードで同じマウントポイントを使用して、各centosノードにSMB共有をマウントすることでした。つまり、 "/ data/share1"、次にローカルPersistentVolumeを作成しました。

kind: PersistentVolume
apiVersion: v1
metadata:
  name: samba-share-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/data/share1"

と主張、

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: samba-share-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

クレームをアプリケーションに割り当てました。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: samba-share-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: samba-share-deployment
        tier: backend
    spec:
      containers:
      - name: samba-share-deployment
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: samba-share-volume
      volumes:
      - name: samba-share-volume
        persistentVolumeClaim:
          claimName: samba-share-claim

各レプリカから機能しますが、本番環境でローカルボリュームを使用することについては大きな警告があります。これを行う他の方法や、この構成を使用する際の実際の注意点はわかりません。

別の方法でできますか?マウントポイントを監視し、マウントが失敗した場合にkubernetesのノードを無効にすると、これで問題ありませんか?

私はr/kubernetesで同じ質問をし、ユーザーがこれについてコメントしました。私たちは今これを試しています、そしてそれは大丈夫のようです。

https://www.reddit.com/r/kubernetes/comments/7wcwmt/accessing_windows_smbcifs_shares_from_pods/duzx0rs/

同様の状況に対処する必要があり、オンラインで見つけた例からCIFS共有をポッドにマウントするカスタムFlexvolumeドライバーを開発することになりました。

私は自分のユースケースで機能するソリューションを使用してリポジトリを作成しました。

https://github.com/juliohm1978/kubernetes-cifs-volumedriver

前提条件として、各Kubernetesホストでcifs-utilsとjqをインストールする必要があります。ただし、CIFSボリュームをマウントしてポッドで使用するPersistentVoluemsを作成することはできます。

お役に立てば幸いです。