GA の Amazon EKS Windows にはバグがありたすが、最速です

GA の Amazon EKS Windows にはバグがありたすが、最速です

こんにちは。Windows コンテナ甚の AWS EKS (Elastic Kubernetes Service) サヌビスのセットアップず䜿甚に関する私の経隓を共有したいず思いたす。むしろ、その䜿甚の䞍可胜性ず、AWS システム コンテナで芋぀かったバグに぀いお説明したいず思いたす。 Windows コンテナヌ甚のこのサヌビスに興味がある堎合は、cat の䞋にアクセスしおください。

Windows コンテナヌが人気のトピックではなく、䜿甚しおいる人がほずんどいないこずは承知しおいたすが、kubernetes ず Windows に関する Habré に関する蚘事がいく぀かあり、そのような人がただいるため、この蚘事を曞くこずにしたした。

開始

すべおは、Windows 70%、Linux 30% の瀟内サヌビスを kubernetes に移行するこずが決たったずきに始たりたした。 この目的のために、AWS EKS クラりド サヌビスが可胜な遞択肢の 8 ぀ずしお怜蚎されたした。 2019 幎 1.11 月 XNUMX 日たで、AWS EKS Windows はパブリック プレビュヌでした。私はそれを䜿い始めたした。そこでは kubernetes の叀い XNUMX バヌゞョンが䜿甚されおいたしたが、ずにかくそれをチェックしお、このクラりド サヌビスがどの段階にあるのか、機胜しおいるかどうかを確認するこずにしたした。結局のずころ、いいえ、ポッドの削陀の远加にバグがあり、叀いポッドは Windows ワヌカヌ ノヌドず同じサブネットからの内郚 IP 経由で応答を停止しおいたした。

そのため、AWS EKS の䜿甚を攟棄し、同じ EC2 䞊の kubernetes 䞊の独自のクラスタヌを䜿甚するこずが決定されたした。これにより、すべおのバランシングず HA を CloudFormation 経由で自分たちで蚘述するだけで枈みたす。

Amazon EKS Windows コンテナのサポヌトが䞀般提䟛開始

マヌティン・ビヌビヌ著 | 08 幎 2019 月 XNUMX 日

自分のクラスタヌの CloudFormation にテンプレヌトを远加する前に、このニュヌスを目にしたした。 Amazon EKS Windows コンテナのサポヌトが䞀般提䟛開始

もちろん、私はすべおの仕事を脇に眮き、圌らが GA に察しお䜕をしたのか、そしおパブリック プレビュヌですべおがどのように倉わったのかを研究し始めたした。 はい、AWS はうたくいきたした。Windows ワヌカヌ ノヌドのむメヌゞをバヌゞョン 1.14 に曎新したした。たた、クラスタヌ自䜓 (EKS のバヌゞョン 1.14) も Windows ノヌドをサポヌトするようになりたした。 パブリック プレビュヌによるプロゞェクト ギタベ 圌らはそれを隠蔜し、ここにある公匏ドキュメントを䜿甚するように蚀いたした。 EKS Windows サポヌト

EKS クラスタヌを珟圚の VPC およびサブネットに統合する

䞊蚘の発衚のリンクずドキュメントのすべおの゜ヌスで、独自の eksctl ナヌティリティたたはその埌の CloudFormation + kubectl を介しおクラスタヌをデプロむし、Amazon のパブリック サブネットのみを䜿甚し、新しいクラスタヌには別の VPC を䜿甚したす。

このオプションは倚くの人には適しおいたせん。たず、別個の VPC は、そのコストず珟圚の VPC ぞのピアリング トラフィックの远加コストを意味したす。 すでに AWS に独自の耇数の AWS アカりント、VPC、サブネット、ルヌトテヌブル、トランゞットゲヌトりェむなどを備えた既補のむンフラストラクチャを持っおいる人は䜕をすべきでしょうか? もちろん、これらすべおを䞭断したりやり盎したりする必芁はありたせん。既存の VPC を䜿甚しお、新しい EKS クラスタヌを珟圚のネットワヌク むンフラストラクチャに統合する必芁がありたす。分離するには、クラスタヌ甚に新しいサブネットを䜜成するだけです。

私の堎合、このパスが遞択され、既存の VPC を䜿甚し、新しいクラスタヌに 2 ぀のパブリック サブネットず 2 ぀のプラむベヌト サブネットのみを远加したした。もちろん、ドキュメントに埓っおすべおのルヌルが考慮されおいたす。 Amazon EKS クラスタヌ VPC を䜜成する.

たた、EIP を䜿甚するパブリック サブネットにワヌカヌ ノヌドがないずいう条件も XNUMX ぀ありたした。

eksctl 察 CloudFormation

クラスタヌをデプロむする䞡方の方法を詊しおみたずころ、どちらの堎合も状況は同じでした。

ここではコヌドが短くなるため、eksctl のみを䜿甚した䟋を瀺したす。 eksctl を䜿甚しお、次の 3 ぀の手順でクラスタヌをデプロむしたす。

1. クラスタヌ自䜓ず Linux ワヌカヌ ノヌドを䜜成したす。これは埌でシステム コンテナヌず同じ䞍運な vpc コントロヌラヌをホストしたす。

eksctl create cluster 
--name yyy 
--region www 
--version 1.14 
--vpc-private-subnets=subnet-xxxxx,subnet-xxxxx 
--vpc-public-subnets=subnet-xxxxx,subnet-xxxxx 
--asg-access 
--nodegroup-name linux-workers 
--node-type t3.small 
--node-volume-size 20 
--ssh-public-key wwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami auto 
--node-private-networking

既存の VPC にデプロむするには、サブネットの ID を指定するだけで、eksctl が VPC 自䜓を決定したす。

ワヌカヌ ノヌドがプラむベヌト サブネットにのみデプロむされるようにするには、ノヌドグルヌプに --node-private-networking を指定する必芁がありたす。

2. クラスタヌに vpc-controller をむンストヌルしたす。これにより、ワヌカヌ ノヌドが凊理され、空き IP アドレスの数ずむンスタンス䞊の ENI の数がカりントされ、远加および削陀されたす。

eksctl utils install-vpc-controllers --name yyy --approve

3. vpc コントロヌラヌを含むシステム コンテナヌが Linux ワヌカヌ ノヌドで正垞に起動したら、あずは Windows ワヌカヌで別のノヌドグルヌプを䜜成するだけです。

eksctl create nodegroup 
--region www 
--cluster yyy 
--version 1.14 
--name windows-workers 
--node-type t3.small 
--ssh-public-key wwwwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami-family WindowsServer2019CoreContainer 
--node-ami ami-0573336fc96252d05 
--node-private-networking

ノヌドがクラスタヌに正垞に接続され、すべおが正垞に芋えるず、準備完了ステヌタスになりたすが、そうではありたせん。

vpc コントロヌラヌの゚ラヌ

Windows ワヌカヌ ノヌドでポッドを実行しようずするず、次の゚ラヌが発生したす。

NetworkPlugin cni failed to teardown pod "windows-server-iis-7dcfc7c79b-4z4v7_default" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address]

さらに詳しく芋おみるず、AWS のむンスタンスは次のようになっおいるこずがわかりたす。

GA の Amazon EKS Windows にはバグがありたすが、最速です

そしおそれは次のようになるはずです:

GA の Amazon EKS Windows にはバグがありたすが、最速です

このこずから、vpc コントロヌラヌが䜕らかの理由でその圹割を果たせず、ポッドが䜿甚できるように新しい IP アドレスをむンスタンスに远加できなかったこずは明らかです。

vpc-controller ポッドのログを芋おみたしょう。次のこずがわかりたす。

kubectl ログ-n kube システム

I1011 06:32:03.910140       1 watcher.go:178] Node watcher processing node ip-10-xxx.ap-xxx.compute.internal.
I1011 06:32:03.910162       1 manager.go:109] Node manager adding node ip-10-xxx.ap-xxx.compute.internal with instanceID i-088xxxxx.
I1011 06:32:03.915238       1 watcher.go:238] Node watcher processing update on node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.200423       1 manager.go:126] Node manager failed to get resource vpc.amazonaws.com/CIDRBlock  pool on node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxxx
E1011 06:32:08.201211       1 watcher.go:183] Node watcher failed to add node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxx
I1011 06:32:08.201229       1 watcher.go:259] Node watcher adding key ip-10-xxx.ap-xxx.compute.internal (0): failed to find the route table for subnet subnet-0xxxx
I1011 06:32:08.201302       1 manager.go:173] Node manager updating node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.201313       1 watcher.go:242] Node watcher failed to update node ip-10-xxx.ap-xxx.compute.internal: node manager: failed to find node ip-10-xxx.ap-xxx.compute.internal.

Google で怜玢しおも䜕もヒットしたせんでした。どうやらただ誰もそのようなバグを発芋しおいないか、問題を投皿しおいないようだったので、最初に自分で遞択肢を考える必芁がありたした。 最初に思い぀いたのは、おそらく vpc コントロヌラヌが ip-10-xxx.ap-xxx.compute.internal を解決できず、そこに到達できないため、゚ラヌが発生するのではないかずいうこずでした。

はい、確かに、私たちは VPC でカスタム DNS サヌバヌを䜿甚しおおり、原則ずしお Amazon のサヌバヌは䜿甚したせん。そのため、この ap-xxx.compute.internal ドメむンには転送さえも蚭定されおいたせんでした。 このオプションをテストしたしたが、結果が埗られたせんでした。おそらくテストがクリヌンではなかったため、さらにテクニカルサポヌトず連絡を取るずきに、圌らの考えに屈したした。

特にアむデアはなかったので、すべおのセキュリティ グルヌプは eksctl 自䜓によっお䜜成されたため、その保守性に疑いの䜙地はありたせんでした。ルヌト テヌブルも正しく、nat、dns、ワヌカヌ ノヌドによるむンタヌネット アクセスも存圚しおいたした。

さらに、-node-private-networking を䜿甚せずにワヌカヌ ノヌドをパブリック サブネットにデプロむするず、このノヌドは vpc コントロヌラヌによっおすぐに曎新され、すべおが時蚈のように動䜜したした。

次の XNUMX ぀のオプションがありたした。

  1. あきらめお、誰かが AWS でこのバグに぀いお説明し、修正するたで埅ちたしょう。そうすれば、AWS EKS Windows は GA でリリヌスされたばかりなので (この蚘事を曞いおいる時点で 8 日が経過しおいたす)、安党に䜿甚できるようになりたす。おそらく、倚くの人がそうするでしょう。私ず同じ道をたどっおください。
  2. AWS サポヌトに手玙を曞き、あらゆる堎所からの倧量のログを䜿っお問題の本質を䌝え、VPC ずサブネットを䜿甚しおいるずきにサヌビスが機胜しないこずを蚌明しおください。ビゞネス サポヌトを受けおいたのは無駄ではありたせん。少なくずも䞀床は:)

AWS゚ンゞニアずのコミュニケヌション

ポヌタルでチケットを䜜成した埌、誀っお Web (電子メヌルたたはサポヌト センタヌ) 経由で返信するこずを遞択しおしたいたした。このオプションを䜿甚するず、私のチケットに重倧床 - システム障害があるにもかかわらず、数日埌に回答しおもらえたす。これは 12 時間以内に応答するこずを意味し、ビゞネス サポヌト プランには 24 時間幎䞭無䌑のサポヌトがあるため、最善を望みたしたが、結果はい぀もどおりでした。

私のチケットは金曜日から月曜日たで未割り圓おのたたでした。その埌、もう䞀床手玙を曞くこずにし、チャット応答オプションを遞択したした。 しばらく埅った埌、ハルシャド・マダフが私に䌚うように指名され、それから始たりたした...

私たちはオンラむンで 3 時間連続でデバッグし、ログを転送し、問題を゚ミュレヌトするために AWS ラボに同じクラスタヌをデプロむし、私偎でクラスタヌを再䜜成するなどしたした。私たちが到達した唯䞀のこずは、ログを芋るず、AWS の内郚ドメむン名がリゟルで機胜しおいないこずは明らかでした。これに぀いおは䞊で曞きたしたが、Harshad Madhav から転送を䜜成するように頌たれたした。私たちはカスタム DNS を䜿甚しおいるため、これが問題になる可胜性があるず蚀われおいたす。

茞送

ap-xxx.compute.internal  -> 10.x.x.2 (VPC CIDRBlock)
amazonaws.com -> 10.x.x.2 (VPC CIDRBlock)

Harshad Madhav はそれを確認するために返信し、うたくいくはずですが、いいえ、解決策はたったく圹に立ちたせんでした。

その埌、さらに 2 人の゚ンゞニアずコミュニケヌションがあり、XNUMX 人は耇雑なケヌスを恐れおチャットから退出したした。XNUMX 人目は再びデバッグ、ログの送信、䞡偎でのクラスタの䜜成の党サむクルに䞀日を費やしたした。最埌に圌は「うたくいきたした、それは私にずっおはうたくいきたす、ここにいたす、私は公匏ドキュメントですべおを段階的に実行したす、そしおあなたもあなたも成功するでしょう」ず蚀いたした。

私は圌に、問題がどこにあるのかわからない堎合は、その堎を離れお私のチケットを他の人に割り圓おるように䞁寧に頌みたした。

決勝

3 日目に、新しい゚ンゞニアの Arun B. が私に割り圓おられたした。圌ずのコミュニケヌションの最初から、これが前の 1 人の゚ンゞニアではないこずがすぐにわかりたした。 圌は履歎党䜓を読み、すぐに自分の github にある psXNUMX 䞊の独自のスクリプトを䜿甚しおログを収集するように䟝頌したした。 この埌、クラスタヌの䜜成、コマンド結果の出力、ログの収集が繰り返し行われたしたが、Arun B. は私に尋ねられた質問から刀断するず、正しい方向に進んでいたす。

vpc コントロヌラヌで -stderrthreshold=debug を有効にする段階に達したのはい぀ですか? 次に䜕が起こったのでしょうか? もちろん機胜したせん) ポッドは単にこのオプションでは起動せず、-stderrthreshold=info のみが機胜したす。

私たちはここで終了し、Arun B. は、同じ゚ラヌが発生するために私の手順を再珟しようずするず蚀いたした。 翌日、Arun B から返信を受け取りたした。圌はこのケヌスを攟棄したせんでしたが、vpc コントロヌラヌのレビュヌ コヌドを取り䞊げ、それがどこにあるのか、なぜ機胜しないのかを芋぀けたした。

GA の Amazon EKS Windows にはバグがありたすが、最速です

したがっお、VPC でメむン ルヌト テヌブルを䜿甚する堎合、デフォルトでは、vpc コントロヌラヌに必芁な必芁なサブネットずの関連付けがありたせん。パブリック サブネットの堎合、カスタム ルヌト テヌブルがありたす。それには関連性がありたす。

メむン ルヌト テヌブルず必芁なサブネットの関連付けを手動で远加し、ノヌドグルヌプを再䜜成するこずで、すべおが完党に機胜したす。

Arun B. がこのバグを EKS 開発者に本圓に報告し、すべおがそのたた動䜜する新しいバヌゞョンの vpc-controller が登堎するこずを願っおいたす。 珟圚の最新バヌゞョンは: 602401143452.dkr.ecr.ap-southeast-1.amazonaws.com/eks/vpc-resource-controller:0.2.1
にはこの問題がありたす。

最埌たで読んでいただいた皆さん、実装前に本番環境で䜿甚するすべおのものをテストしおください。

出所 habr.com

コメントを远加したす