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の構成要素
pod | 少なくとも一つのコンテナを有するKubernetesの構成単位です。コンテナ間でIPアドレス等を共有します。 |
---|---|
APIサーバー | ユーザーにREST操作・kubectlコマンドを介してのクラスター操作を提供します。 |
スケジューラー | ユーザーが発行したpod作成命令に対し、スケジューラーは、リソース要件に基づいてノードにpodを割り当てます。 |
コントローラーマネージャー | APIサーバーを介してクラスター状態を監視し、指定された状態への変更を行います。 コントローラーには、レプリケーションコントローラー、エンドポイントコントローラー、ネームスペースコントローラー、サービスアカウントコントローラーがあります。 |
etcd | クラスター状態に関するすべての設定情報は、キーと値のペアの形式でetcdに格納されます。 |
アドオン | アドオンによって、Kubernetesクラスターまたはノードに関連する機能を拡張することができます。ロギングのためのfluentdや、ロールベースアクセスのためのrbacなどがあります。 |
kubelet | kubeletは、各ノードで動作する「ノードエージェント」です。podを定義したPodSpecに従い、コンテナが正常に動作しているかを監視します。 |
kube-proxy | kube-proxyは、各ノードでpod間の負荷分散を実行し、外部ホストがサービスを利用できるようにします。 |
Kubernetesの動作環境
kubeadmを利用して高可用性クラスター環境を構築する前提となる動作環境は、以下のとおりです。
- マスター用マシン3台
- ワーカー用マシン3台
- クラスター内のすべてのマシン間の完全なネットワーク接続
- 1つのデバイスからシステム内のすべてのノードへのSSHアクセス
- すべてのマシンのsudo権限
- すべてのマシンに kubeadm と kubelet がインストール済みであること
それぞれのマシンはkubeadmの前提である以下の要件を満たす必要があります。
OS | Ubuntu 16.04+ Debian 9+ CentOS 7 RHEL 7 Fedora 25+ HypriotOS v1.0.1+ Container Linux (tested with 1800.6.0) |
---|---|
Memory | 2 GB以上 |
CPU | 2 CPU以上 |
Network | クラスター内のすべてのマシン間の完全なネットワーク接続 ユニークなホスト名、MACアドレス、プロダクトUUID |
Disk | Swapの無効化 |
参考: https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Kubernetesのユースケース
次のようなお客様に、Kubernetesの導入をオススメします。
- マイクロサービスプラットフォームを構築したい
- イミュータブル・インフラストラクチャーによる開発環境・本番環境を構築したい
- DevOpsを導入・改善したい
Kubernetesのライセンス
Kubernetesのライセンスは、Apache2.0ライセンスです。 Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。
Kubernetesと同様の機能を提供する製品
Nomad、Mesos(+Marathon)、DockerのSwarmモードなどがKubernetesと同様の機能を提供しています。 いずれもオープンソースのオーケストレーションプラットフォームです。
Kubernetesの参考情報
Kubernetesサポートサービス
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細はこちら
お気軽にOpenStandiaまでお問い合わせください。