目次
- Kubernetesとは?その読み方と用途
- Kubernetes(K8s)の基本用語解説
- コンテナ、Pod、Node、クラスター
- Dockerとの違い
- Kubernetesの主な特徴
- デプロイの自動化
- ハイブリッド / マルチクラウドに対応
- 拡張性とプラグインアーキテクチャ
- ローリングアップデートとロールバック
- 柔軟なスケーラビリティ
- リリース後のアプリケーション監視
- Kubernetesの利点とは
- 生産性の向上
- 自己修復機能により障害に耐性
- 高い可用性を担保
- オンプレミスでも、クラウドでも運用可能
- 大量のコンテナを一括管理
- DevSecOpsとの親和性が高い
- クラウドネイティブなワークロードを安全に保つ
- GitLabでKubernetesを統合する
- Kubernetes(K8s)のよくある質問
- KubernetesとDockerの違いは何ですか?
- Kubernetesで何ができますか?
- Kubernetesコンテナとは何ですか?
- Kubernetesの読み方は?
Kubernetesとは?その読み方と用途
Kubernetesは、「クバネティス」、「クーベネティス」、または「クーバネーティス」と発音します。ギリシャ語のκυβερνήτηςに由来し、「統治者」や「パイロット」といった意味を持ちます。また、K8sと表記されることもあります。
Kubernetesは、一言で表せばソフトウェア開発においてコンテナを操作・管理するもので、コンテナオーケストレーションの役割を果たすオープンソースソフトウェアとして開発されました。Kubernetesは、クラウドネイティブのプログラムの開発に使用します。これを使用することでマイクロサービスアーキテクチャが可能になり、プログラムの開発が高速化できます。
では、Kubernetesについて、もう少し掘り下げて見ていきましょう。
Kubernetes(K8s)の基本用語解説
コンテナ、Pod、Node、クラスター
Kubernetesは、コンテナをオーケストレーションするためのツールです。オーケストレーションとは、複数のコンピュータシステムやアプリケーション、サービスなどを調整して管理し、頻繁に繰り返される大規模なワークフローやプロセスを実行できるようにすることを指します。では、コンテナとは何でしょう。ソフトウェア開発におけるコンテナ化とは、ソフトウェアのコードをライブラリやフレームワークなどの依存関係にあるすべてのコンポーネントとともにパッケージ化し、それぞれの入れ物、「コンテナ」に隔離することを意味します。コンテナは、完全に機能するポータブルなコンピューティング環境です。また、このコンテナを複数まとめたものがPod、PodをまとめたものがNode、Nodeをまとめたものがクラスタと呼ばれます(以下の図を参照)。
Kubernetesにおけるコンテナとクラスタの関係を示した図
Dockerとの違い
Kuberunetesはコンテナオーケストレーションツールですが、Dockerはコンテナ化ツールの1つです。Dockerはアプリケーションのコンテナ化を行なうとき使用するプラットフォームです。仮想マシンよりも軽量で高速であることや、環境構築が簡単なことから、コンテナ化の主流ツールになっています。
Kubernetesの主な特徴
Kubernetesは、前述したようにコンテナを管理するコンテナオーケストレーションツールで、代表的な機能としては次のようなものが挙げられます。
デプロイの自動化
Kubernetesは、アプリケーションのデプロイ時に、新しいコンテナの作成や既存コンテナの削除を自動で実施します。また、新しく作成したコンテナにも自動でリソースを適用します。
ハイブリッド / マルチクラウドに対応
クラウドプロバイダーに依存することなく、オンプレミス環境や様々なクラウドサービス(AWS、Azureなど)上で動作します。よって、ハイブリッドクラウドやマルチクラウド環境を簡単に構築、管理することができます。
拡張性とプラグインアーキテクチャ
多様なプラグインや拡張機能が利用できます。例えば、CustomResourceDefinitions(CRD)を使って新規にリソースタイプやロジックを追加したり、CNI(Container Network Interface)やCSI(Container Storage Interface)といったプラグインでネットワークやストレージのカスタマイズが可能です。
ローリングアップデートとロールバック
Kubernetesでは、アプリケーションのバージョンを更新する際、ローリングアップデートがそのデフォルトとなります。また、ビルトインでロールバック機構もあります。このため、ライブトラフィックに影響を与えず、ダウンタイムゼロでデプロイを実現できます。
柔軟なスケーラビリティ
Kubernetesは、大量のコンテナを効率的に管理するためのもので、システムのスケーラビリティが向上できます。スケーラビリティとは、どのくらいシステムの拡張ができるかを示す特性で、Kubernetesではコンテナ化されたアプリケーションの数を増減することでスケーリングします。
リリース後のアプリケーション監視
PrometheusやGrafanaといった監視ツールを使用することで、アプリケーション固有のメトリクスが監視できます。リリース後のパフォーマンス低下や不具合発見といった事象がアラートされるため、問題に迅速に対処できます。
Kubernetesの利点とは
Kubernetesには次のような7つのメリットがあります。
生産性の向上
一つ目のメリットは、アプリケーション開発で生産性が向上できる点にあります。従来の仮想化では、アプリケーションごとにゲストOSを用意する必要がありましたが、Kubernetesでは、アプリケーションを直接コンテナエンジン上にデプロイできるため、サーバーのリソース使用量が抑えられます。
自己修復機能により障害に耐性
Kubernetesには、PodやNodeに障害が起きた場合、最初の定義(マニフェスト)の状態まで自動修復する機能が備わっています。
高い可用性を担保
Kubernetesは、複数のNodeの集まりであるクラスターを構成します。あるクラスターで障害が発生した場合、障害が起きたコンテナを自動で再起動させます。また、他のNodeでコンテナを起動させ、処理を引き継ぐ動作も継続できるため、高い可用性が担保できます。
オンプレミスでも、クラウドでも運用可能
Kubernetesは、オンプレミスでも、プライベートクラウド、パブリッククラウドでも利用できます。つまり、自社サーバーでも、クラウドを使っても、どんな環境でも運用可能です。
大量のコンテナの一括管理
Kubernetesでは、大量のコンテナが一括で管理・運用できます。また、設定ファイルを複数のコンテナ間で共有することによって、設定変更時も正確かつ大量に設定を反映させることが可能です。
DevSecOpsとの親和性が高い
DevSecOpsとは、開発と運用を統合するDevOpsにセキュリティを加え、運用を視野に入れながら開発とセキュリティを同時に進め、安心・安全なソフトウェアを迅速にリリースするというコンセプトです。Kubernetesにはアプリケーションの開発と運用の双方に必要とされる機能が多く搭載されているため、DevSecOpsとの親和性が非常に高いという特長があります。
クラウドネイティブなワークロードを安全に保つ
Kubernetesは、クラウドネイティブアーキテクチャに基づいており、クラウドネイティブな情報セキュリティに関するベストプラクティスについて、CNCF(Cloud Native Computing Foundation)からのアドバイスを活用しています。
たとえばKubernetesには、APIやセキュリティコントロールが含まれており、情報セキュリティを管理するポリシーを定義する手段も備わっています。クラウドの利用などでセキュリティ面において懸念が生じても、Kubernetesならユーザーごとにアクセス制限を設定でき、不正アクセスが防止できるため安心です。
また、Pod Security Standardによりセキュリティに3つのポリシーが定義されています。非常に緩いものから非常に厳しいものまで累積的に定義できます。
GitLabでKubernetesを統合する
KubernetesクラスターとGitLabを接続すると、アプリの開発・デプロイ・管理・監視ができます。
GitLabをKubernetesと連携させる、またはKubernetes内で動作させるには、3つの異なる方法があります。単独で使用することも、組み合わせて使用することもできます。
- GitLabからKubernetesにソフトウェアをデプロイする
- Kubernetesを使用してGitLabインスタンスに紐づいたRunnerを管理する
- GitLabのアプリケーションとサービスをKubernetesクラスター上で実行する
さらに詳しい情報やお問い合わせはこちらをご覧ください。
Kubernetes (K8s)のよくある質問
KubernetesとDockerの違いは何ですか?
Dockerはコンテナ化ツールのひとつで、アプリケーションコンテナを構築し、アプリケーションの開発・配布・実行をします。Kubernetesは、より大規模に複数のマイクロサービスを管理するのに使われます。
また、Kubernetesはクラスターで実行され、Dockerはノードで実行されます。Kubernetesの使用目的はコンテナ管理ですが、Dockerの使用目的の一つは、アプリケーションをコンテナに分離することになります。
Kubernetesで何ができますか?
Kubernetesでできることの代表例には下記のようなものが挙げられます。
- 大量のコンテナの一括管理
- 起動を含めた動作の高速化・軽量化
- 自動デプロイ
- 自己修復機能により障害に耐性
- 高い可用性を担保
- オンプレミスでも、クラウドでも運用可能
- DevSecOpsとの親和性が高い
- クラウドネイティブなワークロードを安全に保つ
Kubernetesコンテナとは何ですか?
ソフトウェアのコードをライブラリやフレームワークなどの依存関係にあるすべてのコンポーネントとともにパッケージ化し、それぞれの入れ物、「コンテナ」に隔離することをコンテナ化と言います。Kubernetesコンテナは、完全に機能するポータブルなコンピューティング環境で、さまざまなプラットフォームでデプロイ可能なプログラムとしてマイクロサービスアーキテクチャを可能にします(リンクは英語版です)。
Kubernetesの読み方は?
Kubernetesは、「クバネティス」、「クーベネティス」、または「クーバネーティス」と読み、「K8s(ケーエイツ)」と略されます。