マイナビニュースマイナビ

Kustomizeを使ってKubernetesでDevOps

【連載】

Kubernetes入門

【第22回】Kustomizeを使ってKubernetesでDevOps

[2021/05/17 08:00]正野 勇嗣 ブックマーク ブックマーク

Kustomize」はマニフェストの差分管理を可能にするコマンドラインツールです。冗長になりがちなマニフェストの共通化を可能にし、DRY(Don’t Repeat Yourself)の原則を簡単に適用することができます。例えば、ベース(base)とカスタマイズ部分(devやprodなど)に分け、開発環境と本番環境の環境差分を効率的に管理するといった具合です。

同ツールは、k8sのv1.14から「kubectl」に統合され、k8sの標準ツールとなりました。その結果、従来のKustomizeコマンドを個別にインストールして利用する方法に加えて、kubectlのオプションを用いることも可能になっています。

パッケージマネージャの「Helm」と比較して、柔軟性が高く、また環境間の共通化が容易な点が特徴です。アプリケーションの配布に重きを置く場合はパッケージマネージャを使うなど、用途に合わせて使い分けると良いでしょう。

公式サイト

Kustomizeの公式サイト

他プロダクトとの親和性

Kustomizeはコマンドラインでマニフェストを作る部分に特化しており、さまざまなプロダクトとの親和性が高いのが特徴です。具体的には、以下のプロダクトとの統合が図られています。

  • Kots
  • ArgoCD
  • Flux
  • Kuestack
  • Unfork
Kustomizeと統合されたプロダクト

Kustomizeと統合されたプロダクト/出典:Kustomizeの公式サイト

ベースと環境差分

Kustomizeでは、baseフォルダにベースとなるマニフェストを配置します。また、dev/prodフォルダに、以下のような環境差分を設定します。

  • nameprefix:環境名を指定
  • replicas:開発環境は1を指定し単体pod構成とし、本番環境では3を指定して冗長構成とする
  • image:開発環境では常に最新バージョンのコンテナイメージを指定し、本番環境ではシステムテストまで完了した安定バージョンを指定

公式ドキュメントには、「bases」から「vars」まで全19種類の設定可能なフィールドが掲載されています。特に、パッチ(patches)を使うと任意のマニフェストを指定できるので、細かな設定が必要になった場合に使うと良いでしょう。

フォルダ構成は以下の通りです。識別しやすいように、環境名などを付けておくと良いでしょう。

フォルダ構成

フォルダ構成

設定ファイル

上記フォルダ構成で示した各設定ファイルを見ていきましょう。

ベースとなるリソース(deployament.yaml/service.yaml)は、通常通りのマニフェストの記述方法で記述します。公式サイトのYAMLファイルなどを参考にすると良いでしょう。

base/kustomization.yamlには、ベースとなるリソース(Deployment/Service)のマニフェストへの参照を記述します。マニフェストを普段書かれている方であれば、とっつきやすいと思います。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yaml
  - service.yaml

dev/kustomization.yamlには、開発環境の環境差分を記述します。ベースのリソースへの参照パスと、環境の識別子として「dev-」を指定しています

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../base
nameprefix: dev-

※ prod/kustomization.yamlの記述はdevと同様なので、割愛します。

## kustomizeを使ってみる では、Kustomizeを使ってみましょう。Kustomizeはkubectlに組み込まれているため、インストールは必要ありません。2021年5月1日時点の最新バージョンであるkubectlのv1.21.0に組み込まれているKustomizeは、v4.0.5です。 最新バージョンはv4.1.2ですので、そちらを使いたい方は以下よりインストールしてください。 $brew install kustomize ### 実行してみる 前節のbase/dev/prodフォルダの親フォルダに移動します。以下を実行し、マニフェストを出力してみましょう。
$kubectl kustomize dev
apiVersion: v1
kind: Service
metadata:
  labels:
    run: my-nginx
  name: dev-my-nginx
spec:
~後略~
たった1コマンドでマニフェストを出力できることがわかります。 次に変更点を確認してみましょう。baseとdevの実行結果の差分をdiffコマンドで出力します。
$diff -u <(kubectl kustomize base) <(kubectl kustomize dev)
~中略~
-  name: my-nginx
+  name: dev-my-nginx
~後略~

name属性の冒頭に「dev-」が付与されたことがわかります。

* * *

繰り返しになりますが、kustomizeはKubernetes標準のツールであり、利用方法も非常にシンプルです。他のツールと組み合わせて利用することも容易にできるので、ぜひ、お手元のDevOps環境に組み込んでみてください。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

この記事に興味を持ったら"いいね!"を Click
Facebook で TECH+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
Slackで始める新しいオフィス様式
Google Workspaceをビジネスで活用する
ニューノーマル時代のオウンドメディア戦略
ミッションステートメント
次世代YouTubeクリエイターの成長戦略
IoTでできることを見つけるための発想トレーニング
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
マイクロサービス時代に活きるフレームワーク Spring WebFlux入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る