ソフトウェア エンジニアの観点から Kubernetes について話しましょう

ソフトウェア エンジニアとして、私たちは K8 に精通している必要があります。K8 は DevOps に少し似ていますが、舞台裏で何が起こっているかをより深く理解できるようになり、展開作業に対する関連性と責任が高まります。この記事では、ソフトウェア エンジニアの観点から Kubernetes (K8s) について説明します。開発者が Kubernetes の専門知識を向上させ、この最先端のテクノロジをより自信を持って活用できるように、その動機、原則、コア コンポーネントを紹介します。
 

背景

Kubernetes について話す前に、まずコンテナとは何かを理解しましょう
 

次のようなシナリオを考えると、コンテナの概念が明確になります。開発者が特定のニーズを満たすコードの作成を完了したら、次のステップはそれをパッケージ化して別のホストにシームレスにインストールすることです。これにより、顧客が簡単にインストールおよびインストールできるようになります。その恩恵を享受してください。パッケージ化して別のホストにインストールするにはどうすればよいですか? 通常、バイナリ コード、依存ライブラリ、さまざまなオペレーティング システムなど、多くの依存関係があり、それらをすべて 1 つのパッケージ (いわゆる「コンテナ」) にパッケージ化する必要があります。
 

言い換えれば、コードをすべての依存関係とともにコンテナーに配置し、それをリモート マシン上で簡単に実行できます。つまり、エンジニアリング用語で「サービスをデプロイする」ことができます。
 

導入の課題

私たちのサービスがコンテナを使用して出荷されることがわかったので、次のような主な疑問が生じます。

  • コンテナ サービスがクラッシュしないことはどのようにして確認できるのでしょうか? 1 つのコンテナがダウンしても、別のコンテナが起動するようにしたいと考えています。

  • このコンテナに実行するのに十分なリソースがあることを確認するにはどうすればよいですか? もしかしたら、実際に必要な以上のリソースを消費してしまう可能性があります。

  • バージョンのデプロイメントをどのように管理すればよいでしょうか。つまり、コードをアップグレードするときにダウンタイムなしで実行できるということです。サービスの高可用性を確保したいと考えています。

  • コンテナ同士が通信できるようにするにはどうすればよいでしょうか?

  • リクエストの増加または減少に応じて、どのようにスケールアップまたはスケールダウンすればよいでしょうか?
     

AppsFlyer は、K8s を採用する前からこれらの問題に直面していましたが、強力なプラットフォーム チームを持つ企業として、社内実装を通じてそれらの問題を解決しました。たとえば、サービスのライフサイクルを管理するために、ヘルスチェック API に GET リクエストを送信し続けることでサービスが常に正常に実行されるようにする「Medic」というプロセスを作成しました。
 

もう 1 つの例は、ほとんどのサービスが、 Docker コンテナとサービスのデプロイと管理用の社内ツール (「Santa」) を介してec2 インスタンスにデプロイされていることです。これは他のサービスと共有されないため、リソース、時間、そしてより重要なことにお金の無駄になります。
 

K8s ソリューション

上記からわかるように、Kubernetes は、私が述べた課題を解決するために実装されました。
 

Kubernetes の定義は、「コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープン ソース システムです。」言い換えれば、Kubernetes はクラスタを適切に管理するためのコンテナ オーケストレーション システムを提供し、デプロイ、管理が可能になります。リソースとスケールアプリケーション。K8 は私たちのコンテナを包み、私たちのために船を操縦します。
 

K8s を使用し、上記の課題を解決することで得られた利点の一部を以下に示します。

  • クラッシュ時のコンテナの自己修復– Kubernetes はヘルスチェックメカニズムを提供します。これは、サービスをサンプリングするために検査 API を実装する必要がなくなったことを意味します。

  • アプリケーション コンテナの自動配布とスケジューリングにより、ノード リソースを効率的に利用できます。ノード インスタンスを複数のアプリケーションで共有することで、リソースを賢明かつ効率的に利用します。

  • ダウンタイムなしの自動ロールアウトとロールバック

  • サービス検出と負荷分散は、コンテナー間の通信に役立ちます。

  • 水平スケーリングは、開発者が低負荷でも高負荷でもアプリケーションを同時に使用できるようにすることで、アプリケーションのパフォーマンスを向上させます。
     

要約すると、Kubernetes はコンテナ化されたアプリケーションを大規模に管理するための最適なソリューションです。Kubernetes は、強力なコンポーネントと自動化機能により、アプリケーションのライフサイクルの展開、スケーリング、管理を簡素化します。Kubernetes は、 EC2 インスタンス上で Docker を直接使用する場合に比べて時間と労力を節約し、本番環境でアプリケーションを管理するための基本機能を提供します。
 

最も重要なことは、Kubernetes は企業のコストを節約することですKubernetes はインフラストラクチャの管理を自動化することで、手動介入や社内ツールの必要性を減らし、前述したように運用コストの大幅な削減につながる可能性があります。さらに、Kubernetes はリソース使用率の最適化に役立ち、同じハードウェア上でより多くのアプリケーションを実行できるようになり、コストを節約できます。
 

すべての開発者が知っておくべき K8 の基本コンポーネント


 

Kubernetes のコア コンポーネントは、コントロール プレーン コンポーネントとノードという2 つの大きなカテゴリに分類されます。これらの高レベルのコンポーネントを見てみましょう。
 

APIサーバー

API サーバーはコントロール プレーンのコア コンポーネントであり、Kubernetes API の公開と API リクエストの処理を担当します。これは、クラスター内の他のコンポーネント (kubectl コマンド ライン ツールや Kubernetes パネルなど) がクラスターと対話する主な方法です。
 

スケジューラー

スケジューラは、利用可能なリソースと指定された制限とルールに基づいて、クラスター内のノードにポッドをスケジュールする役割を果たします。これにより、リソースの使用率が最大化され、リソースの競合が軽減される方法でポッドがノードに配置されるようになります。
 

コントロールマネージャー

コントロール マネージャーは、コントロール プレーン上で実行されるプロセスであり、クラスターの状態を管理し、クラスターが望ましい状態に準拠していることを確認する責任があります。これはいくつかの異なるコントローラーで構成されており、それぞれがクラスター管理の特定の側面を担当します (クラスター内のアプリケーションのデプロイメントを管理するデプロイメント・コントローラーなど)。
 

クラウドコントロールマネージャー

Cloud Control Manager は、クラウド プラットフォームで Kubernetes を実行するときに使用される特別なコンポーネントです。Kubernetes コントロール プレーンとクラウド プロバイダーの API を統合し、クラスターがクラウドの特定の機能とリソースを使用できるようにします。
 

etcd

etcd は、クラスターの現在の状態と望ましい状態を含む、Kubernetes クラスターの構成データを保存するために使用される分散キー/値ストアです。これは、クラスター内のポッド、サービス、その他のオブジェクトに関する情報など、クラスター内のすべてのノードにわたって永続化する必要があるデータを保存するために使用されます。
 

キュベレット

Kubelet はクラスター内の各ノードで実行されるデーモンで、そのノード上のポッドの管理を担当します。Kubelet は、ポッドの開始と停止、ポッドの状態の監視、必要に応じたポッドの再起動などのタスクを担当します。Kubernetes コントロール プレーンと通信して、実行するポッドとその管理方法に関する指示を受け取り、Docker などのコンテナ ランタイムと通信してコンテナを実際に実行します。
 

代理でした

Kube-proxy はクラスター内の各ノードで実行されるデーモンで、クラスターの仮想ネットワーク インフラストラクチャの実装を担当します。Kube-proxy は、ネットワーク プログラミング技術を使用して、クラスター ネットワーク構成で定義されたルールに基づいてネットワーク トラフィックを適切なポッドまたはサービスに転送します。Kube プロキシによって実行される主なタスクには、負荷分散、サービス検出、ネットワーク ポリシーの適用などがあります。
 

要約する

開発者として、私たちの直接の責任に直接関係しているのか、別の DevOps チームによって管理されているのかにかかわらず、私たちが遭遇するテクノロジーを完全に理解することが重要です。この記事は、K8 の世界をより深く理解するための完璧な出発点として機能します。
 

K8s は学習曲線が急で、開発者にとっては扱いにくいものです。Walrus は、プラットフォーム エンジニアリングの概念に基づいて構築された新世代のアプリケーション管理プラットフォームであり、研究開発と運用保守の懸念事項を分離し、柔軟かつ強力なアプリケーションと環境の導入管理機能を提供し、インフラストラクチャの上位レベルの抽象化を保護することで、研究開発担当者の負担を軽減します。基盤となるインフラストラクチャを理解していなくても作業可能。技術的な詳細を必要とせずにセルフサービスでアプリケーションを構築、展開、実行できるため、開発者の認知的負荷が軽減されますWalrus を使用すると、クラウド ネイティブ機能とベスト プラクティスを非コンテナ化環境に拡張し、統合されたオーケストレーションとあらゆるアプリケーション フォームのデプロイメントをサポートし、インフラストラクチャ使用の複雑さを軽減し、R&D チームと運用保守チームに使いやすく一貫したアプリケーションを提供します。シームレスで協調的なソフトウェア配信プロセスを構築するための管理と展開の経験。以下のプロジェクト リンクをブラウザにコピーして、Walrus を今すぐ試してください。
 

オープンソースのアドレス: github.com/seal-io/walrus
 

参考リンク
https://medium.com/appsflyerengineering/hi-developer-meet-kubernetes-8652bdc210d9

おすすめ

転載: blog.csdn.net/SEAL_Security/article/details/132754441