Kubernetesとは?仕組みと構造をわかりやすく解説します

Kubernetesとは、コンテナの運用管理と自動化を目的に設計されたオープンソースのシステムです。

Kubernetesの複雑で難しいイメージを少しでも改善するために、この記事ではポイントを整理しました。KubernetesとDockerやコンテナとの関係、おもな仕組み、そしてインストール方法を中心にわかりやすく解説しています。

Kubernetes-logo

Kubernetesとは?コンテナやDockerとの関係性

kubernetes-container

まずは、Kubernetesに理解にどうしても必要なキーワードをまとめています。

Kubernetesとは?

Kubernetesはクバネティス、またはクーベネティスなどと読みます。ギリシャ語で、操舵手 やパイロットという意味があるそうです。またK8sとも呼ばれています。公式サイトによれば、Kubernetesのスペルで、最初の「K」と最後の「s」の間にある「ubernete」の文字数が8あるため、「K」と「8」と「s」をつなげて「K8s」になっています。

Kubernetesにとって操作の対象は、Dockerなどのコンテナです。この対象が大きくなればなるほど、Kubernetesは威力を発揮します。Dockerなどが増えて、システム全体を効率良く管理したり、効果的に組み合わせたりする力は、Dockerには不足しているからです。

Kubernetesの登場により、複数のDockerなどのコンテナの管理や自動化が進み、この仕組みは「コンテナオーケストレーション」と呼ばれるようになりました。

コンテナ型の仮想化技術とは?

仮想化技術を支える手段には種類があります。具体的には、ハイパーバイザーやホスト型ともにコンテナ型が公開されています。コンテナの仮想化については、以下の記事にて詳しく解説しています。

【関連記事】
【入門】Dockerとは?使い方と基本コマンドを分かりやすく解説します

さらにコンテナにも種類があり、Dockerはその一つです。Kubernetesが対象としているコンテナは、このDockerが標準になっています。その主な理由には、Dockerの動作の速さや移動のしやすさなどの特徴があるからです。

KubernetesとDockerの違い

ここまでみてきたように、この2つは目的が異なります。実はDockerにも、複数のDocker自体の管理や自動化をする機能(Docker Swarm)があります。ただコンテナ間の設定や管理で、できないことがあります。小規模の場合は別途作業すればいいのですが、規模が大きくなるほど煩雑になります。

そこでKubernetesのような専用ツールによって、規模の大きいDockerの管理や自動化をするようになりました。

Kubernetesのメリット

Kubernetes利用による「コンテナオーケストレーション」で、複数のDockerを管理する手間が減り、コストを削減することができます。具体的にはこちらの情報にあるように、Kubernetesの利用により以下の課題を解決できるようになります。Docker自体では、実現がむずかしい項目ばかりです。

  • 複数のDockerホストの管理
  • コンテナのスケジューリング
  • ローリングアップデート
  • スケーリング / オートスケーリング
  • コンテナの死活監視
  • 障害時のセルフヒーリング
  • サービスディスカバリ
  • ロードバランシング
  • データの管理
  • ワークロードの管理
  • ログの管理
  • Infrastructure as Code
  • その他エコシステムとの連携や拡張

【引用元】
なぜKubernetesが必要なのか?

Kubernetesの主な仕組み

kubernetes 仕組み

次にKubernetesの構成を簡単にご説明します。それぞれの機能は複雑ですが、意味のあるものばかりです。繰り返しになりますが、目的は「コンテナオーケストレーション」です。

Kubernetes Cluster(クラスター)

一般的に、クラスターには「まとまり」という意味があります。IT分野では、コンピュータ・クラスターのように、複数台のコンピュータを結び付けまとめた仕組みを指しています。Kubernetesクラスターも同様で、公式サイトでは「単一のユニットとして機能するように接続された、可用性の高いコンピュータのクラスター」としています。

なお「可用性」とは、システムを継続して稼働させる考え方です。例えば、ひとつの機器が故障しても他の正常な機器に自動的に切り替わり、利用者には影響ができないようにするしくみです。

Kubernetesクラスターを作成するためには、Minikubeというツールを使用します。公式サイトでは、コマンド操作が体験できるデモ環境が用意されています。

kubernetes01

namespace

公式サイトによれば、同一の物理クラスター上で動作する複数の仮想クラスターのことです。namespace(名前空間)は、比較的規模が大きい環境で導入が推奨されています。これにより、1つのKubernetesクラスターを複数チームで利用できるようになりました。具体的には、誰がどのような権限があるかを設定し、Kubernetesクラスターを分離しています。

pod

Kubernetesが管理できる最小単位で、Dockerなどのコンテナが 1つ以上含まれています。ポイントは、KubernetesがDockerなどのコンテナを直接管理しているのではなく、pod経由であることです。podにはIP アドレスが自動的に割り当てられ、コンテナ間で共有するストレージが含まれています。こちらも公式サイトに、コマンド操作でpodを体験できるデモ環境が用意されています。

kubernetes02

Kubernetesの初期インストール

kubernetes インストール

それでは実際にKubernetesをインストールしていきましょう。ここでは、Kubernetesクラスターを実行するkubeadmなどの基本的なインストール方法をご紹介します。

利用したVPSのプラン

検証用に、こちらのスペックにてVPSにセットアップします。

企業名 カゴヤ・ジャパン
プラン名 KAGOYA CLOUD/2のVPS「KVM」プラン
CPU 3コア
メモリー 3GB
ストレージ SSD 30GB
OSテンプレート Ubuntu16.04(64bit)
料金 日額 55円/、月額 1,540円

Dockerのインストール

まずは以下の記事などを参考に、Dockerをインストールします。

【関連記事】
【入門】Dockerとは?使い方と基本コマンドを分かりやすく解説します

Kubernetesのインストール

今回インストールするパッケージは以下の3つです。

kubeadm Kubernetesのクラスターを簡単に操作するツール
kubelet Kubernetesの主要なパッケージ
kubectl Kubernetesクラスターを管理するためのコマンド

公式ページにそって、前準備をしたうえで以下のコマンドを順次実行していきます。rootでの操作が推奨されています。

【コマンド】(Ubuntuの場合)

apt-get update && apt-get install -y apt-transport-https curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add –

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF

apt-get update

apt-get install -y kubelet kubeadm kubectl

apt-mark hold kubelet kubeadm kubectl

初期インストール後について

Kubernetesには多くの機能があるため、優先度に応じて高度な設定をしてから利用していきます。進め方には以下の選択肢から、より適した方法を選ぶ必要があると考えます。

  1. 公式ページのドキュメントなどを参考に進めていく(かなりの量あり)
  2. Goggle CloudAzureなどのサービスを試用してから、正式に申し込む(設定の時間を短縮)
  3. カゴヤ・ジャパンの「コンテナサービス」ですぐに始める

まとめ

ここまでいかがでしたか。Kubernetesについて概要をご理解いただけたかと思います。あとは、ご利用の目的や規模に合う設定に移ります。Kubernetesの本来の目的と機能であるDocker管理をさらに効率よく進めるため、「Rancher」を導入したサービスの利用がおすすめです。

カゴヤ・ジャパンでは、「コンテナサービス」が用意されています。Kubernetesと「Rancher」 が構築済で、すぐに Docker 環境が使えるようになっています。経営資源の有効配分と優先度により、ご検討されてみてはいかがでしょうか。

高速でセキュアな環境で運用できるWordpressユーザー向けに特化したWordPress専用サーバー

人気記事ランキングトップ10

カテゴリ一覧

新着記事Pick Up!