レガシー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で同じ質問をし、ユーザーがこれについてコメントしました。私たちは今これを試しています、そしてそれは大丈夫のようです。
同様の状況に対処する必要があり、オンラインで見つけた例からCIFS共有をポッドにマウントするカスタムFlexvolumeドライバーを開発することになりました。
私は自分のユースケースで機能するソリューションを使用してリポジトリを作成しました。
https://github.com/juliohm1978/kubernetes-cifs-volumedriver
前提条件として、各Kubernetesホストでcifs-utilsとjqをインストールする必要があります。ただし、CIFSボリュームをマウントしてポッドで使用するPersistentVoluemsを作成することはできます。
お役に立てば幸いです。