【Kubernetes超入門#01】Kubernetesってなに?

Kubernetes超入門01 tech

こんにちは、Mashです。

以前、Docker初学者向けコンテンツをシリーズ物としてアップしました。

こちらのシリーズを消化していただければひととおり「Dockerとはなにか」「Docker環境の基本的な動かし方」はご理解いただけると思いますので、ご一読いただけるとうれしいです。

さて、

今回からはタイトルの通り、Kubernetes超入門シリーズとなります。

Dockerとあわせて語られることの多いKubernetesですが、

Kubernetesって聞いたことあるけど、結局なんなの?

Kubernetes知ってるよ!コンテナオーケストレーションだよね、、!(知ったかぶり)

こんな人も多いのではないでしょうか。

本シリーズではKubernetesではそもそもどんなことができるのか、また実機での操作方法まで、入門者向けの情報をシリーズ物としてまとめてみました。

Kubernetesの世界を覗いてみたい方はぜひ読み進めてください。

今回は記念すべき第1回となります。

今回のゴール
  • Kubernetesとは何なのか、頭でイメージできるようになる
  • Kubernetesを使うとなにが便利なのか説明できるようになる

※本シリーズはLinuxコマンドやネットワーク、Dockerの基礎知識がある方を前提としています。

それではいきましょう!

What is Kubernetes?

Kubernetesは「クーべネティス」とか「クバネティス」なんて読み方をするみたいです。わたしは「クーバネーティス」派です。

また、略称は K8s です。海外のかたは「ケーエイツ」と読んでますね。

もともとGoogleが自社サービス提供のために開発したテクノロジーで、現在はCNCFがメンテナンスを行っています。

Kubernetesとは

Kubernetesとは何なのか。まずは公式ドキュメントを読んでみましょう。

Kubernetesは、宣言的な構成管理と自動化を促進し、コンテナ化されたワークロードやサービスを管理するための、ポータブルで拡張性のあるオープンソースのプラットフォームです。

https://kubernetes.io/ja/docs/concepts/overview/what-is-kubernetes/

は?

これ、理解できます?

短い文章ですが、わたしは未だによくわからないです。笑

知らない言葉だらけで何が何やら ですが、安心してください。噛み砕いてご説明します。

逆にこれで理解できる方はもう読んでいただかなくて結構です。笑

Dockerの課題

まずはDockerの復習から。

Dockerコンテナの技術は、従来の仮想マシン方式と比較して仮想環境の可搬性(ポータビリティ)や機敏性(アジリティ)の向上を実現します。

また、Docker Composeを使うことによって、一つの定義ファイルで複数コンテナで構成される環境を管理することができ、手作業の煩雑さとミスを無くすことにも成功しました。

とっても便利なDocker(Docker Compose)ですが、いざDockerでプロダクション環境を展開しようとしたとき、いくつもの問題に直面します。ざっとあげるとこのような感じ。

  • コンテナ単位で障害が発生しても気づけない
  • Dockerホストマシン自体に障害が発生した場合にサービスが全断してしまう
  • アプリケーションコードに不具合が見つかったのでコード修正を反映したいが、コンテナ差し替え = コンテナの再起動が必要

つまり、Dockerだけだとプロダクション環境を安定して継続運用するためには機能が不十分なんですね。

Kubernetesが実現すること

もうおわかりかと思いますが、KubernetesはピュアDockerシステムの課題を解決するためのコンテナプラットフォームです。

ここからはK8sの機能を具体的にみていきましょう。

文章だけでは理解しづらいと思いますのでスライドも添えてみました。

また、スライド内で登場する単語の説明だけ先にしておきますね。

単語説明
ノードDockerエンジンがインストールされたサーバ
Kubernetesクラスタ複数のDockerホストを束ねた論理上のシステム
少なくとも1台のMasterと1台のWorkerが含まれる
※最小構成はMaster兼Workerの1台構成
MasterノードK8sクラスタを管理する親玉のノード
Masterではアプリケーションコンテナは動かない
Workerノード実際にアプリケーションコンテナが動くノード
「Worker」と呼んだり、単に「ノード」と呼んだりする

オートスケーリング

システム負荷に応じてコンテナを自動的に増減させることができます。

スケジューリング

アプリケーションの特性やノードに搭載されているハードウェアリソースの違いなどを考慮し、適切なノードで適切なコンテナを展開させることができます。

リソース管理

ノードのCPUやメモリなどの空き状況を監視しているので、それを意識して適切なノードでコンテナを展開してくれます。

セルフヒーリング

K8s環境ではコンテナプロセスやノードの死活監視をしているので、異常を検知するとK8sがコンテナを自動で復旧してくれます。

サービスディスカバリとロードバランシング

K8s環境では1種類のコンテナが複数個展開されるわけですが、これら複数コンテナへの通信分散(ロードバランシング)もK8s内部で提供されます。

別々のノードにコンテナが展開されていても問題ありません。

ローリングアップデート・ロールバック

KubernetesはいわゆるDevOps、CI/CDを実現できるプラットフォームです。

例えばアプリケーションコンテナ内のコードやパラメータを修正してバージョンアップする必要がでてきた際には、プロダクション環境のサービス提供を停止することなくコンテナを徐々にアップデートすることができます。

また、新バージョンのコンテナに不具合があり、旧バージョンに戻したい場合もかんたんにロールバックすることが可能です。

宣言的なコードによる管理

以上のように、K8sでは様々な便利機能を提供しています。

ただし、これらの機能をどのように動かすかはわたしたちK8s利用者(アプリケーション開発者)が「あるべき姿」を提示する必要があります。

「あるべき姿」はマニフェストと呼ばれる定義ファイルとして管理します。

開発時はとてもたいへんですが、システム構成をすべてコードで管理できるので、作業ミスなども起こりませんし、設定変更の経緯などを後からでも追いかけやすくなるメリットがあります。

まさにIaCですね。

まとめ

今回はざっとK8sの概要をご説明しました。なんとなくご理解いただけましたでしょうか。

AWS、Azure、GCP、IBMなどがそれぞれK8sのマネージドサービスを展開していることからも、その注目度が伺えます。

今後アプリケーション開発の現場で必須のスキルとなるであろうK8sについて、本シリーズでは実機確認を交えて習得できるものにしていきますので、続編をお待ちいただけるとうれしいです。

それでは今回は以上です。

それじゃあまたね。

第2回記事をアップしました!

タイトルとURLをコピーしました