Kubernetes を 2500 ノードに拡張する際に発生する問題と解決策

Kubernetes を 2500 ノードに拡張する際に発生する問題と解決策

Kubernetes はバージョン 1.6 以降、5,000 を超えるノードをサポートできると主張していますが、数十から 5,000 までのノード数の増加に伴い、問題が発生することは避けられません。

この記事では、Kubernetes 5000 への道のりにおける Open API の経験、遭遇した問題、問題解決の試み、実際の問題の発見などについて説明します。

[[227083]]

遭遇した問題とその解決方法

質問1: 1〜500ノード後

質問:

kubectl がタイムアウトすることがあります (ps kubectl -v=6 ですべての API の詳細を表示できます)

解決を試みる:

  • 最初は kube-apiserver サーバーの負荷に問題があると思ったので、負荷分散を支援するためにプロキシをレプリカとして追加してみました。
  • しかし、バックアップ マスターが 10 個を超えると、問題は kube-apiserver が負荷に耐えられないことによるものではないことがわかります。 GKE は 32 コアの VM で 500 ノードをサポートできます。

理由:

上記の理由を除いて、マスター上の残りのサービス(etcd、kube-proxy)の確認を開始します。

  • etcdの調整を開始する
  • Datadog を使用して etcd スループットをチェックすると、異常なレイテンシが見つかりました (レイテンシの急上昇 ~100 ms)
  • Fio ツールを使用してパフォーマンスを評価したところ、IOPS (1 秒あたりの入力/出力) の 10% しか使用されておらず、書き込み遅延 (書き込み遅延 2 ミリ秒) によりパフォーマンスが低下していることがわかりました。
  • 各マシンのSSDをネットワークハードドライブからローカル一時ドライブ(SSD)に変更してみてください。
  • ~100msから200usまでの結果

質問2: ノードが約1000個ある場合

質問:

kube-apiserverはetcdから毎秒500MBを読み込むことが判明した。

解決を試みる:

  • Prometheus を通じてコン​​テナ間のネットワーク トラフィックを表示する

理由:

  • FluentdとDatadogは各ノードのデータを頻繁にクロールしていることが判明した。
  • 2 つのサービスのクロール頻度を減らすと、ネットワーク パフォーマンスは 500 MB/秒からほぼゼロに低下しました。

etcd のヒント: --etcd-servers-overrides を使用すると、Kubernetes イベント データをセグメントとして書き込み、異なるマシンで処理することができます (以下を参照)。

  1. --etcd-servers-overrides=/events#https://0.example.com:2381;https://1.example.com:2381;https://2.example.com:2381  

問題3: 1000~2000ノード

質問:

これ以上データを書き込めません。エラーが連鎖的に発生しました

kubernetes-ec2-autoscalerは、すべてのetcdが停止した後にのみ問題を返し、すべてのetcdをシャットダウンします。

解決を試みる:

  • etcd ハードディスクがいっぱいになっていると思いますが、SSD をチェックしたところ、まだ十分なスペースがあります。
  • 事前に設定されたスペース制限があるかどうかを確認し、2GBのサイズ制限があることを確認します。

解決:

  • etcd 起動パラメータに --quota-backend-bytes を追加します。
  • kubernetes-ec2-autoscaler ロジックを修正 - 50% を超える問題がある場合は、クラスターをシャットダウンします

各種サービスの最適化

Kubeマスターの高可用性

一般的に言えば、私たちのアーキテクチャは、kube-master (kube-apiserver、kube-scheduler、kube-control-manager を含む主要な Kubernetes サービス プロバイダー コンポーネント) と複数のスレーブで構成されます。ただし、高可用性を実現するには、次の方法を参照してください。

  • kube-apiserverは複数のサービスを設定し、再起動してパラメータ--apiserver-countを設定する必要があります。
  • kubernetes-ec2-autoscaler はアイドル状態のリソースを自動的にシャットダウンするのに役立ちますが、これは Kubernetes スケジューラの原則に反します。ただし、これらの設定により、リソースを最大限に集中させることができます。

  1. {
  2. 「種類」 : 「ポリシー」
  3. 「apiバージョン」 : 「v1」
  4. 「述語」 : [
  5. { "name" : "GeneralPredicates" },
  6. { "名前" : "MatchInterPodAffinity" },
  7. { "名前" : "NoDiskConflict" },
  8. { "名前" : "NoVolumeZoneConflict" },
  9. { "名前" : "PodToleratesNodeTaints" }
  10. ]、
  11. 「優先順位」 : [
  12. { "名前" : "MostRequestedPriority" , "重み" : 1},
  13. { "名前" : "InterPodAffinityPriority" "重み" : 2}
  14. ]
  15. }

上記はKubernetesスケジューラを調整する例です。 InterPodAffinityPriority の重みを増やすことで、目標を達成できます。参考までに、その他の例もご覧ください。

現在の Kubernetes スケジューラ ポリシーは動的切り替えをサポートしておらず、kube-apiserver を再起動する必要があることに注意してください (問題: 41600)

スケジューラポリシーの調整による影響

OpenAIはKubeDNSを使用していましたが、すぐに

質問:

DNS クエリが頻繁に失敗する (ランダムに発生する)

約200QPS以上のドメイン検索

解決を試みる:

  • なぜこのようなことが起こるのかを調べようとしたところ、一部のノードで 10 個を超える KuberDNS が実行されていることがわかりました。

解決:

  • スケジューラポリシーにより、多くのPODが集中する
  • KubeDNS は非常に軽量で、同じノードに簡単に割り当てることができるため、ドメイン検索が集中化されます。
  • POD アフィニティ (関連する紹介) を変更し、KubeDNS を別のノードに割り当てる必要があります。

  1. 親和性:
  2. ポッドアンチアフィニティ:
  3. スケジュール中は必須、実行中は無視:
  4. -重量: 100
  5. ラベルセレクター:
  6. 一致表現:
  7. -キー: k8s-app
  8. 演算子:  
  9. - kube-dns
  10. トポロジキー: kubernetes.io/ホスト名

新しいノードを作成するときにDockerイメージのプルが遅くなる

質問:

新しいノードが構築されるたびに、Dockerイメージのプルに30分かかります

解決を試みる:

  • 約 17 GB の大きなコンテナ イメージ Dota があり、ノード全体のイメージのプルに影響を及ぼします。
  • kubeletに他のイメージプルオプションがあるかどうかの確認を開始する

解決:

  • kubelet にオプション --serialize-image-pulls=false を追加してイメージのプルを有効にし、他のサービスが早くプルできるようにします。
  • このオプションでは、docker storgae を overlay2 に切り替える必要があります。
  • また、DockerイメージをSSDに保存すると、イメージのプルが速くなります。

補足: ソーストレース

  1. // serializeImagePulls を有効にする、Kubelet に画像を 1 つずつプルするように指示します。
  2. //一度.ノードデフォルトを変更しないことを推奨します
  3. //バージョン 1.9 未満docker デーモンまたはAufs ストレージ バックエンドを実行します。
  4. // 問題 #10959 に詳細が記載されています。
  5. SerializeImagePulls *bool `json: "serializeImagePulls" `

Dockerイメージのプル速度の向上

さらに、次の方法でプル速度を向上させることもできます。

  • kubeletパラメータ--image-pull-progress-deadlineを30分に増やす必要があります。
  • マルチスレッドダウンロードを有効にするには、dockerデーモンパラメータmax-concurrent-downloadを10に調整する必要があります。

ネットワークパフォーマンスの向上

フランネルのパフォーマンスの限界

OpenAIノード間のネットワークトラフィックは10~15GBit/sに達する可能性がありますが、Flannelによりトラフィックは2GBit/sまで低下します。

解決策は、フランネルを削除し、実際のネットワークを使用することです

  • ホストネットワーク: true
  • dnsポリシー: ClusterFirstWithHostNet

<<:  マルチクラウド戦略で避けるべき 5 つの間違い

>>:  この記事では、「エッジコンピューティング」とモノのインターネットの密接な関係について説明します。

推薦する

Webmaster Network の第 2 回 SEM 入札トレーニングへの登録最終日

1. オンライン入札とは何ですか?簡単に言えば、入札とは、Baidu、Google、Soso、Sog...

製品設計におけるユーザーの「Gスポット」 ユーザーとともに製品を開発

ユーザーの「Gスポット」とは何でしょうか? ここでは、この G スポットを次のように定義します: ユ...

#12.12 #dogyun: 香港、日本、韓国、アメリカ、ドイツ、オランダで販売されている高級 cn2 gia ラインが最大 60% オフ

国内唯一のオンラインフェスティバル「ダブル12」期間中、dogyunは4つの波のアクティビティを開始...

Kubernetesを本番環境で使用した3年間の経験から学んだこと

[編集者注] Kubernetes の旅から得られた主な教訓。私たちは 2017 年にバージョン 1...

bluevm-2g メモリ KVM/4 コア/40g ハードディスク/月間トラフィック 4T/月額 10 ドル

bluevmさん、512MメモリのKVMを年間25ドルで手に入れようとみんなが殺到したようですが、ま...

ハイブリッドクラウド市場をめぐる戦いが現実になる

ハイブリッドクラウドの使用がますます増えています。過去 10 年間でハイブリッド クラウド、市場構造...

readydedis: 月額 6 ドル、米国での無制限トラフィック VPS、1G メモリ/1 コア (ryzen9 3950X)/25g NVMe/1Gbps 帯域幅

トラフィックを流したい人は、トラフィックが無制限の VPS が必要な場合もあります。readyded...

庭の手入れのように: ソーシャルメディアで存在感を発揮するための 5 つの教訓

はじめに: 私たちは皆、WeiboとWeChatを使用していますが、プレイ、操作、構築は異なります。...

高品質なバックリンクは共有から生まれる

外部リンクに関しては、SEO に関係する人たちはよく知っています。外部リンクがウェブサイトの検索エン...

SEO 最適化でアンカーテキストを使用するテクニックは何ですか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトの最適化は簡...

フォーブス 2019 クラウド 100: ストライプは引き続きトップ、上位 5 社は刷新

テクノロジーの最もホットな分野であるクラウド コンピューティングは、デジタル時代におけるコミュニケー...

「オルタナティブクラウド」移行戦略 | 3種類のクラウド移行パス、複数当事者のコラボレーション

コストパフォーマンスと使いやすさに優れた「オルタナティブクラウド」サービスは、スタートアップ企業や中...

ウェブマスターネットワークからの毎日のレポート:Tmallはどうする?分類情報ウェブサイトは7年目の痒みを経験している

1. Tmallが目指すもの:販売プラットフォームからつながりプラットフォームへ天猫にとって、201...

フラッシュセールプラットフォームFabは3つの変革を経て破産の危機に瀕している。モデルの維持は困難で、会社の経営は不安定だ。

「Fabの前身はFabulisというゲイ向けソーシャルネットワーキングサイトだった。Yelpのレビュ...