よく「クラウドのオペレーティングシステム」と言われるKubernetesは、コンテナ化されたアプリケーションとサービスのクラスタを管理するためのオープンソースプラットフォームです。GoogleのエンジニアであるJoe Beda、Brendan Burns、Craig McLuckieによって2014年に開発され、その後すぐにオープンソース化されたKubernetesは、すぐに独立した繁栄するクラウドネイティブ・エコシステムになりました。現在、Kubernetes(古代ギリシャ語で「操舵手」または「パイロット」を意味する)は、Linux Foundationの一部門であるCloud Native Computing Foundation(CNCF)により管理されています。
Kubernetesは、CNCFの最初の卒業プロジェクトであり、歴史上最も急速に成長しているオープンソースプロジェクトの1つになりました。Kubernetesには現在2,300人以上の貢献者がおり、フォーチュン100の半分を含む大小の企業に広く採用されています。
最初に、Kubernetesに関連する主要な用語は次のとおりです。Kubernetes標準化用語集ページでは、さらに包括的なリストが提供されています。よく使用されるkubectlコマンドおよびフラグのリストを含むKubernetes Cheat Sheetを活用することもできます。
Kubernetesで管理されるコンテナ化されたアプリケーションの実行に使用されるノードと呼ばれる一連のマシンです。
仮想マシンまたは物理マシンです。クラスタは1つのマスター・ノードと複数のワーカー・ノードで構成されます。
ソフトウェアとその依存関係を含むイメージです。
単一のコンテナまたはKubernetesクラスタで実行されているコンテナのセットです。
ポッドで表されるレプリケーションされたアプリケーションを管理するオブジェクトです。ポッドはクラスタのノードに導入されます。
指定した数のポッド・レプリカが同時に実行されていることを確認します。
一連のポッドで表されるアプリケーションにアクセスする方法について説明します。通常、サービスは、ポートとロード・バランサを記述し、クラスタへの内部および外部アクセスの制御に使用できます。
KubeConは、Kubernetes開発者とユーザーのための年次会議です。2015年に500人が参加した最初のKubeCon以来、KubeConはクラウドネイティブ・コミュニティにとって重要なイベントに成長しました。2019年、カリフォルニア州サンディエゴ版のKubeConには、Kubernetesクラウド・オーケストレーションプラットフォームを中心に開花したオープンソースエコシステムを祝う12,000人の開発者とサイト信頼性エンジニアが参加しました。
開発者がさまざまなクラウド、テスト環境、ノートパソコン、デバイス、オペレーティングシステム、およびプラットフォームを備えたさまざまなコンピューティング環境にソフトウェアを導入することが増えるにつれて、ソフトウェアを確実に実行するという問題が最も重要になります。コンテナが登場する場所です。アプリケーションはランタイム環境全体にバンドルされます。そういった意味では、コンテナは、適切なライブラリ、依存関係、およびオペレーティングシステムを含めることでアプリケーションを実行できる「バブル」を提供するため、仮想化の一形態です。ただし、コンテナにはアプリケーションに必要なリソースのみが含まれ、それ以上は含まれないため、コンテナは仮想マシンより小さくなります。
Linuxのコンテナは2008年から存在していましたが、それらを有名にするために2013年、Dockerコンテナが登場しました。同様に、コンテナ化されたアプリケーション(実行に必要なすべてのものを含むアプリケーション)導入への関心の高まりによって、最終的に、数千のコンテナの管理という新しい問題が発生しました。Kubernetesは、コンテナのライフサイクルを自動的に調整し、ホストしているインフラストラクチャ全体にコンテナを分散します。Kubernetesは、需要に応じてリソースをスケールアップまたはスケールダウンします。コンテナの状態をプロビジョニング、スケジュール、削除、および監視します。
Kubernetesの主要なコンポーネントは、クラスタ、ノード、およびコントロールプレーンです。クラスタにはノードが含まれます。各ノードは、少なくとも1台のワーカーマシンのセットで構成されます。ノードは、導入されたアプリケーションの要素を含むポッドをホストします。コントロールプレーンは、クラスタ内のノードとポッドを管理し、多くの場合、多くのコンピューターにまたがって、高可用性を実現します。
コントロールプレーンには次のものが含まれます。
ノードコンポーネントには次のものが含まれます。
コンテナを使用すると、アプリケーションが実行に必要なすべてのものにバンドルされていることを確信できます。ただし、多くの場合マイクロサービスを含むコンテナを追加すると、Kubernetesを使用してコンテナを自動的に管理および配布できます。
Kubernetesを使用すると、組織は次のことが実現します。
自動的にスケーリング | 需要に応じて、導入を上下にダイヤルします。 |
サービスの詳細 | DNSまたはIPアドレスによってコンテナ化されたサービスを検索します。 |
負荷分散 | ネットワーク・トラフィックを分散して、導入を安定させます。 |
ストレージ管理 | ローカルまたはクラウド・ストレージを選択します。 |
管理バージョン | 実行するコンテナの種類と、新しいイメージまたはコンテナリソースを使用して置き換えるコンテナを選択します。 |
セキュリティの維持 | 特定のコンテナイメージに関連するパスワード、OAuthトークン、SSHキーをセキュアに更新します。 |
Kubernetesは構成可能性が高く 、すべてのタイプのアプリケーションをサポートできますが、理解して使用するのは難しい場合があります。多くのCNCFメンバーがコメントしているように、Kubernetesは特定のワークロードに対して常に正しいソリューションであるとは限りません。このため、Kubernetesエコシステムには、特定のワークロードの問題を解決するために組織が作成した、関連する多くのクラウドネイティブツールが含まれています。
Kubernetesは、ソース・コードではなくコンテナを導入し、アプリケーションを構築しません。ロギング、ミドルウェア、監視、構成、CI/CD、およびその他の多くの実稼働アクティビティには、追加のツールが必要です。とはいえ、Kubernetesは拡張可能であり、JETプレーンから機械学習まで、さまざまなユースケースに適していることが証明されています。実際、オラクル、Google、Amazon Web Servicesなどのクラウド・ベンダーは、Kubernetes独自の拡張性を使用して、複雑性を軽減し、開発者の生産性を向上させるサービスであるマネージドKubernetesを構築しています。
Cloud Infrastructure Kubernetes Engineは、コンテナ化されたアプリケーションをクラウドに導入するために使用できる、開発者にとって使いやすいマネージド・サービスです。開発チームがクラウドネイティブ・アプリケーションを確実に構築、導入、管理したい場合は、Kubernetes Engineをご使用ください。アプリケーションに必要なコンピューティング・リソースを指定すると、Kubernetes Engineは既存のクラウド・インフラストラクチャ・テナント内でリソースをプロビジョニングします。
Kubernetesマネージド・サービスを使用する必要はありませんが、Cloud Infrastructure Kubernetesエンジンは、Oracle Cloud Infrastructureの制御、セキュリティ、および予測可能なパフォーマンスで高可用性クラスタを簡単に実行する方法です。Kubernetes Engineは、ードとしてベアメタルマシンと仮想マシンの両方をサポートし、CNCFにより適合と認定されます。また、すべてのKubernetesアップデートを取得し、追加の作業を行うことなくCNCFエコシステムとの互換性を維持します。
オラクルは、成熟度レベルごとに編成された数十のソフトウェア開発プロジェクトをサポートするオープンソースコミュニティであるCloud Native Computing Foundation(CNCF)のプラチナメンバーです。卒業プロジェクト(Kubernetes、プロメテウス、Envoy、CoreDNS、コンテナ、Fluentd、Jaeger、Vitess、TUF、およびHelm)はすべてがクラウドネイティブ開発の側面にとって非常に貴重であることが証明されています。
Kubernetesには、その周りに生まれたプロジェクトをサポートする大規模なエコシステムがあります。ランドスケープが非常に困難になる可能性があり、簡単な質問への答えを探すことは抜け出せない状況に陥ることにつながる可能性があります。しかし、このパスの最初の数ステップは単純で、そこから、ニーズに応じて高度な概念を探索できます。方法: