kubernetes クラスターを試しているときに、スケーラビリティの問題が発生しました。テスト マシンのトポロジを簡素化するために、NodePort タイプを使用して個々のサービスを外部に公開します。ノードとマスターをホストするベアメタルは、24 個の CPU と 32G RAM を搭載した RHEL 7 です。専用のロード バランサーやクラウド プロバイダーのようなインフラストラクチャはまだありません。サービス定義のスニペットは以下のようになります
"spec": {
"ports": [{
"port": 10443,
"targetPort": 10443,
"protocol": "TCP",
"nodePort": 30443
} ],
"type": "NodePort",
このようにして、アプリケーションは次の方法でアクセスできますhttps://[node_machine]:30443/[a_service]
このようなサービスは、1 つの Pod によってのみサポートされます。理想的には、複数のサービスを同じノードにデプロイし (ただし異なる NodePort を使用)、同時に実行したいと考えています。
同様のワークロードの場合、展開されるサービスの数を増やすと (したがってバックエンド ポッドも)、アプリケーションのパフォーマンスが低下することが明らかになるまで、物事はうまく機能していました。驚いたことに、サービスの読み込み時間を分析すると、「ネットワーク」レイヤーのどこかで速度が低下していることを示しているように見える「接続時間」が劇的に低下していることに気付きました。負荷はまだノードの CPU の多くを駆動するほど高くないことに注意してください。ドキュメントの欠点について読みましたが、ヒットしたものがそこに記載されている kube-proxy/Service の制限であるかどうかはわかりません。
質問は次のとおりです。
よりスケーラブルにする方法について何か提案はありますか? つまり、アプリケーションのパフォーマンスを犠牲にすることなく、より多くのサービス/Pod をサポートできるようにするには? NodePort タイプは、サービスの「パブリック」アドレスを設定する最も簡単な方法ですが、すべてのサービスと Pod がこの方法で設定されている場合、スケーラビリティまたはパフォーマンスに制限はありますか?
タイプを LoadBalancer に変更すると、違いはありますか? 「タイプ」:「ロードバランサー」
さらに、外部からバックエンド Pod (またはサービス) にトラフィックをルーティングする HAProxy など、スケーラビリティを向上させる専用の LoadBalancer またはリバース プロキシを使用する利点はありますか? Nginx darkgaro/kubernetes-reverseproxy に対していくつかの作業が行われていることに気付きました。残念ながら、ドキュメントは不完全なようで、具体的な例はありません。他のスレッドで Vulcan について話している人がいますが、これは kubernetes に推奨される LB ツールですか?
あなたの推薦と助けは大歓迎です!