[レポート]Cloud CodeとコンテナツールでKubernetesを使った開発を徹底効率化 #GoogleNext19

Cloud CodeとコンテナツールでKubernetesを使った開発を徹底効率化のセッション参加レポートです。 Cloud Codeにより、Kubernetesを使ったローカル開発の煩わしさとして挙げられる3つが改善することがデモから見て取れました。
2019.07.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「Cloud CodeとコンテナツールでKubernetesを使った開発を徹底効率化」のセッション参加レポートです。

セッション情報

https://cloud.withgoogle.com/next/tokyo/sessions?session=D1-2-S02

Kubernetes を使った開発は、今やデファクトと呼べるほどに普及しました。Kubernetes クラスタ管理を Google Kubernetes Engine にオフロードできる一方で、Kubernetes を使った開発では、従来とは異なった知識、開発フローが求められます。「Kubernetes の学習コストが高い」「ローカル開発で手間がかかる」といった声を耳にすることも多いでしょう。 本セッションでは、Cloud Code、skaffold、Tekton などを使って、Kubernetes 開発をどのように効率化するか、デモを中心にご紹介します。Kubernetes は怖くない!
岩成 祐樹 氏 Google Cloud カスタマー エンジニア

セッションの前提

GCPの実行環境の選択肢。これらから各プロダクトに合う環境を選択する。

  • GAE
  • Cloud Run
  • GKE

セッション概要

Kubernetesを使った開発の効率化について紹介。

Kubernetesを使った開発ワークフロー

  1. ローカル開発
  2. CI
  3. CD

セッションのターゲットは「ローカル開発」

Kubernetesを使ったローカル開発の効率化

ローカル開発における流れ

Code -> Build -> Push -> Deploy ->
               Deploy -> Connect -> Verify app
YAML -> Patch -> Deploy ->

※↑ 開発者はCodeにフォーカスしたいがやることが沢山ある

ローカル開発の難しさ

Kubernetesはスケーラブルで柔軟であるが

  • Painful Development Cycle: コードを変更するたびに繰り返し作業が発生
  • Context Switch: コンテキストスイッチにより生産性が低下
  • High Learning Cost: Kubernetes、関連ツールをすべて覚えるのは困難

Cloud Code for IDEs

  • Google Cloud Codeは統合されたツールセット
  • コードを書き、価値を高めることにフォーカス
  • Visual Studio CodeとIntelliJ向けに提供

https://cloud.google.com/code/?hl=ja

特徴

  • Kubernetesの開発サイクル
  • デバッグ
  • クラスタ管理
  • テンプレートと編集支援
  • エコシステムとの統合
  • GCPとの統合

Skaffold

Kubernetesアプリケーションの継続的デプロイメントをサポートするCLI。
クライアントのみで動作し、プラグイン機構で拡張も可能。
ビルド/プッシュ/デプロイを自動化できる。

Cloud Codeデモ

Cloud CodeはすべてVSCodeのコマンドパレットから操作できる。
以下の順番でCloud Codeの操作デモを実施。

  1. VSCodeのプラグインからCloud Code for Visual Studio Codeをインストールする
  2. Cloud CodeからKubernetesクラスタを作成する(デモではDocker for Desktopを使うため作らない)
    • 大阪リージョン
    • クラスタ名
    • ノード数
    • ノードのタイプ
    • ...
  3. ローカルのDocker for Desktop ClusterにKubernetesアプリケーションを作る
    • .vscode, Kubernetes-manifests, skaffold.yaml, Dockerfile等が準備済みのサンプル
  4. Kubernetesアプリケーションをデプロイする
    • Cloud Codeのデプロイには2つあるがデモでは前者
    • Continuous Deploy: コードの変更を検知してデプロイする
    • Deploy
  5. Pythonコードを編集し、ビルド/プッシュ/デプロイがされる
  6. ログを見るためにコンテナに接続して、標準出力を確認する
  7. Pod数を変更してスケールアウトする
  8. Get Terminalからコンテナにターミナル接続する
  9. コンテナの中のリソースを削除する
  10. 既存のアプリケーションに設定を追加する
  11. Deployする(Skaffoldがアプリケーションを解析する)
    • backend, frontend, mongoにどのDockerfileを割り当てるか
  12. デバッグの設定を追加する
    • launch.jsonのlocalRootのソースパスを変更する(${workspacefolder}/src/frontend)
  13. デバッグの画面からアプリケーションを実行する
    • デバッグを開始するとデプロイメントが走る
  14. ブレイクポイントを指定し、ブラウザから該当行が実行される操作をするとVSCodeから実行時のローカル変数を確認・変更できる

スピーカーによるまとめ

Cloud Codeによって、Kubernetesや関連ツールの学習コストを抑えつつ、日々の開発効率を上げられる。

さいごに

Cloud Codeにより、Kubernetesを使ったローカル開発の煩わしさとして挙げられる3つが改善することがデモから見て取れました。

  • Painful Development Cycle: コードを変更するたびに繰り返し作業が発生
  • Context Switch: コンテキストスイッチにより生産性が低下
  • High Learning Cost: Kubernetes、関連ツールをすべて覚えるのは困難

特にContinuous Deploy機能により、コード編集したときにビルド/プッシュ/デプロイが自動的に実行されるのは、コード編集から動作検証までのサイクルが目に見えて改善するのが分かりました。