非構造化リポジトリを使用すると、最も便利な方法でリポジトリを整理できます。この柔軟性により、既存の Kubernetes 構成を Config Sync リポジトリと同期させることができます。たとえば、Helm チャートをクラスタに同期するには、helm template
コマンドを実行して、レンダリングされたマニフェストをリポジトリに commit します。詳細については、Config Sync と Helm の使用のチュートリアルをご覧ください。
ほとんどのユースケースでは、非構造化リポジトリをおすすめします。ただし、階層リポジトリを作成して、構成ファイルをカテゴリに分類することもできます。
制限事項
非構造化リポジトリには次の制限があります。
非構造化リポジトリでは
HierarchyConfig
Kubernetes オブジェクトを使用できません。抽象 Namespaceは、非構造化リポジトリではサポートされていません。
nomos vet
コマンドを使用する場合は、--source-format=unstructured
フラグを追加します。次に例を示します。nomos vet --source-format=unstructured
名前空間スコープ オブジェクト
非構造化リポジトリで NamespaceSelector を宣言できます。NamespaceSelector を宣言するには、metadata.namespace
アノテーションまたは NamespaceSelector
アノテーションのどちらかを追加します。両方のアノテーションを宣言することはできません。名前空間スコープのリソースで metadata.namespace
または NamespaceSelector
アノテーションが宣言されていない場合、Config Sync はクラスタのデフォルトの名前空間を使用します。詳細については、構成ファイルが影響を与える名前空間を制限するをご覧ください。
クラスタ スコープ オブジェクト
非構造化リポジトリでは、ClusterSelectors
は正常に機能します。
非構造化リポジトリを構成する
非構造化リポジトリを構成するには、RootSync オブジェクトで spec.sourceFormat
の値を unstructured
に設定します。
# root-sync.yaml
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: ROOT_SYNC_NAME
namespace: config-management-system
spec:
sourceFormat: unstructured
git:
repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
branch: main
dir: config-sync-quickstart/multirepo/root
auth: ssh
secretRef:
name: SECRET_NAME
以下を置き換えます。
ROOT_SYNC_NAME
: RootSync オブジェクトの名前を追加します。この名前はクラスタ内で一意で、26 文字以下にする必要があります。SECRET_NAME
は、Secret の名前に置き換えます。
階層型リポジトリを非構造化リポジトリに変換する
階層型リポジトリを使用していて、それを非構造化リポジトリに変換する場合は、リポジトリで次のコマンドを実行します。
nomos hydrate PATH
PATH
は、ディレクトリのパスに置き換えます。
このコマンドで、現在の作業ディレクトリに compiled/
ディレクトリが作成されます。このディレクトリで、登録済みのクラスタごとにサブディレクトリが作成され、完全に解決された構成ファイルが保存されます。各サブディレクトリは非構造化リポジトリで使用できます。
詳細については、nomos
コマンドをご覧ください。
リポジトリを手動で変換する場合は、次の手順を行います。
system/
リポジトリのRepo
構成ファイルを Git リポジトリから削除します。非構造化リポジトリにRepo
リソースは必要ありません。非構造化リポジトリでは、抽象名前空間ディレクトリはサポートされていません。
namespaces/
ディレクトリとそのサブディレクトリに元々含まれていたすべてのリソースの名前空間を宣言する必要があります。名前空間の継承は非構造化リポジトリでサポートされていません。したがって、もともと下位の名前空間に継承されているすべてのリソース、つまり、もともと
namespaces/
ディレクトリにあるリソースを宣言する必要があります。
非構造化リポジトリの形式例
次の例は、非構造化リポジトリで構成ファイル(Google Cloud リソースを含む)を整理する方法を示しています。
├── manifests
│ ├── access-control
│ │ ├── ...
│ ├── change-control
│ │ ├── ...
│ ├── git-ops
│ │ └── ...
│ ├── logging-monitoring
│ │ └── ...
│ ├── networking
│ │ └── ...
│ ├── project-factory
│ │ └── ...
│ └── resource-hierarchy
│ │ └── ...
├── raw-configs
│ ├── access-control
│ │ └── ...
│ ├── change-control
│ │ └── ...
│ ├── git-ops
│ │ └── ...
│ ├── logging-monitoring
│ │ └── ...
│ ├── networking
│ │ └── ...
│ ├── project-factory
│ │ └── ...
│ └── resource-hierarchy
│ │ └── ...
└── scripts
└── render.sh
この例では、未加工の構成は raw-configs
ディレクトリにあります。スクリプトまたは自動パイプラインを使用して、未加工の構成ファイルをレンダリングし、その出力を manifests
ディレクトリに格納できます。Config Sync を構成するときに、manifests
ディレクトリから同期するように構成します。