Kubernetesの概要
Kubernetes(クーバネティス)とは、Dockerをはじめとするコンテナ化されたアプリケーションの展開、スケーリング、管理を行うオープンソースのプラットフォームです。
コンテナによる仮想化は、それまでの仮想マシンによる仮想化と比べ、作成が容易で軽量です。しかし、コンテナの数が増えるにつれて、新しいコンテナがどのノードで実行されているかを管理し、ホスト間・コンテナ間の通信を容易にする必要が生じました。
Googleは、コンテナクラスターを一つのシステムとして管理する目的でKubernetesを開発しました。Kubernetesは、オープンソース化され、2015年にGoogleやIBM、Twitter、Red Hatなどが創設メンバーとして参加したCloud Native Computing Foundation(CNCF)のプロジェクトとして寄贈されました。
Kubernetesは、船の操縦士または操舵者という意味のギリシャ語が由来です。Kubernetesのロゴは、船の操舵輪となっています。また、Kubernetesは、記述する上で「k8s」と略されることが多々あります。これは「K」+8文字+「s」という意味です。
2015年7月にKubernetes 1.0がリリースされました。
Kubernetesの主な特徴
Kubernetesには次のような特徴があります。
Kubernetesの機能
サービスディスカバリーおよびロードバランシング | podに内部IPアドレスと単一のDNS名を与え、負荷分散を行うことができます。サービス検出のためにアプリケーションを変更する必要はありません。 |
---|---|
オートマチックbinパッキング | 可用性を損なうことなく、リソース要件などの設定に基づき、自動的にpod(後述)を適切なノードへデプロイします。 |
ストレージオーケストレーション | ローカルストレージ、GCPやAWSなどのパブリッククラウドプロバイダのストレージサービス、NFS、iSCSI、Gluster、Ceph、Cinder、Flockerなどのネットワークストレージなど任意のストレージシステムを自動的にマウントすることができます。 |
セルフヒーリング | レプリケーションコントローラーは、設定された稼動チェックを行い、いつでも設定された数のpodが稼動している状態を保ちます。 |
オートスケーリング | コマンドやUIからの指定、またはCPU使用率から自動的に、アプリケーションのスケールアップ・スケールダウンを行うことができます。 |
ローリングアップデートおよびロールバック | すべてのインスタンスが同時に停止しないよう、アプリケーションや設定の変更を段階的に行います。問題が生じた場合、変更をロールバックします。 |
シークレットおよびコンフィグレーションマネージメント | イメージの再ビルドを行わずにアプリケーション構成やシークレットオブジェクトのデプロイや変更ができます。 |
バッチ実行 | バッチおよびCIワークロードを管理します。 |
ホリゾンタルスケーリング | CPU使用率を基にアプリケーションの増強、縮小ができます。 |
Kubernetesの構成要素
コントロールプレーンコンポーネント | |
kube-apiserver | ユーザーにREST操作・kubectlコマンドを介してのクラスター操作を提供します。 |
---|---|
kube-scheduler | ユーザーが発行したpod作成命令に対し、スケジューラーは、リソース要件に基づいてノードにpodを割り当てます。 |
kube-controller-manager | APIサーバーを介してクラスター状態を監視し、指定された状態への変更を行います。 コントローラーには、レプリケーションコントローラー、エンドポイントコントローラー、ネームスペースコントローラー、サービスアカウントコントローラーがあります。 |
cloud-controller-manager | Kubernetesにクラウド特有の制御ロジックを組み込み、クラウドプロバイダーAPIとリンクさせます。クラウドプロバイダーと依存関係をもつコントローラーとしては、ノードコントローラー、ルートコントローラー、サービスコントローラーなどがあります。 オンプレミスで動作させるKubernetesにはcloud-controller-managerはありません。 |
etcd | クラスター状態に関するすべての設定情報は、キーと値のペアの形式でetcdに格納されます。 |
ノードコンポーネント | |
kubelet | kubeletは、各ノードで動作する「ノードエージェント」です。podを定義したPodSpecに従い、コンテナが正常に動作しているかを監視します。 |
kube-proxy | kube-proxyは、各ノードでpod間の負荷分散を実行し、外部ホストがサービスを利用できるようにします。 |
コンテナランタイム | コンテナの実行を担当します。 Kubernetesでは、Docker、containerd、CRI-Oなど複数のコンテナランタイムをサポートします。 |
アドオン | |
DNS / Web UI /モニタリング / ロギング等 | アドオンによって、Kubernetesクラスターまたはノードに関連する機能を拡張することができます。ネットワーク・ネットワークポリシー、サービスディスカバリー、可視化と制御、インフラストラクチャなど様々な機能拡張が可能です。 利用可能なアドオンの一部は以下に記載があります。 参考: https://kubernetes.io/ja/docs/concepts/cluster-administration/addons/ |
参考: https://kubernetes.io/ja/docs/concepts/overview/components/
Kubernetesのユースケース
次のようなお客様に、Kubernetesの導入をオススメします。
- マイクロサービスプラットフォームを構築したい
- イミュータブル・インフラストラクチャーによる開発環境・本番環境を構築したい
- DevOpsを導入・改善したい
Kubernetesの動作環境
kubeadmを利用して高可用性クラスター環境を構築する前提となる動作環境は、以下のとおりです。
- マスター用マシン3台
- ワーカー用マシン3台
- クラスター内のすべてのマシン間の完全なネットワーク接続
- 1つのデバイスからシステム内のすべてのノードへのSSHアクセス
- すべてのマシンのsudo権限
- すべてのマシンに kubeadm と kubelet がインストール済みであること
それぞれのマシンはkubeadmの前提である以下の要件を満たす必要があります。
OS | Linux互換のホストが対象です。手順としては、
|
---|---|
Memory | 2 GB以上(これ以下ではアプリで使用できる空きがほとんどありません) |
CPU | 2 CPU以上 |
Network |
|
Disk | Swapの無効化 |
参考: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Kubernetesのライセンス
Kubernetesのライセンスは、Apache2.0ライセンスです。 Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。
Kubernetesと同様の機能を提供する製品
Nomad、Mesos(+Marathon)、DockerのSwarmモードなどがKubernetesと同様の機能を提供しています。 いずれもオープンソースのオーケストレーションプラットフォームです。
参考情報
Kubernetesのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。