「Kubernetes(クバネティス)についての学んだ」に関しての考えをまとめました。
目次
SESの知人と業務内容に関して共有していると、「Kubernetesを使っているよ」と教えてくれた。Kubernetesについて「Dockerと関連があること」「k8sと訳されること」「コンテナ関連の技術だろう」くらいの知識しかなかった。その人が言うには、一言で言うには前提となる専門用語や知識が多く難しいとのこと。せっかくなのでざっくりと調べてみた。
🚀 Kubernetesとは?
Kubernetes(以下k8sと略す)は、コンテナオーケストレーションと呼ばれるツールの一つで、複数のコンテナの設定や管理を自動的に行ってくれる。オーケストレーションは、オーケストラの指示役のような認識で、コンテナを操縦する人のような認識でOKみたい!ちなみにk8sは、頭文字Kから末尾Sまでに8文字があるということで生まれた略語のよう。略語の命名法なかなか面白いな・・・。
もともはGoogleが設計したシステムツールだったが、現在はOSSとなっており、AWSなどのマネージドサービスでもK8sを使用できるサービスが提供されている
k8sによって、次のような運用が可能になる
- 障害発生時にシステムを止めないようにコンテナの自動振り分け
- 負荷分散(オートスケーリングなど)
- 死活監視
- システムの更新を一括で行う
また、管理方法はManifestファイルに記載される。ymlで管理されるようだ。
となると、気になることは、「なぜその技術が必要となったのか」だ。
🚀 なぜk8sが生まれたか
- コンテナの対象が増えると、すべてのコンテナに対してシステムの更新が大変
- LBなどの技術がコンテナにはない
- 大規模なコンテナを管理しデプロイすることは手動でしか行えず、労力とs年モン知識が必要
- Dockerは基本的に1つのコンテナにつき1つのサービスとなる(MysqlとPHPのコンテナは別)ので複数コンテナが必要
- Docker Composeでは、どのコンテナがどのサーバーに位置しているかを管理するのは複雑(docker-compose1.yml , docker-compose2.yml)
- サーバー間のコンテナ通信は複雑
🚀 k8sとDockerの違いは、「管理」か「アプリケーションの分離」か
Dockerにも複数のコンテナを管理する機能は提供されている(DockerSwarm)が、規模が大きくなり相互干渉が増えるとできないことも増えてくるため、それらを補うためのツールとしての役割がある。Dockerはコンテナを作成し、アプリケーションごとにコンテナを分離する目的であり、k8sは、それらの分離されたコンテナそれぞれを管理する目的で用いられる
🚀 参考文献
数時間で完全理解!わりとゴツいKubernetesハンズオン!! - Qiita はじめてのコンテナ・Kubernetesビジネス入門! Kubernetesとは?仕組みと構造をわかりやすく解説 - カゴヤのサーバー研究室 Kubernetesとは 概要や、Dockerとの違いを5分で入門 | クラウドエース株式会社 Kubernetesの概要 - ネットワークエンジニアを目指して kubernetesのサービスのマニフェストの書き方 Kubernetesを徹底解説する記事