2

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 アドレスを解決できるようにするにはどうすればよいですか?

4

1 に答える 1

2

resolv.conf競合を避けるために、完全なサービス名を変更して使用できます。通常は次のようになります: service_name.default.svc.cluster.localandservice_name.kube-system.svc.cluster.localまたは名前が付けられた名前空間。

于 2016-08-23T06:37:01.120 に答える