Kubernetesとは

くばねてぃす

多数のマシン(ノード)からなるクラスタの上で、コンテナを配置し、数を保ち、更新し、接続先を提供するためのオーケストレーションの基盤。利用者はDeploymentやServiceなどのリソースで「あるべき状態」を宣言し、コントローラが実際の状態を観察して宣言に近づける(リコンサイル)。最小の単位はPodで、Podが失われると自動で作り直され、ローリングアップデートや、負荷に応じた自動スケーリングも行える。略してK8sとも書く。

「Kubernetes」は、1分野の10問の練習問題に出てきます(クラウドとコンテナの基礎など)。

この用語の分野: クラウドとコンテナの基礎

主なリソース

Podはコンテナをまとめた最小の単位、ReplicaSetはPodの数を保つもの、Deploymentはそれを使って版の更新やロールバックを行うものです。Serviceは複数のPodに安定した名前とアドレスを与え、Ingressはクラスタの外からのHTTPの要求をパスやホスト名でServiceに振り分けます。ConfigMapとSecretは設定や機密の値をイメージから切り離して渡し、namespaceはクラスタの中をチームや環境ごとに区切ります。

宣言とリコンサイル

利用者は「この版のPodを3つ動かす」といった状態をYAMLなどで宣言し、Kubernetesに登録します。コントローラはくり返し実際の状態を確かめ、Podが消えれば作り、数が多ければ減らします。手順ではなく結果を宣言するので、同じ定義を何度適用しても同じ状態に収まり、ノードの故障からも自動で回復します。

資源の指定とプローブ

コンテナには、確保したいCPUやメモリの量(requests)と上限(limits)を指定し、スケジューラは requests をもとにPodを置くノードを選びます。readinessプローブは要求を受けられるかを調べて振り分けを制御し、livenessプローブは応答しなくなったコンテナを再起動させます。HorizontalPodAutoscalerは、requests に対する使用率などの指標からPodの数を増減します。

Kubernetesの練習問題に挑戦

Kubernetesで、デプロイして管理する最小の単位であり、1つ以上のコンテナをまとめて、同じIPアドレスやボリュームを共有させるものはどれか。

  1. Aノード
  2. BService
  3. CPod
答えと解説を見る

正解:C. Pod

Podは、Kubernetesが配置して動かす最小の単位で、中のコンテナはネットワークの名前空間を共有するので、互いに localhost で通信でき、同じボリュームも使えます。多くの場合は1つのPodに1つのアプリケーションのコンテナを入れ、ログの転送などの補助のコンテナを同じPodに加えることもあります。Podは使い捨てで、作り直されるとIPアドレスも変わるので、ふつうはDeploymentなどを通じて間接的に管理します。ノードはPodが動くマシンで、Serviceは複数のPodへの安定した接続先です。

Kubernetesで、replicas: 3 を指定したDeploymentのPodが3つ動いている。このうち1つのPodを kubectl delete pod で削除したときに起きることとして、正しいものはどれか。

  1. ADeploymentの設定も replicas: 2 に書き換わり、Podは2つのまま動き続ける
  2. B実際の数が指定した3に足りなくなったことをコントローラが検知し、新しいPodを1つ作る
  3. CDeploymentに属するほかの2つのPodも削除され、Deployment全体が停止する
答えと解説を見る

正解:B. 実際の数が指定した3に足りなくなったことをコントローラが検知し、新しいPodを1つ作る

Kubernetesでは、利用者は「Podを3つ動かす」というあるべき状態を宣言し、コントローラが実際の状態をくり返し観察して、違いがあれば宣言に近づけるように操作します(リコンサイル)。Podを1つ削除すると実際の数が2になるので、ReplicaSetのコントローラが新しいPodを作って3に戻します。ノードの故障でPodが失われた場合も、同じ仕組みでほかのノードにPodが作り直されます。Podの数を本当に減らしたいときは、Podを消すのではなく、Deploymentの replicas を変更します。

よくある質問

DockerとKubernetesは何が違いますか?

Dockerは主に1台のマシンでイメージを作り、コンテナを動かすための道具です。Kubernetesは多数のマシンにまたがって、どのノードで動かすか、いくつ動かすか、どう更新するかを管理する基盤です。KubernetesはDockerなどで作った標準形式のイメージを使ってコンテナを動かします。

小さなシステムでもKubernetesを使うべきですか?

必ずしもそうではありません。Kubernetesは高い可用性や自動の回復、多数のサービスの管理に強みがある一方、クラスタの運用には知識と手間がかかります。規模が小さければ、1台のマシンでのコンテナの実行や、クラウドのマネージドなコンテナの実行サービスの方が適していることもあります。

解説の中の「Kubernetes」

「Kubernetes」が出てくる問題(10問)

  1. Kubernetesで、デプロイして管理する最小の単位であり、1つ以上のコンテナをまとめて、同じIPアドレスやボリュームを共有させるものはどれか。
  2. Kubernetesで、replicas: 3 を指定したDeploymentのPodが3つ動いている。このうち1つのPodを kubectl delete pod で削除したときに起きることとして、正しいものはどれか。
  3. KubernetesのDeploymentで、Podのテンプレートのコンテナイメージを新しい版に変更した。既定の更新方式(RollingUpdate)で起きることとして、正しいものはどれか。
  4. Kubernetesで、Podは作り直されるたびにIPアドレスが変わる。ほかのアプリケーションから、ラベルで選んだ複数のPodに、変わらない名前とアドレスで接続して負荷を分散できるようにするリソースはどれか。
  5. Kubernetesのクラスタで、1つのホスト名に届いたHTTPSの要求のうち、パスが /api で始まるものは api のServiceへ、それ以外は web のServiceへ振り分けたい。この振り分けの規則を定めるのに適したリソースはどれか。
  6. KubernetesのSecretに、データベースのパスワードを保存する。Secretの説明として、正しいものはどれか。
  7. KubernetesのWebアプリケーションで、livenessプローブの確認の処理の中で、依存先のデータベースに接続できるかまで調べるようにした。この設定で起こりうる問題として、最も適切なものはどれか。
  8. KubernetesのHorizontalPodAutoscalerで、PodのCPU使用率の目標を70%、Podの数の範囲を1〜10とした。いま5つのPodの平均のCPU使用率が30%である。必要なPodの数を ⌈現在の数 × 現在の使用率 ÷ 目標の使用率⌉(⌈ ⌉ は切り上げ)で求めるとき、必要なPodの数として、正しいものはどれか。
  9. Kubernetesで、コンテナに設定する資源の requests と limits の説明として、正しいものはどれか。
  10. 上のように、データベースの接続先をイメージに書き込まず、コンテナを起動するときに環境変数で渡すようにした。この設計の主な利点として、最も適切なものはどれか。

クラウドとコンテナの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

Pod コンテナ 環境変数 コンテナイメージ DNS HTTP TLS リバースプロキシ デッドロック IaC(Infrastructure as Code)

用語集の一覧へ