Google Cloud と Kubernetes YAML の操作

Cloud Code は、構造と有効な値の両方のスキーマに lint チェックを実行し、エラーの説明を表示することで、Kubernetes と Cloud Build の構成を容易にするよう設計されています。また、Cloud Code には一般的なスキーマ、スマート補完、ホバー操作でのドキュメント表示など、既定のソリューションが用意されています。

サポートされる YAML 構成ファイル

Cloud Code は、既定の Kubeflow などの Kubernetes カスタム リソース定義(CRD)もサポートしています。

カスタム スキーマの使用

Cloud Code を使用すると、settings.json ファイルの cloudcode.yaml.crdSchemaLocations 設定により独自の CRD スキーマを指定できます。ローカル ファイルまたは URL のどちらかを指定できます。github.com を指す URL は自動的に raw.githubusercontent.com に変換されます。

クラスタからのスキーマの pull

Kubernetes Explorer で Kubernetes v1.16 以降が実行されているクラスタに切り替えると、Cloud Code によってインストールされているすべての CRD のスキーマが自動的に pull されます。

スニペットを使って構成する

一般的な YAML スキーマ用の標準装備のスニペット(Command/Ctrl+Space を使用してオプションを表示)を使用すると、新しい YAML ファイルを簡単に構成でき、ベスト プラクティスの手順に沿って既存のファイルに追加することもできます。Cloud Code を使用すると、繰り返しフィールドを簡単に操作できます。1 つのフィールドに入力すると、Cloud Code が残りのインスタンスに値を挿入します。

Cloud Code には次のスニペットが用意されています。

  • Anthos Config Management - Cluster
  • Anthos Config Management - Cluster Selector
  • Anthos Config Management - Config Management
  • Anthos Config Management - Namespace Selector
  • Cloud Build - Cloud Run deployment
  • Cloud Build - Docker container build
  • Cloud Build - GKE deployment
  • Cloud Build - GKE Skaffold deployment
  • Cloud Build - Go build
  • Cloud Build - Terraform plan + apply
  • Config Connector - BigQueryDataset
  • Config Connector - BigQueryTable
  • Config Connector - BigtableCluster
  • Config Connector - BigtableInstance
  • Config Connector - PubSubSubscription
  • Config Connector - PubSubTopic
  • Config Connector - RedisInstance
  • Config Connector - SpannerInstance
  • Kubernetes - ConfigMap
  • Kubernetes - Deployment
  • Kubernetes - Ingress
  • Kubernetes - Pod
  • Kubernetes - Secret
  • Kubernetes - Service
  • Migrate for Anthos - Export
  • Migrate for Anthos - PersistentVolumeClaim
  • Migrate for Anthos - StatefulSet
  • Skaffold - Bazel
  • Skaffold - Getting-started
  • Skaffold - Helm deployment
  • Skaffold - Kaniko

Skaffold ファイルの同期とホットリロードを有効にする

ローカルの開発用ワークフローの効率を高め、Pod の再ビルド、再デプロイ、再起動を行わずに済むように、Skaffold は変更されたファイルをデプロイ済みコンテナにコピーできます。つまり、静的ファイルとソースコード ファイルに変更を加えた場合、その変更は数秒で反映されるため、フィードバック ループが高速化されます。

静的ファイル(HTML ファイルや CSS ファイルなど)の場合、このファイルをコピーする動作はファイルの同期と呼ばれます。

ソースコード ファイルの場合、この動作はホットリロードと呼ばれ、次のファイル形式をサポートしています。

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json

ホットリロードを構成すると、Skaffold はサポートされているファイルの変更を検出し、これらの変更をクラスタで実行中のコンテナに同期します。ホットリロードをサポートしていないファイル形式が変更されると、イメージの再ビルドがトリガーされ、Pod が再起動します。

Buildpacks を優先ビルダーとして使用している場合、ファイルの自動同期とホット リロードはデフォルトで有効になっています。Docker などの他のビルダーでは、カスタマイズするアーティファクトの skaffold.yaml で sync セクションを指定できます。

次の同期設定のいずれかを行うことができます(優先順位順)。

  • auto(Jib および Buildpacks のアーティファクトのみ。Buildpacks が指定されていない場合のデフォルトです)
  • infer
  • manual

skaffold.yaml ファイル内の次のサンプル sync セクションでは、すべての /static-html HTML ファイルをコンテナ内の static フォルダに同期するための manual 同期を指定しています。

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

ファイルの同期と同期ルールの指定の詳細については、ファイル同期に関する Skaffold のガイドをご覧ください。

コンテキストによる補完

Cloud Code は、現在のスキーマに基づいてコンテキスト補完を行い、関連するドキュメントを表示します。これにより、正しいオプションを簡単に選択できます。

Kubernetes スキーマのコンテキスト補完

YAML スキーマの検証

Cloud Code は、YAML ファイル内の無効なタグと値を報告し、可能な場合には修正を提案することで、スキーマの検証をサポートします。

名前フィールドの値に赤い下線が付され、無効な値「1234」がハイライト表示されています。テキストにカーソルを合わせると「データの型が正しくありません。文字列が想定されます」と表示されます。

カーソルを置いてドキュメントを表示する

スキーマ内の値の上にカーソルを置くと、Cloud Code が関連ドキュメントを表示します。

スキーマの上にカーソルを置いてドキュメント情報を表示

リソース定義にアクセスする

リソースの定義をすばやく表示するには、右クリックして [Go to Definition] または [Peek Definition] を選択します。

スキーマで右クリックして定義情報を表示

YAML ファイルを適用する

現在のファイルを使用して構成の変更を適用するには、コマンド パレット(Cmd/Ctrl + Shift + P を押してください)から、Cloud Code: Apply the current JSON/YAML file with Kubernetes deployed resource を実行します。

これにより、差分ビューが表示され、違いを比較できます。この変更を適用するかどうかを求められたら、[適用] をクリックします。これにより、kubectl apply -f が実行されます。

YAML ファイル間の違いの表示

ソース管理の YAML ファイルとデプロイされた YAML ファイルの違いを表示するには、コマンド パレット(Cmd/Ctrl +Shift +P を押してください)から、Cloud Code: Diff the current JSON/YAML file with Kubernetes deployed resource を使用します。

Kubernetes スキーマの差分ビュー

YAML ファイルのドライランを実行する

設定のドライランを実行してその有効性を確認するには、コマンド パレット(Cmd/Ctrl +Shift +P を押してください)から、Cloud Code: Dry-run current config for client-side validationCloud Code: Dry-run current config for client-side validation を実行します。

コマンド パレットから表示されたドライランのコマンドと、サーバー側の検証のドライランの現在の構成ファイルが選択されました

これにより、kubectl apply -f dry-run=server(または、クライアント オプションの場合は kubectl apply -f dry-run=client)が実行され、有効な検証(構成ファイルが有効でない場合はエラー メッセージ)がトースト通知として表示されます。

次の例では、構成ファイル(hello.deployment.yaml)のサーバー側でのドライラン検証によって、デプロイの作成を試行した際にエラーが返されます。これは指定された名前空間 random-namespace が存在しないためです。

サーバー側のドライラン検証は、「hello.deployment.yaml」で失敗し、トーストとしてエラー メッセージが表示されます。エラーの詳細は出力チャネルで確認できます。名前空間「random-namespace」は存在しません

Secret を操作する

構成マップと Secret の使用は、Kubernetes を使用して作業を行ううえで重要な部分です。Cloud Code で Base64 の Secret の内容を表示するには、シークレットの上にカーソルを置いてデコードされた文字列を表示します。

Cloud Code でシークレートの上にカーソルを置いてデコード