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
参考情報
事実上の標準ツールとなっているKubernetes向けデプロイツール「Helm」入門 | さくらのナレッジ