メインコンテンツまでスキップ

kubernetes

綴が長いことから略してk8s(8はubernete)という8文字の意味
従来の仮想化とは異なるアプローチのシステム構築方法であり、使い方によっては開発工数や運用工数の削減に大きく貢献する。
kubernetesの基礎技術としてあるのがDocker

Dockerを本番サーバで使うときは、さまざまな運用上の工夫が必要。 たとえば

  • 障害が生じても止まらないようにするための冗長性
  • 負荷が高まっても耐えられるようにするスケーラビリティ
  • データを失わないためのバックアップ
  • システム更新時の入れ替え など

こうした運用を手助けするのがKubernetes

Kubernetesでのenvを暗号化する

参考URL

超初心者入門

参考URL

プロジェクトでの採用事例

対比概念はEC2を使った汎用的な構成とする。

  • デプロイが、Kubernetesの仕組みをそのまま使えば良いため、車輪の再発明をせずに済む。
  • インフラ観点のセキュリティアップデートがKubernetesの更新とコンテナイメージの更新に分離できる。
    • Kubernetesの更新は、手順を整備することで、サービスのダウン無く実施することができる
    • コンテナイメージの更新は、通常のデプロイと同等のフローで更新可能なため、サーできるコンテナビスのダウン無く実施することができる
  • できるInfrastructure as Codeを強制される
  • Gitを用いたインフラ構成のバージョニングが強制されるため、構成変更の履歴を追いやすい。
  • EC2にSSHして手で直接設定を触って、その設定変更の記録を残し忘れ、 EC2再作成時永遠にその設定が失われる…などというよくある事故を防げる

kubernetesの状態

理解すべきはkubernetesは自律的なシステムであり、コンテナーを作る、ネットワークを作るなど1つずつ命令するような使い方を想定していない。 kubernetesはkubernetesクラスター全体の状態をetcdというDBで管理しており、そのDBの状態を変更することで構成を変更するやり方をする。

コンテナーの本番運用

コンテナーの本番運用は開発の時と、考え方が大きく異る 使いやすさよりも、堅牢性が第一に求められる。

オーケストレーションツールの構成

上記の構成では実際にはなくなったり新しく作られたりしている点に注意。 コンテナーの中にデータを保持するような仕組みはNG コンテナーが障害を起こしてなくなればそのコンテナーの中のデータを失われる。 コンテナーの外にデータを出す必要があるが、バインドマウントやボリュームマウントでは2つの側面が解決しない。 これらの解決にはサーバ間で共有できるストレージが必要。 ※AWSで共有ストレージを作成するにはS3やEBSを使うことができる。