Kubernetes情報
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の機能
サービスディスカバリーおよびロードバランシング |
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とリンクさせます。クラウドプロバイダーと依存関係をもつコントローラーとしては、ノードコントローラー、ルートコントローラー、サービスコントローラーなどがあります。 |
etcd |
クラスター状態に関するすべての設定情報は、キーと値のペアの形式でetcdに格納されます。 |
ノードコンポーネント | |
kubelet |
kubeletは、各ノードで動作する「ノードエージェント」です。podを定義したPodSpecに従い、コンテナが正常に動作しているかを監視します。 |
kube-proxy |
kube-proxyは、各ノードでpod間の負荷分散を実行し、外部ホストがサービスを利用できるようにします。 |
コンテナランタイム |
コンテナの実行を担当します。 |
アドオン | |
DNS / Web UI /モニタリング / ロギング等 |
アドオンによって、Kubernetesクラスターまたはノードに関連する機能を拡張することができます。ネットワーク・ネットワークポリシー、サービスディスカバリー、可視化と制御、インフラストラクチャなど様々な機能拡張が可能です。 参考:https://kubernetes.io/ja/docs/concepts/cluster-administration/addons/ |
参考:https://kubernetes.io/ja/docs/concepts/overview/components/
同様の機能を提供する商用製品
Nomad、Mesos(+Marathon)、DockerのSwarmモードなどがKubernetesと同様の機能を提供しています。 いずれもオープンソースのオーケストレーションプラットフォームです。
ユースケース
次のようなお客様に、Kubernetesの導入をオススメします。
- マイクロサービスプラットフォームを構築したい
- イミュータブル・インフラストラクチャーによる開発環境・本番環境を構築したい
- DevOpsを導入・改善したい
動作環境
kubeadmを利用して高可用性クラスター環境を構築する前提となる動作環境は、以下のとおりです。
- マスター用マシン3台
- ワーカー用マシン3台
- クラスター内のすべてのマシン間の完全なネットワーク接続
- 1つのデバイスからシステム内のすべてのノードへのSSHアクセス
- すべてのマシンのsudo権限
- すべてのマシンに kubeadm と kubelet がインストール済みであること
それぞれのマシンはkubeadmの前提である以下の要件を満たす必要があります。
OS |
Linux互換のホストが対象です。手順としては、
のものを提供します。 |
---|---|
Memory |
2 GB以上(これ以下ではアプリで使用できる空きがほとんどありません) |
CPU |
2 CPU以上 |
Network |
参考:https://kubernetes.io/docs/reference/networking/ports-and-protocols/ |
Disk |
Swapの無効化 |
参考:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Kubernetesのライセンス
Kubernetesのライセンスは、Apache2.0ライセンスです。 Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
Rancher
ランチャー。Rancher Labsが主導となって開発しているKaaS(Kubernetes-as-a-Service)を実現するプロダクトで、Multi-Cluster Kubernetes Management を行うためのOSSです。
-
サポート対象
Helm
ヘルム。Kubernetesクラスタのためのパッケージマネージャで、Kubernetes向けパッケージマネージャとして現在最も人気のある製品となっています。
-
サポート対象
Docker
ドッカー。ソフトウェアコンテナを用いたアプリケーションのデプロイメントを自動化する仮想化オープンソースソフトウェアです。