はじめに
こんにちは!
本記事は「本気で学ぶKubernetes」シリーズの第18回です。このシリーズでは、Kubernetesの基礎から実践まで、段階的に学んでいきます。
このシリーズは、第1回から順に読むことで体系的に学べる構成にしています。
まだご覧になっていない方は、ぜひ最初からご覧ください!
さて、今回は、いよいよGoogle CloudのマネージドKubernetesサービス「GKE(Google Kubernetes Engine)」について学んでいきたいと思います!
この記事は人間がKubernetesの公式ドキュメントを読み漁りながら書いていますのでご安心ください!
TL;DR
忙しい方のために要点だけ図示しておきます!
Google Kubernetes Engineとは
これまでminikubeを使ってローカル環境でKubernetesを操作してきました。
実際にKubernetesを本番環境で運用していくとなると、選択肢としては大きく2つあります。
- 自分でKubernetesクラスタを構築する(Self-managed)
- マネージドKubernetesサービスを使う(Managed)
自分で構築する場合は、コントロールプレーンやWorkerノードのセットアップ、Kubernetesのインストール、高可用性構成の設計など、Kubernetesにおける全ての分野で高度な専門知識が必要になります。
そこで便利なのがマネージドKubernetesサービスです。
GKEはGoogle Cloudが提供しているマネージドのKubernetesサービスで、管理が大変になりがちなコントロールプレーンをGoogle Cloudが行ってくれます。
Google Cloud側がコントロールプレーンの可用性やバージョン管理に責任を持ってくれるため、運用担当者はアプリケーションのデプロイやサービスの改善に集中することができます。
他のクラウドプロバイダーでも、AWSにはEKS(Elastic Kubernetes Service)、AzureにはAKS(Azure Kubernetes Service)といった同様のサービスがあります。
今回は、Kubernetesを生み出したGoogleが提供する「GKE」について深掘りしていきます。
出典: GKE公式ドキュメント
GKEの主な特徴
GKEにはマネージドサービスならではの便利な機能がいくつも備わっていますので4つ分けて説明します。
自動スケーリング
アクセスが増えてPodが足りなくなったら自動でPodを増やしてくれます。さらにはPodを動かすためのNodeが足りなくなれば、自動でNodeを追加するといった設定も可能です。
逆にアクセスが減ったら自動でスケールダウンしてくれるので、リソースの無駄をなくすこともできます。
自動修復(Auto-repair)
GKEでも自動修復機能が利用でき、Nodeに問題が発生して応答しなくなった場合は自動で検知して新しいNodeに置き換えることができます。
Nodeが復旧すれば、その上で動いていたPodもKubernetesの機能によって自動で再スケジュールされます。
自動アップグレード
Kubernetesは進化が早く、約3〜4ヶ月ごとに新しいバージョンがリリースされます。
画面操作だけで簡単にアップグレードを行うことができますし、自動アップグレードを有効にしておけばGoogleが検証済みの安定したバージョンへ自動的に更新させることも可能です。
Google Cloud サービスとの連携
GKEはGoogle Cloudのエコシステムの一部です。
例えば、データベースにはCloud SQL、ファイルストレージにはCloud Storage、ログ管理にはCloud Loggingといったマネージドサービスとスムーズに連携できますので、クラウドネイティブにシステムを設計することができます。
AutopilotとStandardモードについて
現在のGKEには「Autopilot」と「Standard」という2つの運用モードがあります。
どちらを選ぶかで運用方法や課金体系が大きく変わるため、プロジェクトの要件に合わせて適切に選択する必要があります。
Autopilotとは
Autopilotはその名の通り「自動操縦」モードです。
Nodeの管理が自動化されているため、運用者自身がNodeの数やスペック、OSのパッチ当てなどを気にする必要がないのが最大の特徴です。
セキュリティ設定もGoogleのベストプラクティスがデフォルトで適用されており、セキュアな環境を即座に利用開始できるのもメリットと思います。
重要なのは、課金が「Podがリクエストしたリソース量」に対して発生することです。Node単位ではないため、無駄な空きリソースに対するコストが発生しません。
Standardとは
Standardモードは、Nodeの管理を含め、クラスタ構成の全てを自分で設定して運用できるモードです。
自由度が非常に高く、Kubernetesの機能のほとんどを利用できるため、OSレベルのパラメータチューニングや、特定のハードウェア要件に対応することができます。
その分、Nodeのアップグレード計画やセキュリティ設定など、運用者の責任範囲が広くなります。
どちらを使っていくべきか
基本的にはGoogle Cloudのベストプラクティスに沿って手軽かつセキュアに運用できるAutopilotから始めるのが良いかなと思います。
運用負荷も大幅に下げられるのでアプリケーションの開発に集中しやすいですね。
一方Standardは、OSレベルの細かいチューニングが必要な場合や、特定の要件がある場合に選びます。既存のKubernetes運用の仕組みがあって詳細な制御が必要な場合も、Standardが適しているかなと思います。
「Autopilot」にもSLAが設定されているので、むしろGoogle Cloudが推奨するモダンなKubernetes運用がしやすい設定とも言えます。
GKEの課金の仕組み
GKEの課金は選んだモードによって大きく異なります。
クラスター管理手数料
AutopilotでもStandardでも、クラスター管理手数料として1クラスターあたり$0.10/時がかかります。
ただし、GKEには月額$74.40の無料枠があり、1つの請求先アカウントにつきAutopilotクラスタまたはゾーンStandardクラスタ1つ分の管理手数料が実質無料になります。
そのためクラスタを1つだけ使う場合についてクラスター管理手数料を気にせず利用することができます。
Autopilotモードの課金
このモードではPodに設定したCPUやメモリ、ディスクの使用量に応じて課金されます。
使用したリソースにのみ課金されるため、例えばNodeに空きスペースがあってもそこには課金されず無駄なコストが発生しません。
Autopilotではクラスター管理手数料がPod課金に組み込まれている形となります。
Standardモードの課金
こちらのモードでは起動しているNodeのマシンタイプと台数に応じて課金されます。
Podが1つも動いていなくても、Nodeが起動していれば全額課金されるので注意が必要です。
Standardではクラスター管理手数料とNode課金が別々に請求されます。
課金を抑えるコツ
GKEを試す際は使い終わったらクラスターごと削除するのが鉄則です(クラウドサービス全般に言えると思いますが)。
特に、LoadBalancerタイプのService(外部IP)や、Persistent Volume(ディスク)は、クラスター削除時に消し忘れると課金が継続する場合があるので注意してください。
Autopilotモードなら、Podを削除すればリソース課金も止まりますし無料枠の範囲内であれば学習用途には最適かなと思います。
料金体系はドキュメントに詳細に記載されていますので、併せてご覧ください。
出典: GKE料金
まとめと次回予告
今回はGKE(Google Kubernetes Engine)の概要について学びました。
これまでminikubeでローカル環境のKubernetesを学んできましたが、本番環境で使う場合はGKEのようなマネージドサービスを使うのが一般的です。
GKEはGoogle Cloudが提供するマネージドKubernetesサービスで、コントロールプレーンの管理をGoogle Cloudが行ってくれます。
また自動スケーリングや自動修復、自動アップグレードといった便利な機能が備わっており、Kubernetesの運用負荷を大幅に削減できるサービスでした。
運用負荷が低くセキュアな環境を使いたい場合はAutopilotを使い、より細かい制御が必要な場合はStandardモードを選択するということを押さえておきましょう!
次回は、実際にGKEクラスタを作成して、アプリケーションをデプロイするところまでやっていきたいと思います!
それでは、また次回!
