###導入###
| コンテナ化されたワークロードを実行するための Kubernetes プラットフォームは、クラウドネイティブ アプリケーションの開発およびデプロイ時に重要な役割を果たします。当然のことながら、クラウドネイティブ アプリケーションの開発と展開は非常に人気があります。迅速な導入とバグ修正や新機能の継続的な配信を可能にするプロセスには明らかな利点がありますが、鶏が先か卵が先かという問題については誰も話しません。これをどのように達成するかということです。クラウドネイティブ アプリケーションを最初から開発および保守するためのインフラストラクチャと開発プロセスを構築することは、簡単ではなく時間のかかる作業です。
|
Kubernetes は、コンテナ化されたワークロードを実行するための比較的新しいプラットフォームであり、これらの問題を解決します。もともと Google 内のプロジェクトであった Kubernetes は、2015 年に Cloud Native Computing Foundation に寄付され、世界中のオープンソース コミュニティから開発者を魅了しました。 Kubernetes は、Google の 15 年間にわたる運用環境および開発環境の運用経験に基づいて設計されています。オープンソースなので、誰でもダウンロードして使用でき、それがもたらす利点を実感できます。
では、なぜ Kubernetes にはこれほど大きな驚きがあるのでしょうか?これは、OpenStack のようなサービスとしてのインフラストラクチャ (IaaS) と、基盤となるランタイム実装がベンダーによって完全に制御される完全なサービスとしてのプラットフォーム (PaaS) のリソースの間で最適なバランスをとるものだと思います。 Kubernetes には、インフラストラクチャを管理するための抽象化と、ベアメタルの奥深くまでトラブルシューティングを行うためのツールと機能という 2 つの利点があります。
IaaS 対 PaaS
OpenStack は、ほとんどの場合、物理リソース (プロセッサ、ネットワーク、ストレージなど) のプールが割り当てられ、さまざまなユーザー間で共有される IaaS ソリューションとして分類されます。従来のハードウェアベースの仮想化を使用して、ユーザー間の分離を実現します。
OpenStack の REST API を使用すると、コードを使用してインフラストラクチャを自動作成できますが、ここに問題があります。 IaaS 製品はインフラストラクチャも輸出します。インフラストラクチャが作成された後は、そのインフラストラクチャをサポートおよび管理するためのサービス方法はあまりありませんでした。 OpenStack がサーバーや IP アドレスなどの基盤となるインフラストラクチャを生成する限り、それは管理上の優先事項になります。よく知られている結果は仮想マシン (VM) の急増ですが、ネットワーク、暗号化キー、ストレージ ボリュームでも同じことが起こります。このようにして、開発者はアプリケーションの構築と保守に費やす時間が短縮されます。
他のクラスターベースのソリューションと同様、Kubernetes は単一サーバーのレベルで動作し、水平スケーリングを可能にします。新しいサーバーを追加したり、新しいハードウェアへの負荷を即座にスケジュールしたりすることが簡単になります。同様に、サーバーが効果的に利用されていない場合やメンテナンスが必要な場合には、サーバーをクラスターから削除できます。 Kubernetes が自動的に処理できるその他のタスクには、ジョブのスケジューリング、ヘルス監視、高可用性の維持などのオーケストレーション アクティビティがあります。
ネットワーキングは、IaaS 環境で確実に調整することが難しいもう 1 つの分野です。 IP アドレスを介したマイクロサービス間の通信は難しい場合があります。 Kubernetes は、IP アドレス管理、ロード バランシング、サービス ディスカバリ、および DNS 名登録を実装して、クラスタ内に痛みのない透過的なネットワーキング環境を提供します。
導入向けの設計
アプリケーションを実行する環境を作成したら、デプロイは簡単です。アプリケーションを確実にデプロイすることは、言うは易く行うは難しですが、最も簡単な作業ではありません。他の環境に対する Kubernetes の大きな利点は、デプロイメントが第一級であることです。
アプリケーションは、別の Kubernetes コマンド ライン インターフェイス (CLI) コマンドを使用して記述し、クラスターにインストールできます。 Kubernetes は、初期デプロイメントから新しいバージョンのロールアウト、重要な機能が故障した場合のロールバックまで、アプリケーションのライフサイクル全体を可能にします。実行中のデプロイメントを一時停止したり再開したりすることもできます。導入システムを自分で構築する必要がなく、アプリケーション導入のための既製の組み込みツールとサポートがあることは、過小評価すべきではない利点です。 Kubernetes ユーザーは、アプリケーションのデプロイメントの車輪を再発明する必要も、それが困難な作業であると感じることもありません。
Kubernetes は、実行中のデプロイメントのステータスを監視することもできます。この機能は IaaS 環境でのデプロイメント プロセスと同じように記述することもできますが、これは非常に困難な作業であり、このようなケースは数多くあります。
DevOps向けに設計
Kubernetes アプリケーションの開発とデプロイの経験を積むにつれて、Google や他の先人たちと同じ道をたどることになります。マルチサービス アプリケーションの効果的な開発とトラブルシューティングに重要な Kubernetes 機能がいくつかあることがわかります。
まず第一に、ログまたは SSH (セキュア シェル) を介して実行中のサービスを簡単に検査できる Kubernetes の機能が非常に重要です。管理者は、コマンド ラインを 1 回呼び出すだけで、Kubernetes で実行されているサービスのログを検査できます。これは簡単なタスクのように聞こえるかもしれませんが、IaaS 環境では、すでに何らかの作業を行っている場合を除き、これは簡単ではありません。大規模なアプリケーションでは、多くの場合、ログの収集と分析を専門に行うハードウェアと人員が必要になります。 Kubernetes でのログインは、フル機能のログ記録およびメトリクス ソリューションに代わるものではありませんが、基本的なトラブルシューティングを提供するには十分です。
2 番目に、Kubernetes は組み込みのキー管理を提供します。独自のデプロイメント システムをゼロから開発したチームが知っているもう 1 つの問題は、パスワードや API トークンなどの機密データを仮想マシンに安全にデプロイするのが難しいことです。 Kubernetes はキー管理を第一級市民にすることで、チームが独自の安全ではない欠陥のあるキー配布システムを発明したり、デプロイメント スクリプトに認証情報をハードコーディングしたりすることを防ぎます。
最後に、Kubernetes には、スケーリング、負荷分散、アプリケーションの再起動を自動化する機能があります。繰り返しになりますが、これらは、IaaS またはベア メタルを使用する場合、開発者が自分で作成する必要がある機能です。 Kubernetes アプリケーションのスケーリングとヘルス チェックはサービス定義で宣言されており、Kubernetes は正しい数のインスタンスが正常に実行されていることを確認します。
要約
IaaS システムと PaaS システムの違いは大きく、PaaS を含めることで開発とデバッグの時間を大幅に節約できます。 Kubernetes は PaaS として、クラウドネイティブ アプリケーションの開発、デプロイ、デバッグに役立つ強力かつ効果的な機能を実装しています。そのアーキテクチャとデザインは数十年にわたる貴重な経験を反映しており、チームはその利点を無料で得ることができます。
###著者について:###
Tim Potter - Tim は、Hewlett Packard Enterprise のシニア ソフトウェア エンジニアです。彼は、Samba、Wireshark、OpenPegasus、Docker などのプロジェクトを含む、フリーのオープンソース ソフトウェアに 20 年近く取り組んできました。 Tim は、Docker、Kubernetes、およびその他のインフラストラクチャ関連のトピックについて https://elegantinfra Structure.com/ でブログを書いています。