NFS クライアントが共有フォルダにファイルを生成しようとすると、許可されない操作が発生します。サーバーとクライアントの両方がコンテナにあります。

NFS クライアントが共有フォルダにファイルを生成しようとすると、許可されない操作が発生します。サーバーとクライアントの両方がコンテナにあります。

グーグルをたくさんしてみると似たような事例がかなりありました。しかし、そのどれも私の状況には当てはまりません。 Macと関係があるかどうかはわかりません。

私の問題をできるだけ明確に説明しようとしています。

  • KINDを使用して3つのノードを持つローカルKubernetesクラスターを実行しています。/data/k8sローカルMacOSでマスターノードにボリュームをマウントします。/tmp/k8s
  • マスターノードにNFSサーバーを作成してエクスポートします。/data/k8s
  • また、NFS クライアントとしてスレーブノードに NFS をインストールし、マスターノードを/data/k8sスレーブノードにローカルにマウントしました。/data/k8s

問題はこれである:

  • 問題なくマスターノードですべてがうまく動作します。
  • スレーブノードでCANNOT通常のファイルを作成すると同時にフォルダを作成できます。
  • スレーブノードは、CANマスターノードで生成されたすべてのファイルを変更します。
  • マスターノードで生成されたすべてのファイルは、問題なくスレーブノードで同期できます。

以下はいくつかの情報です。

  • オペレーティングシステム(マスターとスレーブと同じ)
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
  • マスターノードのマウント情報(元のホストMacOSでマウントされたスペース)
root@test2-control-plane:/data/k8s# mount | grep /data
grpcfuse on /data/k8s type fuse.grpcfuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
  • マスターノードの設定のエクスポート
/data/k8s/ *(fsid=0,rw,sync,no_root_squash)
  • マスターノードのetab情報
*(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,fsid=0,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
  • マスターノードの権限情報
root@test2-control-plane:/data/k8s# ls -al
total 24
drwxrwxrwx 7 root root  224 Dec 25 01:50 .
drwxrwxrwx 3 root root 4096 Dec 24 12:33 ..
  • ノードからの情報のマウント
root@test2-worker:/data/k8s# mount | grep /data
172.18.0.4:/data/k8s on /data/k8s type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.18.0.4,mountvers=3,mountport=45257,mountproto=udp,local_lock=all,addr=172.18.0.4)
  • スレーブノードの権限情報
root@test2-worker:/data/k8s# ls -al
total 24
drwxrwxrwx 8 root root  256 Dec 25 02:17 .
drwxrwxrwx 3 root root 4096 Dec 24 13:23 ..
  • 私が試したこと:
    • SELinuxを確認しました。
    root@test2-control-plane:/data/k8s# sestatus
    SELinux status:                 disabled
    
    • マスターノードとスレーブノードで特定のユーザーを追加し、all_squash同じuser_idとgroup_idでユーザーを定義しました。次に、マイスレーブノードで定義されたユーザーに切り替えます。anonuidanongid
    • あまり試しても覚えていません。

私はこれが特定のケースである可能性があることを知っています。誰でも助けていただければ幸いです。

答え1

Docker Desktopを使用してK8をローカルで実行するのと同じ問題が発生しました。

  • macOSビッグサー11.1
  • ドッカーv20.10.5
  • k8s v1.19.7

私はこの動作が混乱していて、それを処理するホストシステムのOS権限がない場合は、どのような違いがあるかを確認するためにhostPathボリュームをemptyDirに置き換えることにしました。何らかの理由で機能したため、コンテナの起動/停止時にホストシステムからファイルをロード/保存するために、NFSサーバーのemptyDirといくつかのライフサイクルフックを使用して解決策を構築しました。

コードは次のとおりです。https://github.com/tonomychaelson/k8s-nfs-eration-not-permittied-workaround

NFSサーバーがクライアントではなくホストパスボリュームにファイルを生成する方法は非常に奇妙です。しかし、これはローカル開発者にのみ当てはまるので、これに多くの時間を費やしたくありません。さらに、クラウドのソリューションは絶対にHostPathを使用しません。

乾杯、トニー

関連情報