GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

Google オフィスで開催されたKubernetes/GKE セミナーに参加してきました!

こんにちは!7月にGameWithに入社し、新規事業でエンジニアとして働いている田口航です!

つい先日奇跡的に水着ジャンヌを引けて、今年の運を使い切ったかなと悲観しているところです・・・。

現在GameWithはAWSを利用しているのですが、僕が携わっている新規事業はGCPを利用しています。

構成をGAEとGKEで悩んだのですが、運用フェーズでGAEより融通が効きk8sの知見も貯まることからGKEを採用しました。

GKEはまだまだ情報量も少なく、所々詰まりながら開発を行っています(nginxとphpを別Podで立てる場合や固定IPなどなど)。

そんな中、先日Google様のKubernetes/GKE セミナーの招待をいただき、弊社エンジニア3人で参加してきました!

僕自身は本番環境の運用等の知見はあまりなく不安多めで参加したのですが、とてもわかりやすく濃いセミナーでした。

簡単にですがセミナーの内容をレポートしていきたいと思います!

ステッカーいただきました!

Kubernetes/GKE セミナー

セミナーの様子です!

流れ

  1. Kubernetes/GKE 概要紹介
  2. 実践編
    1. CI/CD
    2. ロギング
    3. モニタリング
    4. オートスケール
    5. ログ管理
  3. 質疑応答
  4. 個別相談会(自由参加)

Kubernetes/GKE 概要紹介

Kubernetes

  • Kubernetesは「コンテナオーケストレーション」
  • k8sとよく呼ばれる
  • コンテナを中心としたインフラを構築し、デプロイする
  • 当初はGoogleが開発して、2014年にオープンソースとなった
  • 開発者はAPI/UI/CLI経由でMasterに命令が可能

GKE

  • Google Kubernetes Engine
  • ワンクリックでk8sクラスタを作成できる

実践編

CI/CD

  • この前「Cloud Build」を発表
  • GitHubとも連携
  • プログラミング言語に依存せずビルド可能
  • 一般的なビルド用コンテナが、あらかじめオープンソースとして公開されている
  • その他、様々なビルド用コンテナが、コミュニティによって公開されている

ロギング

  • Stackdriver Loggingを有効にすると自動でログを収集
  • コンテナログとシステムログを収集
  • 30日間しか保持しないので、必要に応じてBigQueryに渡す

モニタリング

  • Stackdriver Monitoringでモニタリングできる
  • リソースの使用率、CPU、メモリ等ができる
  • クラスタ、ノード、PODの段階でできる

アクセスコントロール

  • namespaceによりPODを論理的に分ける
  • RBAC(Role-based access control)
    • 各ロールがどのnamespaceに何ができるかを定義する
    • このユーザーはこのnamespaceにデプロイができる or できないなど

デプロイ、ロールバック

  • デプロイは kubectl apply -f hoge.yamlで基本はできる
  • kubectl rollout undo deploymentでデプロイをロールバックする
    • ロールバックはレプリカセットにはない機能
  • deployment strategyを設定することでアップデート方法をコントロール可能
    • 全てのPODを削除して、作り直す(本番ではやらない
  • PODをローリングアップデート
    • maxSurge アップデート用に追加で作成可能なPODの数
    • maxUnavailabele アップデート中に停止できるPODの数

リソースマネジメント

スケールアウト スケールアップ
PODレベル  POD数を制御 POD数をに対するリソース割当を制御
HPA(Horizontal Pod Autoscaler) VPA
クラスタレベル Node数を制御 Nodeのソース割当を制御
Cluster Autoscaler VM scale up
  • PODのCPU使用率がトリガー
  • GKEにはCustom HPAがあり、CPU以外をトリガーにできる

Quality of Service

  • CPU/MEMをPODに割り当てができる(最低と最大)

Pod Disruption Budget

  • ノードのアップデート時に落ちてもいいPODの数を定義

まとめ

僕は今までフロントエンドやサーバーサイドの開発が多く、本番環境の運用の知見等は多くはなかったのですが

今回のセミナーでぐっと運用の課題とk8sの解決方法の知見が深まりました!

Google の皆様、ありがとうございました!

最後に

Kubernetes/GKEの構成は事例が少なく、GameWithとしても知見は少なくチャレンジの毎日です!

こういった技術的なチャレンジが好きなエンジニアを募集しています!

ご興味のある方は是非連絡をください!

www.wantedly.com