トップ OSS紹介 Kubernetes

Kubernetes

サポート対象

NRIのOpenStandiaが提供するKubernetes最新情報

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コマンド(Kubernetesクラスターと対話するためのコマンドラインツール)を介したクラスター操作を提供します。

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/

同様の機能を提供する商用製品

Nomad、Mesos(+Marathon)、DockerのSwarmモードなどがKubernetesと同様の機能を提供しています。 いずれもオープンソースのコンテナオーケストレーションプラットフォームです。

ユースケース

次のようなお客様に、Kubernetesの導入をオススメします。

  • マイクロサービスプラットフォームを構築したい
  • イミュータブル・インフラストラクチャーによる開発環境・本番環境を構築したい
  • DevOpsを導入・改善したい

動作環境

kubeadmコマンド(Kubernetesクラスターの構築プロセスを簡素化するコマンドラインツール)を利用して高可用性クラスター環境を構築する前提となる動作環境は、以下のとおりです。

  • マスター用マシン3台
  • ワーカー用マシン3台
  • クラスター内のすべてのマシン間の完全なネットワーク接続
  • 1つのデバイスからシステム内のすべてのノードへのSSHアクセス
  • すべてのマシンのsudo権限
  • すべてのマシンに kubeadm と kubelet がインストール済みであること

それぞれのマシンはkubeadmの前提である以下の要件を満たす必要があります。

OS

Linux互換のホストが対象です。手順としては、

  • DebianとRed Hatに基づくLinuxディストリビューション
  • パッケージマネージャーのないディストリビューション

のものを提供します。

Memory

2 GB以上(これ以下ではアプリで使用できる空きがほとんどありません)

CPU

2 CPU以上

Network

  • クラスター内のすべてのマシン間の完全なネットワーク接続があること
  • ユニークなホスト名、MACアドレス、プロダクトUUIDを持っていること
  • 特定のポートをオープンしていること

参考: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

    ランチャー。Rancher Labsが主導となって開発しているKaaS(Kubernetes-as-a-Service)を実現するプロダクトで、Multi-Cluster Kubernetes Management を行うためのOSSです。

  • Helm
    サポート対象

    Helm

    ヘルム。Kubernetesクラスタのためのパッケージマネージャで、Kubernetes向けパッケージマネージャとして現在最も人気のある製品となっています。

  • Docker
    サポート対象

    Docker

    ドッカー。ソフトウェアコンテナを用いたアプリケーションのデプロイメントを自動化する仮想化オープンソースソフトウェアです。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。