はじめに
世間では数年前からクラウドサービスが増え始め、最近でも勢い衰えることなくクラウドに移行するところも多く、エンジニアにも求められるスキルとして定着しつつあります。
そして、セットでよく語られるのがコンテナ技術で、kubernetesを使用した経験があるかどうかは現在進行形で重要性が高いものとなってます。
そんな中、kubernetesは触ったことがなかったなと反省し、これを機にまずはローカルで動かしてみよう。というのをまとめたものになります。
Kubernetesって?
「Kubernetes」(通称:k8s)とは、コンテナ仮想化ツールの運用管理・自動化を行うために開発されたオープンソースソフトウェアのことです。
Dockerは、作成したimageをもとにコンテナ化してくれるツールでしたが、kubernetesはコンテナに閉じた上で、コンテナごとにスケーリングやフェイルオーバーなどコンテナの管理をしてくれる大変ありがたいものとなっております。
※ちなみに略称であるk8sは、Kubernetesの先頭文字「K」と最終文字「s」の間の文字数が8文字なのでk8sと呼ばれているようです。
Kubernetesでやってくれること
1.自己回復機能(セルフヒーリング)
定義ファイルのマニフェストに記載している状態から逸脱した場合に、自動で修復してくれる機能
2.スケジューリング/負荷分散
マニフェストに記載している通りに自動で適切なリソース配置を行ってくれる機能
3.オートスケーリング
負荷に応じてPod数を自動で増減してくれる機能
4.ローリングアップデート
アップデートを行う際にダウンタイムが発生しないように順番に一つずつアップデートをしてくれる機能
5.ロールバック
アプリに何か問題が発生した時に前のバージョンにロールバックすることができる機能
6.永続ストレージ
コンテナに永続でデータを保存することができないので別で保存領域を設けて割り当てることでストレージとして使用することができる機能
もしKubernetesを使わずコンテナを管理した場合
手動でコントロールしていくことを考えると以下のような管理コストが発生してしまう可能性がありそうです。
コンテナが増えるほどコストもさらに膨らんでいく一方なのと、kubernetesで担保される部分もあるので、導入するメリットは非常に大きいのかなと思われます。
・処理負荷に合わせたスケーリングをする。
・各コンテナをチェックし正常に動いているか確認したり、問題があった場合は都度対応する。
・各コンテナを負荷分散させる。
...etc
Kubernetesのコンテナイメージ
実際のAPIなどはコンテナ内のサーバにて動作するので枠組みとしてはPodの中でコンテナを立てて、そこにAPIがデプロイされているイメージ。
(アクセス数が増えることによって水平スケーリングが行われる場合、このPod単位で増えて負荷分散を行うような形になる。)
下図は1ノードごとに2Podで1Podあたり2コンテナの場合のイメージ図になります。
ローカルでKubernetesを動かす
どうやらMinikubeと呼ばれるツールを使用することでローカルでもKubernetesを利用できるようなので
後編ではこちらを使ってKubernetesを動かしてみようと思います。