GCE で実行されている kubernetes クラスターがあります。
2 つのポッド glusterfs-server-1
があり、glusterfs-server-2
それが私の gluster サーバーであるセットアップを作成しました。
2glusterfsd
デーモンは正しく通信し、レプリケートされたボリュームを作成し、それらにファイルを書き込み、両方のポッドで正しくレプリケートされたファイルを確認できます。
また、2 つの glusterfs ポッド間のトラフィックのバランスを自動的に調整する1 つのサービスも呼び出しています。glusterfs-server
別のポッド内から発行できmount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
、すべてが完全に機能します。
今、私が本当に望んでいるのはglusterfs
、コンテナーを作成するときに、.yaml ファイル内でボリューム タイプを使用できるようにすることです。
...truncated...
spec:
volumes:
- name: myvolume
glusterfs:
endpoints: glusterfs-server
path: myvolume
...truncated...
残念ながら、これは機能しません。なぜそれが機能しないのかを知ることができました:
kubernetes nodeに直接接続する場合、 を発行してmount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
も機能しません。これは、ノードの観点からglusterfs-server
は IP アドレスに解決されないためです。(つまり、getent hosts glusterfs-server
何も返されません)
また、glusterfs の仕組みにより、サービスの IP を直接使用しても失敗します。これは、glusterfs が最終的に名前を解決しようとするglusterfs-server
(そして失敗する) ためです。
さて、これが問題であることを確認するresolv.conf
ために、ポッドとサービスの IP アドレスが正しく解決されるように、(kube-dns の IP アドレスと検索ドメインを入力して) ノードを編集しました。その後、ようやくmount -t glusterfs glusterfs-server:/myvolume /mnt/myvolume
ノードで問題なく発行できました。その後、glusterfs ボリューム (上記の PodSpec を使用) を使用してポッドを作成することもできました。
今、私は自分のノードを変更することresolv.conf
はひどい考えだと確信しています.2つの異なる名前空間の2つのサービスが同じ名前(たとえば、glusterfs-service)を共有している場合、名前空間の概念を持つkubernetesは、にgetent hosts glusterfs-service
住んでいる2つの異なるIPに解決されます2 つの異なる名前空間。
だから私の質問は:
ノードがポッド/サービスの IP アドレスを解決できるようにするにはどうすればよいですか?