HelmとSkaffoldを使ってAPIとWebの開発環境を構築する

HelmとSkaffoldを使ってAPIとWebの開発環境を構築する

Kubernetes

HelmとSkaffoldを使ってAPIとWebの開発環境を構築したので、メモしておきます。

Helmとは

HelmとはKubernetesクラスタのためのパッケージマネージャーです。

1つのアプリケーションとしての動作を行うために必要なKubernetesの様々な種類のリソースをひとまとめにして管理する仕組みと、そのためのツールセットを提供するものです。

Helm の基本的な概念として以下があります。

  • Chart:アプリケーションのインスタンスを作成するために必要な設定ファイル群
  • Config:Chartインストール時にアプリケーションのための各種パラメータを設定することができる
  • Release:Chartがインストールされ、アプリケーションが実行可能な状態

HelmではChartという設定ファイル群でKubernetesの全てのマニフェストを管理します。

一般に公開されているChartを利用する際は、公開されているHelmリポジトリからChartを取得して、変数化されているパラメーターのみを書き換え、自身のKubernetesクラスタにデプロイします。

 

Skaffoldとは

SkaffoldはKubernetesへの継続的な開発を容易にするコマンドラインツールです。

開発環境では、アプリケーションのソースコードの変更を検知してDockerコンテナをBuildし、コンテナレジストリへのPushした後、KubernetesクラスタにDeployまでを自動で行ってくれます。

また、開発環境におけるログやポートフォワードの機能もあります。他にも 本番やステージング環境におけるパイプライン内でCI/CDの役割を担ってくれます。

 

HelmとSkaffoldで開発環境を構築する

HelmとSkaffoldで開発環境を構築するにあたり、API・DB・WebそれぞれをSkaffold化しています。今回例としてOKRに関するAPIとWebを開発しています。

ディレクトリ構成

ディレクトリ構成は以下のようになっています。

APIをSkaffold化する

今回の例であるokr-apiをSkaffold化します。

まずはHelmのChartをSkaffoldに対応させるため、Chart.ymlとvalues.ymlを作成します。

Chart.yaml

Chart.yamlではChartの名前や説明などの情報をYAML形式で記述します。

・Chart.yaml

values.yaml

values.yamlでは、パラメータおよびそのデフォルト値の組み合わせを記述します。

ここで指定されたパラメータをtemplatesディレクトリ内に格納されているテンプレートに与えてKubernetesのマニフェストファイルを作成します。

・values.yml

 

templates

templatesはマニフェストファイルのTemplateが格納されているディレクトリです。

Chartを構成するKubernetesマニフェストはTemplateと呼ばれるファイルによって生成されます。

Templateはマニフェストファイルのテンプレートに変数を埋め込んだり、環境に応じて変更される部分を抽象化することができます。

今回は、DeploymentとServiceをこのtemplates配下において抽象化しています。

・templates/deployment.yaml

 

 

・templates/service.yaml

 

skaffold.yaml

skaffold.yamlを作成して記述していきます。

・skaffold.yaml

中身の詳細は以下の通りです。

apiVersion

使用するskaffoldのバージョンを指定

kind

Configを指定

metadata

Configに関する追加情報。プロジェクトの識別子

build

ビルドしたいDocker Imageを指定

pushはビルドを行い、Docker Hubのリポジトリにプッシュするかを指定します。

useBuildKitはBuildKitを使用してDockerイメージをビルドするかどうか(無指定の場合はDockerのデフォルトを使用)

BuildKitは高速でのビルドが可能になるdockerのイメージビルダーです。ビルド短縮のためにもtrueにします。

deploy

デプロイしたい yaml が保存されている場所を指定

ローカルでAPI開発する時

APIを開発する際はDBのみKubernetes上で起動し、APIはローカルのサーバで起動しています。

以下のYAMLファイルを作成しskaffold devすることで、DBの起動とローカルへのポートフォワーディングをしています。

・environments/okr-api/deps.yaml

 

 

ローカルでWeb開発するとき

Webを開発する際は、APIとDBをKubernetes上で起動し、Webをローカルで起動しています。

以下のYAMLファイルを作成し、APIとDBのskaffold.yamlを起動しています。

・environments/okr-web/deps.yaml

 

 

全体E2Eを流すとき

全体E2Eを流す用にAPI・DB・WEBをローカルで起動するようなYAMLファイルを作成しています。

・environments/okr-web/all.yaml

 

 

参考情報

skaffold.yaml | Skaffold

Easy and Repeatable Kubernetes Developme…
skaffold.dev