Kubernetesとは

よく「クラウドのオペレーティングシステム」と言われる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 101 - 主要な用語

最初に、Kubernetesに関連する主要な用語は次のとおりです。Kubernetes標準化用語集ページでは、さらに包括的なリストが提供されています。よく使用されるkubectlコマンドおよびフラグのリストを含むKubernetes Cheat Sheetを活用することもできます。

クラスタ

Kubernetesで管理されるコンテナ化されたアプリケーションの実行に使用されるノードと呼ばれる一連のマシンです。

ノード

仮想マシンまたは物理マシンです。クラスタは1つのマスター・ノードと複数のワーカー・ノードで構成されます。

クラウド・コンテナ

ソフトウェアとその依存関係を含むイメージです。

ポッド

単一のコンテナまたはKubernetesクラスタで実行されているコンテナのセットです。

デプロイメント

ポッドで表されるレプリケーションされたアプリケーションを管理するオブジェクトです。ポッドはクラスタのノードに導入されます。

レプリカセット

指定した数のポッド・レプリカが同時に実行されていることを確認します。

サービス

一連のポッドで表されるアプリケーションにアクセスする方法について説明します。通常、サービスは、ポートとロード・バランサを記述し、クラスタへの内部および外部アクセスの制御に使用できます。

KubeConとは

KubeConは、Kubernetes開発者とユーザーのための年次会議です。2015年に500人が参加した最初のKubeCon以来、KubeConはクラウドネイティブ・コミュニティにとって重要なイベントに成長しました。2019年、カリフォルニア州サンディエゴ版のKubeConには、Kubernetesクラウド・オーケストレーションプラットフォームを中心に開花したオープンソースエコシステムを祝う12,000人の開発者とサイト信頼性エンジニアが参加しました。

Kubernetesコンテナとは

開発者がさまざまなクラウド、テスト環境、ノートパソコン、デバイス、オペレーティングシステム、およびプラットフォームを備えたさまざまなコンピューティング環境にソフトウェアを導入することが増えるにつれて、ソフトウェアを確実に実行するという問題が最も重要になります。コンテナが登場する場所です。アプリケーションはランタイム環境全体にバンドルされます。そういった意味では、コンテナは、適切なライブラリ、依存関係、およびオペレーティングシステムを含めることでアプリケーションを実行できる「バブル」を提供するため、仮想化の一形態です。ただし、コンテナにはアプリケーションに必要なリソースのみが含まれ、それ以上は含まれないため、コンテナは仮想マシンより小さくなります。

KubernetesとDocker

Linuxのコンテナは2008年から存在していましたが、それらを有名にするために2013年、Dockerコンテナが登場しました。同様に、コンテナ化されたアプリケーション(実行に必要なすべてのものを含むアプリケーション)導入への関心の高まりによって、最終的に、数千のコンテナの管理という新しい問題が発生しました。Kubernetesは、コンテナのライフサイクルを自動的に調整し、ホストしているインフラストラクチャ全体にコンテナを分散します。Kubernetesは、需要に応じてリソースをスケールアップまたはスケールダウンします。コンテナの状態をプロビジョニング、スケジュール、削除、および監視します。

Kubernetesのコンポーネントとは

Kubernetesの主要なコンポーネントは、クラスタ、ノード、およびコントロールプレーンです。クラスタにはノードが含まれます。各ノードは、少なくとも1台のワーカーマシンのセットで構成されます。ノードは、導入されたアプリケーションの要素を含むポッドをホストします。コントロールプレーンは、クラスタ内のノードとポッドを管理し、多くの場合、多くのコンピューターにまたがって、高可用性を実現します。

Kubernetesとは

コントロールプレーンには次のものが含まれます。

  • Kubernetes APIサーバー: Kubernetesを制御するためのプログラミング・インターフェイス(API)を提供
  • etcd: クラスタ・データのキー値のストア
  • Kubernetesスケジューラ: 新しいポッドを使用可能なノードと照合
  • Kubernetesコントローラー・マネージャー: 多くのプロセスを実行して、ノードの障害を管理し、レプリケーションを制御、エンドポイントによってサービスとポッドに参加し、アカウントとアクセストークンを制御
  • クラウド・コントローラー・マネージャー: 特定のインフラストラクチャルートや負荷分散などの側面に関する特定のクラウドプロバイダーからのAPIの管理を支援

ノードコンポーネントには次のものが含まれます。

  • kubelet: コンテナがポッドで実行されていることを確認するエージェント
  • Kubernetesネットワーク・プロキシ: ネットワーク・ルールのメンテナンス
  • Docker、コンテナ、または別のタイプのコンテナランタイム

Kubernetesの利点とは

コンテナを使用すると、アプリケーションが実行に必要なすべてのものにバンドルされていることを確信できます。ただし、多くの場合マイクロサービスを含むコンテナを追加すると、Kubernetesを使用してコンテナを自動的に管理および配布できます。

Kubernetesを使用すると、組織は次のことが実現します。

自動的にスケーリング 需要に応じて、導入を上下にダイヤルします。
サービスの詳細 DNSまたはIPアドレスによってコンテナ化されたサービスを検索します。
負荷分散 ネットワーク・トラフィックを分散して、導入を安定させます。
ストレージ管理 ローカルまたはクラウド・ストレージを選択します。
管理バージョン 実行するコンテナの種類と、新しいイメージまたはコンテナリソースを使用して置き換えるコンテナを選択します。
セキュリティの維持 特定のコンテナイメージに関連するパスワード、OAuthトークン、SSHキーをセキュアに更新します。

Kubernetesの使用における課題

Kubernetesは構成可能性が高く 、すべてのタイプのアプリケーションをサポートできますが、理解して使用するのは難しい場合があります。多くのCNCFメンバーがコメントしているように、Kubernetesは特定のワークロードに対して常に正しいソリューションであるとは限りません。このため、Kubernetesエコシステムには、特定のワークロードの問題を解決するために組織が作成した、関連する多くのクラウドネイティブツールが含まれています。

Kubernetesは、ソース・コードではなくコンテナを導入し、アプリケーションを構築しません。ロギング、ミドルウェア、監視、構成、CI/CD、およびその他の多くの実稼働アクティビティには、追加のツールが必要です。とはいえ、Kubernetesは拡張可能であり、JETプレーンから機械学習まで、さまざまなユースケースに適していることが証明されています。実際、オラクル、Google、Amazon Web Servicesなどのクラウド・ベンダーは、Kubernetes独自の拡張性を使用して、複雑性を軽減し、開発者の生産性を向上させるサービスであるマネージドKubernetesを構築しています。

マネージドKubernetesとは

クラウドネイティブとKubernetesによって、AgroScoutがどのようにフレーマーをサポートするかが変換されます。

Oracle Cloud InfrastructureContainer Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドに導入するために使用できる、開発者にとって使いやすいマネージド・サービスです。開発チームがクラウドネイティブ・アプリケーションを確実に構築、導入、管理したい場合は、Container Engine for Kubernetesを使用してください。アプリケーションに必要なコンピューティング・リソースを指定すると、Container Engine for Kubernetesは既存のクラウド・インフラストラクチャ・テナント内でリソースをプロビジョニングします。

Kubernetesマネージド・サービスを使用する必要はありませんが、Oracle Cloud Infrastructure Container Engine for Kubernetesは、Oracle Cloud Infrastructureの制御、セキュリティ、および予測可能なパフォーマンスで高可用性クラスタを簡単に実行する方法です。Container Engine for Kubernetesは、ノードとしてベアメタルマシンと仮想マシンの両方をサポートし、CNCFにより適合と認定されます。また、すべてのKubernetesアップデートを取得し、追加の作業を行うことなくCNCFエコシステムとの互換性を維持します。


Kubernetesエコシステムとコミュニティ

オラクルは、成熟度レベルごとに編成された数十のソフトウェア開発プロジェクトをサポートするオープンソースコミュニティであるCloud Native Computing Foundation(CNCF)のプラチナメンバーです。卒業プロジェクト(Kubernetes、プロメテウスEnvoyCoreDNSコンテナFluentdJaegerVitessTUF、およびHelm)はすべてがクラウドネイティブ開発の側面にとって非常に貴重であることが証明されています。

Kubernetesを始めるには

Kubernetesには、その周りに生まれたプロジェクトをサポートする大規模なエコシステムがあります。ランドスケープが非常に困難になる可能性があり、簡単な質問への答えを探すことは抜け出せない状況に陥ることにつながる可能性があります。しかし、このパスの最初の数ステップは単純で、そこから、ニーズに応じて高度な概念を探索できます。方法:

  • DockerとKubernetesを使用してローカル開発環境をセットアップ
  • Helidonを使用して単純なJavaマイクロサービスを作成
  • Dockerを使用してマイクロサービスをコンテナイメージに構築
  • マイクロサービスをローカルのKubernetesクラスタに導入
  • クラスタ上でマイクロサービスをスケールアップおよびスケールダウン

開発者向けのKubernetes

最初のKubernetesプロジェクトを開始したい開発者の場合は、開発者ポータルをチェックアウトできます。そこで、最初のArmアプリケーションをKubernetes上に構築する方法や、クラウド・シェルを使用してKubernetesクラスタを導入する方法について学習します。


OCIのKubernetes概要 (8:32)