GCP 上の 2 つの K8S クラスタの設定差異を diff で確認する

2021-05-21Bash,GCP

はじめに

既存の GKE ( Google Kubernetes Engine )クラスタが 2 つありました。

両者とも前任者が手作業で作成していましたが、すでに設定に乖離があることが想定されていました。
乖離を埋めるために、両者にどれだけの違いがあるのか確認しておきたいと思いました。

差異を確認するために工夫した方法を掲載します。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, version 5.1.8(1)-release (x86_64-apple-darwin20.3.0)

$ diff --version | head -n 2
diff (GNU diffutils) 2.8.1
Copyright (C) 2002 Free Software Foundation, Inc.

GCP 上の K8S クラスタの設定を抜き出す

GCP 上の Kubernetes クラスタの設定を抜き出すために、 gcloud コマンドが利用できます。

例えば以下のような環境に Kubernetes クラスタが作成されていたとします。

  • プロジェクト ID : GCP_MY_PROJECT_ID
  • ゾーン名 : asia_northeast1_b
  • Kubernetes クラスタ名 : GCP_MY_CLUSTER_NAME

この Kubernetes クラスタの設定を抜き出すには、以下のコマンドを実行します。

$ gcloud container clusters describe \
  --project GCP_MY_PROJECT_ID \
  --zone asia-northeast1-b \
  GCP_MY_CLUSTER_NAME > cluster-a-info.yaml

ファイルは YAML 形式で出力されます。

環境が2つあれば、リダイレクト先のファイルをそれぞれ cluster-a-info.yamlcluster-b-info.yaml のように別のものに分けて出力しておきます。

YAML ファイルの要素をソート

出力された YAML  ファイルをそのまま diff すると、大量に差分が出てきてしまいます。
YAML の各属性情報がソートされていないためです。

YAML の属性情報をソートするために、 yaml-sorter というコマンドが便利です。
過去に取り上げているので詳細はそちらを参照ください。

$ yaml-sorter -i cluster-a-info.yaml

$ yaml-sorter -i cluster-b-info.yaml

差分を確認

最後に 2 つのファイルを diff します。

$ diff cluster-a-info.yaml cluster-b-info.yaml

単純に diff してもいいですが、僕は Vim が使い慣れているので Vim の機能である vimdiff コマンドを使いました。

$ vimdiff cluster-a-info.yaml cluster-b-info.yaml

差分が左右に表示され、見やすいです。

結構、設定の違いがありますね(汗)

ひとこと

yaml-sorter は  YAML 形式のマニフェストファイルや設定ファイルなどを pretty するにも便利かと思います。

2021-05-21Bash,GCP