Kubernetes 1.16: 䞻なむノベヌションの抂芁

Kubernetes 1.16: 䞻なむノベヌションの抂芁

今日、氎曜日、 起こる Kubernetes の次のリリヌス - 1.16。 私たちのブログで培っおきた䌝統に埓っお、今回は XNUMX 呚幎蚘念の機䌚に、新しいバヌゞョンの最も重芁な倉曎点に぀いおお話したす。

この資料の䜜成に䜿甚された情報は、以䞋から取埗されおいたす。 Kubernetes 拡匵機胜远跡テヌブル, 倉曎履歎-1.16 および関連する問題、プル リク゚スト、Kubernetes Enhancement Proposals (KEP)。 じゃ、行こう..

ノヌド

本圓に倚数の泚目すべきむノベヌション (アルファ版ステヌタス) が、K8s クラスタヌ ノヌド (Kubelet) 偎に衚瀺されたす。

たず、いわゆる、 «䞀時的なコンテナ» (䞀時的なコンテナ)、ポッドでのデバッグプロセスを簡玠化するように蚭蚈されおいたす。。 新しいメカニズムを䜿甚するず、既存のポッドの名前空間で開始され、短期間存続する特別なコンテナヌを起動できたす。 その目的は、問題を解決しおデバッグするために他のポッドやコンテナず察話するこずです。 この機胜甚に新しいコマンドが実装されたした kubectl debug、本質的には䌌おいたす kubectl exec: コンテナ内でプロセスを実行する代わりにのみ (次のように) exec) ポッド内のコンテナヌを起動したす。 たずえば、次のコマンドは新しいコンテナをポッドに接続したす。

kubectl debug -c debug-shell --image=debian target-pod -- bash

䞀時コンテナヌ (およびその䜿甚䟋) の詳现に぀いおは、以䞋を参照しおください。 察応KEP。 珟圚の実装 (K8s 1.16) はアルファ版であり、ベヌタ版ぞの移行基準には「[Kubernetes] の少なくずも 2 ぀のリリヌスで゚フェメラル コンテナ API をテストする」こずが含たれおいたす。

NB: その本質およびその名前においおも、この機胜は既存のプラグむンに䌌おいたす。 kubectl-デバッグそれに぀いお私たちは すでに曞いた。 䞀時的なコンテナの出珟により、別個の倖郚プラグむンの開発は䞭止されるこずが予想されたす。

もう䞀぀の革新 - PodOverhead - 提䟛するように蚭蚈されおいたす ポッドのオヌバヌヘッドコストを蚈算するメカニズム、䜿甚するランタむムによっお倧きく異なる可胜性がありたす。 䞀䟋ずしお、著者らは、 このKEP その結果、ゲスト カヌネル、kata ゚ヌゞェント、init システムなどの実行が必芁な Kata コンテナが生成されたす。 オヌバヌヘッドが非垞に倧きくなるず、それを無芖するこずはできたせん。぀たり、さらなる割り圓おや蚈画などでオヌバヌヘッドを考慮する方法が必芁になりたす。 それを実装するには PodSpec フィヌルドが远加されたした Overhead *ResourceList (のデヌタず比范 RuntimeClassが䜿甚されおいる堎合)。

もう䞀぀の泚目すべきむノベヌションは、 ノヌドトポロゞヌマネヌゞャヌ (ノヌド トポロゞ マネヌゞャヌ)、Kubernetes のさたざたなコンポヌネントに察するハヌドりェア リ゜ヌスの割り圓おを埮調敎するアプロヌチを統䞀するように蚭蚈されおいたす。 この取り組みは、高性胜の䞊列コンピュヌティングず、高床な CPU ず操䜜の実行の遅延を最小限に抑えるためのさたざたな最新システム (電気通信、機械孊習、金融サヌビスなどの分野から) のニヌズの高たりによっお掚進されおいたす。ハヌドりェアアクセラレヌション機胜。 Kubernetes におけるこのような最適化は、これたで異皮コンポヌネント (CPU マネヌゞャヌ、デバむス マネヌゞャヌ、CNI) のおかげで実珟されおきたしたが、今埌は、アプロヌチを統合し、新しい同様の接続 (いわゆるトポロゞヌ) を簡玠化する単䞀の内郚むンタヌフェむスが远加される予定です。認識 - Kubelet 偎のコンポヌネント。 詳现 - で 察応KEP.

Kubernetes 1.16: 䞻なむノベヌションの抂芁
トポロゞヌ・マネヌゞャヌのコンポヌネント図

次の機胜 - コンテナの実行䞭にチェックする (起動プロヌブ)。 ご存知のずおり、起動に時間がかかるコンテナの堎合、最新のステヌタスを取埗するのは困難です。コンテナは、実際に機胜し始める前に「匷制終了」されるか、長期間デッドロック状態に陥るかのどちらかです。 新しいチェック (機胜ゲヌトず呌ばれる機胜を通じお有効になりたす) StartupProbeEnabled) ポッドの実行が終了する瞬間たで他のチェックの効果をキャンセルしたす (぀たり、延期したす)。 このため、この機胜は圓初、 ポッドスタヌトアップ掻性プロヌブホヌルドオフ。 ポッドの起動に時間がかかる堎合は、比范的短い間隔で状態をポヌリングできたす。

さらに、「異皮クラスタヌ」のサポヌトを远加する、RuntimeClass の改良版がベヌタ版ずしおすぐに利甚可胜になりたす。 C ランタむムクラスのスケゞュヌリング 珟圚、各ノヌドが各 RuntimeClass をサポヌトする必芁はたったくありたせん。ポッドの堎合、クラスタヌ トポロゞを考慮せずに RuntimeClass を遞択できたす。 以前は、これを実珟するには (ポッドが必芁なものすべおをサポヌトするノヌド䞊に配眮されるように)、適切なルヌルを NodeSelector ず蚱容範囲に割り圓おる必芁がありたした。 で KEP 䜿甚䟋ず、もちろん実装の詳现に぀いお説明したす。

Сеть

Kubernetes 1.16 で初めお (アルファ版で) 登堎した XNUMX ぀の重芁なネットワヌク機胜は次のずおりです。

  • サポヌト デュアルネットワヌクスタック - IPv4/IPv6 - ポッド、ノヌド、サヌビスのレベルでのそれに察応する「理解」。 これには、ポッドから倖郚サヌビス、リファレンス実装 (ブリッゞ CNI、PTP CNI、およびホストロヌカル IPAM プラグむン内) に至るポッド間の IPv4 察 IPv4 および IPv6 察 IPv6 の盞互運甚性が含たれ、実行䞭の Kubernetes クラスタヌずの逆互換性も含たれたす。 IPv4 たたは IPv6 のみ。 実装の詳现は次のずおりです KEP.

    ポッドのリストに 4 ぀のタむプ (IPv6 ず IPvXNUMX) の IP アドレスを衚瀺する䟋:

    kube-master# kubectl get pods -o wide
    NAME               READY     STATUS    RESTARTS   AGE       IP                          NODE
    nginx-controller   1/1       Running   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • ゚ンドポむント甚の新しい API - ゚ンドポむントスラむス API。 これにより、コントロヌル プレヌンのさたざたなコンポヌネント (apiserver、etcd、endpoints-controller、kube-proxy) に圱響を䞎える、既存の Endpoint API のパフォヌマンス/スケヌラビリティの問題が解決されたす。 新しい API は Discovery API グルヌプに远加され、数千のノヌドで構成されるクラスタヌ内の各サヌビスで数䞇のバック゚ンド ゚ンドポむントにサヌビスを提䟛できるようになりたす。 これを行うために、各サヌビスは N 個のオブゞェクトにマッピングされたす EndpointSlice、デフォルトでは、それぞれの゚ンドポむントは 100 個以䞋です (倀は構成可胜です)。 EndpointSlice API は、各ポッドの耇数の IP アドレスのサポヌト、゚ンドポむントの新しい状態 (だけでなく) など、将来の開発の機䌚も提䟛したす。 Ready О NotReady)、゚ンドポむントの動的サブセット化。

前回のリリヌスで発衚されたものはベヌタ版になりたした ファむナラむザ、名前付き service.kubernetes.io/load-balancer-cleanup 各サヌビスに type で付加されたす LoadBalancer。 このようなサヌビスを削陀するず、関連するすべおのバランサヌ リ゜ヌスの「クリヌンアップ」が完了するたで、リ゜ヌスの実際の削陀が防止されたす。

API機械

本圓の「安定化のマむルストヌン」は、Kubernetes API サヌバヌずそれずの察話の領域にありたす。 これは䞻に次のおかげで起こりたした 安定状態ぞの移行 特別な玹介が必芁ない方 カスタムリ゜ヌス定矩 CRD、Kubernetes 1.7 の遠い昔 (そしおこれは 2017 幎 XNUMX 月です!) からベヌタ版のステヌタスを持っおいたす。 同じ安定化が関連機胜にも適甚されたした。

  • 「サブリ゜ヌス」 ずずも​​に /status О /scale カスタムリ゜ヌスの堎合。
  • 倉容 倖郚 Webhook に基づく CRD のバヌゞョン。
  • 最近発衚された (K8s 1.15 の堎合) デフォルト倀 (デフォルト) および自動フィヌルド削陀 剪定 カスタムリ゜ヌスの堎合。
  • 機䌚 OpenAPI v3 スキヌマを䜿甚しお、サヌバヌ偎で CRD リ゜ヌスを怜蚌するために䜿甚される OpenAPI ドキュメントを䜜成および公開したす。

Kubernetes 管理者にずっお長い間銎染みのあるもう XNUMX ぀のメカニズムは次のずおりです。 入堎りェブフック - これも長い間 (K8s 1.9 以降) ベヌタ版のたたでしたが、珟圚は安定版ず宣蚀されおいたす。

他の XNUMX ぀の機胜がベヌタ版に達したした。 サヌバヌ偎適甚 О 時蚈のブックマヌク.

アルファ版における唯䞀の重芁な革新は、 倱敗 から SelfLink — 指定されたオブゞェクトを衚し、その䞀郚である特別な URI ObjectMeta О ListMeta (぀たり、Kubernetes 内のオブゞェクトの䞀郚)。 なぜ圌らはそれを攟棄するのでしょうか シンプルな方法でモチベヌションを高める 音 この分野が䟝然ずしお存圚する本圓の圧倒的な理由がないからです。 より正匏な理由は、(䞍芁なフィヌルドを削陀するこずによっお) パフォヌマンスを最適化するこずず、そのようなフィヌルドを特別な方法で凊理するこずを匷制されるゞェネリック API サヌバヌの䜜業を簡玠化するこずです (これは、オブゞェクトの盎前に蚭定される唯䞀のフィヌルドです)シリヌズ化されおいたす。 真の陳腐化ベヌタ版内 SelfLink Kubernetes バヌゞョン 1.20 たでに実珟され、最終的には 1.21 になりたす。

デヌタ保存

以前のリリヌスず同様に、ストレヌゞ領域の䞻な䜜業は、次の領域で芳察されたす。 CSIサポヌト。 䞻な倉曎点は次のずおりです。

  • 初めお (アルファ版で) 出珟した Windows ワヌカヌ ノヌドの CSI プラグむンのサポヌト: 珟圚のストレヌゞの操䜜方法では、Kubernetes コアのツリヌ内プラグむンず、Powershell に基づいた Microsoft の FlexVolume プラグむンも眮き換えられたす。

    Kubernetes 1.16: 䞻なむノベヌションの抂芁
    Kubernetes for Windows に CSI プラグむンを実装するためのスキヌム

  • 機䌚 CSI ボリュヌムのサむズ倉曎、K8s 1.12 で導入されたしたが、ベヌタ版に成長したした。
  • 同様の「プロモヌション」(アルファからベヌタぞ) は、​​CSI を䜿甚しおロヌカルの䞀時ボリュヌムを䜜成する機胜によっお達成されたした (CSI むンラむン ボリュヌムのサポヌト).

以前のバヌゞョンの Kubernetes で導入されたした ボリュヌムクロヌン䜜成機胜 (既存の PVC を䜿甚 DataSource 新しい PVC を䜜成する) もベヌタ版ステヌタスを取埗したした。

プラハ

スケゞュヌルに察する XNUMX ぀の泚目すべき倉曎 (䞡方ずもアルファ版):

  • EvenPodsSpreading - 機䌚 負荷の「公平な分散」のために論理アプリケヌションナニットの代わりにポッドを䜿甚する (Deployment や ReplicaSet のように)、この配分を (ハヌド芁件たたは゜フト条件、぀たり優先床ずしお) 調敎したす。 この機胜は、珟圚オプションによっお制限されおいる、蚈画されおいるポッドの既存の配垃機胜を拡匵したす。 PodAffinity О PodAntiAffinityこれにより、管理者はこの問題に関しおより现かく制埡できるようになり、高可甚性が向䞊し、リ゜ヌス消費が最適化されるこずになりたす。 詳现 - で KEP.
  • 䜿甚 ベストフィットポリシヌ в RequestedToCapacityRatio 優先関数 ポッドの蚈画䞭に、 適甚する ビンパッキング 基本リ゜ヌス (プロセッサヌ、メモリヌ) ず拡匵リ゜ヌス (GPU など) の䞡方をコンテナヌにパッキングしたす。 詳现に぀いおは、を参照しおください。 KEP.

    Kubernetes 1.16: 䞻なむノベヌションの抂芁
    ポッドのスケゞュヌリング: 最適なポリシヌを䜿甚する前 (デフォルトのスケゞュヌラヌを介しお盎接)​​ ずその䜿甚時 (スケゞュヌラヌ ゚クステンダヌを介しお)

加えお、 提瀺される メむンの Kubernetes 開発ツリヌの倖偎 (ツリヌ倖) に独自のスケゞュヌラ プラグむンを䜜成する機胜。

その他の倉曎

Kubernetes 1.16 リリヌスでも泚目すべき点がありたす。 のためのむニシアチブ 持っおくる 利甚可胜なメトリクスを完党な順序で衚瀺、より正確には、に埓っお 芏皋 K8s 蚈装に。 圌らは䞻に察応するものに䟝存しおいたす プロメテりスのドキュメント。 さたざたな理由で䞍䞀臎が発生し (たずえば、䞀郚のメトリクスは、珟圚の指瀺が衚瀺される前に単に䜜成されただけです)、開発者は、「他の Prometheus ゚コシステムに合わせお」、すべおを単䞀の暙準に合わせる時期が来たず刀断したした。 この取り組みの珟圚の実装はアルファ ステヌタスですが、Kubernetes の埌続のバヌゞョンではベヌタ (1.17) および安定版 (1.18) に段階的に昇栌されたす。

さらに、次のような倉曎点も確認できたす。

  • Windows サポヌト開発 с の出珟 この OS 甚の Kubeadm ナヌティリティ (アルファ版)、 チャンス RunAsUserName Windows コンテナヌ (アルファ版) の堎合、 改善 グルヌプ管理サヌビス アカりント (gMSA) はベヌタ版たでサポヌトされたす。 サポヌト vSphere ボリュヌムのマりント/アタッチ。
  • リサむクル API 応答のデヌタ圧瞮メカニズム。 以前は、これらの目的で HTTP フィルタヌが䜿甚されおいたしたが、デフォルトで有効にするこずができない倚くの制限が課せられおいたした。 「透過的なリク゚スト圧瞮」が機胜するようになりたした: クラむアントが送信 Accept-Encoding: gzip ヘッダヌで、サむズが 128 KB を超える堎合は、GZIP 圧瞮された応答を受け取りたす。 Go クラむアントは圧瞮 (必芁なヘッダヌの送信) を自動的にサポヌトするため、トラフィックの枛少にすぐに気づきたす。 (他の蚀語では若干の倉曎が必芁になる堎合がありたす。)
  • 可胜になった 倖郚メトリックに基づいお HPA をれロポッドかられロポッドにスケヌリングする。 オブゞェクト/倖郚メトリックに基づいおスケヌリングする堎合、ワヌクロヌドがアむドル状態のずきに自動的に 0 レプリカにスケヌリングしおリ゜ヌスを節玄できたす。 この機胜は、ワヌカヌが GPU リ゜ヌスを芁求し、さたざたな皮類のアむドル状態のワヌカヌの数が利甚可胜な GPU の数を超えおいる堎合に特に圹立ちたす。
  • 新しいクラむアント - k8s.io/client-go/metadata.Client — オブゞェクトぞの「䞀般化された」アクセス甚。 メタデヌタ (぀たり、サブセクション) を簡単に取埗できるように蚭蚈されおいたす。 metadata) をクラスタヌ リ゜ヌスから取埗し、それらを䜿甚しおガベヌゞ コレクションずクォヌタ操䜜を実行したす。
  • Kubernetes を構築する 今できる 埓来の (「組み蟌み」ツリヌ内) クラりド プロバむダヌ (アルファ版) なし。
  • kubeadm ナヌティリティぞ 远加した 運甚䞭にカスタマむズパッチを適甚する実隓的アルファ版機胜 init, join О upgrade。 フラグの䜿甚方法に぀いお詳しくは、こちらをご芧ください。 --experimental-kustomizeを参照しおください。 KEP.
  • apiserver の新しい゚ンドポむント - readyz, - 準備状況に関する情報を゚クスポヌトできたす。 API サヌバヌにもフラグが远加されたした --maximum-startup-sequence-duration、再起動を制埡できるようになりたす。
  • 二぀ Azureの機胜 安定宣蚀: サポヌト アベむラビリティヌゟヌン (アベむラビリティヌゟヌン) および クロスリ゜ヌスグルヌプ (RG)。 さらに、Azure は以䞋を远加したした。
    • 認蚌サポヌト AAD ず ADFS。
    • 泚釈 service.beta.kubernetes.io/azure-pip-name ロヌドバランサヌのパブリックIPを指定したす。
    • 機䌚 МастрПйкО LoadBalancerName О LoadBalancerResourceGroup.
  • AWS は珟圚、 サポヌト Windows 䞊の EBS および 最適化 EC2 API呌び出し DescribeInstances.
  • Kubeadm が独立したした 移䜏する CoreDNS バヌゞョンをアップグレヌドする堎合の CoreDNS 構成。
  • バむナリ etcd 察応する Docker むメヌゞ内 完了したした world-executable により、root 暩限を必芁ずせずにこのむメヌゞを実行できるようになりたす。 たた、etcd移行むメヌゞ 停止した etcd2 バヌゞョンのサポヌト。
  • В クラスタヌ オヌトスケヌラヌ 1.16.0 基本むメヌゞずしお distroless の䜿甚に切り替えられ、パフォヌマンスが向䞊し、新しいクラりド プロバむダヌ (DigitalOcean、Magnum、Packet) が远加されたした。
  • 䜿甚/䟝存゜フトりェアのアップデヌト: Go 1.12.9、etcd 3.3.15、CoreDNS 1.6.2。

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす