ある夜、Kubernetes クラスターが拡張に失敗し続け、すべてのノードがクラスターに正常に参加できないという問題が発生しました。何度も試しても解決に至らなかったため、技術サポートのフィードバックをいただきました。この問題のトラブルシューティングプロセス全体は非常に興味深いので、使用したトラブルシューティングのアイデアと方法を整理して共有したいと思います。
問題現象運用チームが顧客の Kubernetes クラスターのノード容量を拡張していたとき、新しいノードの追加が常に失敗していることに気付きました。学生は次のように予備調査を実施した。
この顧客が使用している Kubernetes のバージョンは 1.13.10 で、ホストのカーネル バージョンは 4.18 (CentOS 8.2) です。 トラブルシューティングのプロセス最前線の同僚からのフィードバックを受けて、当初は問題は IPVS にあるのではないかと疑いました。ネットワークの問題のトラブルシューティングに関する過去の経験に基づいて、まず現場でいくつかの定期検査を実施しました。
共通の問題を排除した後、基本的に範囲を絞り込み、その後、IPVS 関連の側面に基づいて調査を継続できます。 ipvsadm コマンドによるトラブルシューティング10.96.0.1 は、顧客クラスターの Kubernetes マスター サービス VIP です。 SYN_RECV 状態で接続異常が発生していることがわかり、起動時には kubelet + kube-proxy が正常に接続されていることが確認でき、起動後に Kubernetes サービス ネットワークに異常が発生していることがわかります。 tcpdump パケットキャプチャ分析両端でパケットをキャプチャし、telnet 10.96.0.1 443 コマンドを使用して確認します。 結論: このマシンでは SYN パケットが送信されていないことが判明しました。 予備的概要上記のトラブルシューティングにより、範囲を再度絞り込むことができ、問題は基本的に kube-proxy にあることがわかります。私たちは IPVS モードを使用し、ネットワーク転送、SNAT、ドロップなどを実装するために iptables 構成にも依存しています。 上記のトラブルシューティング プロセスに基づいて範囲を絞り込み、疑わしいオブジェクト kube-proxy の分析を開始しました。 kube-proxy ログを表示する異常なログが見つかり、iptables-restore コマンドが異常実行されました。問題を確認するには、Google とコミュニティをチェックしてください。 さらに深くコード (1.13.10 バージョン pkg/proxy/ipvs/proxier.go:1427) を見ると、このバージョンには KUBE-MARK-DROP が存在するかどうかを判断して作成するロジックがないことがわかります。チェーンが存在しない場合は論理的な欠陥が発生し、iptable コマンドの実行が失敗します。 Kubernetes マスター サービスの VIP にアクセスできないのに、実際のコンテナー関連の IP にアクセスできる理由は、次の iptable ルールに関連しています。
根本原因の調査すでにご存知のとおり、kube-proxy 1.13.10 には欠陥があります。 KUBE-MARK-DROP チェーンが作成されていない場合は、iptables-restore コマンドを実行してルールを設定します。しかし、Kubernetes バージョン 1.13.10 は、CentOS 8.2 4.18 カーネル オペレーティング システムで実行するとエラーが報告されるのに、CentOS 7.6 3.10 カーネル オペレーティング システムでは正常に実行されるのはなぜでしょうか? kube-proxy のソースコードを見ると、kube-proxy が実際に iptables コマンドを実行してルールを設定していることがわかります。 kube-proxy は iptables-restore コマンドが失敗したというエラーを報告しているので、4.18 カーネルを搭載したマシンを見つけて kube-proxy コンテナに入り、状況を確認します。 コンテナ内で iptables-save コマンドを実行すると、KUBE-MARK-DROP チェーンが kube-proxy コンテナ内に作成されていないことがわかります (コードで予想されるとおり)。ホストマシン上で iptables-save コマンドを実行し続けたところ、KUBE-MARK-DROP チェーンがあることがわかりました。 ここでは2つの質問があります:
最初の疑問は、kube-proxy 以外にも iptables を操作するプログラムがあるのではないかと疑っているため、Kubernetes のコードを読み進めています。 結論: kube-proxy に加えて、kubelet も iptables ルールを変更することがわかりました。具体的なコードについては、pkg/kubelet/kubelet_network_linux.go を参照してください。 2 番目の疑問については、自分の感覚に従ってください。 Google は、kube-proxy コンテナが host/run/xtables.lock ファイルをマウントしたときに、ホストとコンテナの iptables が異なるルールを表示する理由を尋ねました。 結論: CentOS 8 はネットワークに関して iptables を放棄し、デフォルトのネットワーク パケット フィルタリング ツールとして nftables フレームワークを採用しています。 この時点で、すべての謎は解明されました。 チームは多数の顧客プロジェクトの納品を完了しましたが、まだ答えられる質問がいくつかあります。
これは CentOS 8 オペレーティング システムに関連しているため、手動でバージョン 5.5 にアップグレードした後も、iptables フレームワークはデフォルトで引き続き使用されます。 nftables が使用されているかどうかを確認するには、iptables -v コマンドを使用できます。 nftablesとは何ですか? iptables よりも優れていますか?これはさらに研究する価値のあるもう一つの点なので、ここでは詳しくは触れません。 回避策上記のトラブルシューティングの問題に対する解決策をまとめます。
|
<<: 企業がクラウドサービスのポートフォリオを管理する能力は、より高いレベルの自動化を達成するための鍵となる。
>>: NetEase Interactive Entertainment AI Labが世界初のダンスアニメーション合成システムを発表
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますCEOマー...
偶然ネットで、Google が最近、アカウント開設時に Google Adwords の手数料 35...
【51CTO.comオリジナル記事】 2020年初頭に発生した新型コロナウイルス感染症は、世界中のあ...
数日前、グループでウェブサイトを構築している友人たちとチャットしていたとき、あるウェブマスターが、B...
[[409211]]この記事はWeChatの公開アカウント「Geek Rebirth」から転載したも...
10月23日はウェブマスターコミュニティにとって大きな打撃でした。百度は「ハイパーリンクアルゴリズム...
誰もが外部リンクの役割を非常に重視していますが、内部リンクの重要性を無視することがよくあります。内部...
UK2 の VPS.NET (XEN ONAPP ベース) は現在、初月の VPS クラウド エクス...
treudler.net は比較的新しい会社です。主な業務は、さまざまな OVH データセンターで ...
ウェブサイトのランキングやトラフィックが良くない場合、その理由を尋ねると、多くのウェブマスターは、コ...
インターネットとモバイルインターネットの急速な発展に伴い、新しいマーケティング手法とマーケティングキ...
医療分野で働く人なら誰でも、医療ウェブサイトが大量生産されており、それが「盲目的な」ユーザーエクスペ...
背景10月、「科学的SEO」という概念の創始者である張国平氏が光年フォーラムの正式な閉鎖を提案し、S...
市食品安全局長は復旦大学を訪れ、「窓から投げ出す」ウェブサイトの創設者と連絡を取り、専門的な支援を提...
仕事をうまくやり遂げたいなら、まず道具を研がなければなりません。アプリの分析に重点を置き、さまざまな...