非構造化リポジトリを使用する

非構造化リポジトリを使用すると、最も便利な方法でリポジトリを整理できます。この柔軟性により、既存の Kubernetes 構成を Config Sync リポジトリと同期させることができます。たとえば、Helm チャートをクラスタに同期するには、helm template コマンドを実行して、レンダリングされたマニフェストをリポジトリに commit します。詳細については、Config Sync と Helm の使用のチュートリアルをご覧ください。

ほとんどのユーザーには、非構造化形式の使用をおすすめします。ただし、階層リポジトリを作成して、構成ファイルをカテゴリに分類することもできます。階層リポジトリのルールに従わずに階層型ポリシーを作成する場合は、Hierarchy Controller の使用を検討してください。

制限事項

非構造化リポジトリには次の制限があります。

  • 非構造化リポジトリでは Repo または HierarchyConfig Kubernetes オブジェクトを使用できません。

  • 抽象名前空間は、非構造化リポジトリではサポートされていません。

  • nomos vet コマンドを使用する場合は、--source-format=unstructured フラグを追加します。次に例を示します。

    nomos vet --source-format=unstructured
    

名前空間スコープ オブジェクト

非構造化リポジトリで NamespaceSelector を宣言できます。NamespaceSelector を宣言するには、metadata.namespace アノテーションまたは NamespaceSelector アノテーションのどちらかを追加します。両方のアノテーションを宣言することはできません。名前空間スコープのリソースで metadata.namespace または NamespaceSelector アノテーションが宣言されていない場合、Config Sync はクラスタのデフォルトの名前空間を使用します。詳細については、構成ファイルが影響を与える名前空間を制限するをご覧ください。

クラスタ スコープ オブジェクト

非構造化リポジトリでは、ClusterSelectors は正常に機能します。

非構造化リポジトリを構成する

非構造化リポジトリを構成するには、RootSync オブジェクトまたは ConfigManagement オブジェクトの spec.sourceFormat の値を unstructured に設定します。

RootSync

次の RootSync オブジェクトでは、非構造化リポジトリから同期するように Anthos Config Management を構成します。

# root-sync.yaml
# If you are using a Config Sync version earlier than 1.7,
# use: apiVersion: configsync.gke.io/v1alpha1
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
  # If you are using a Config Sync version 1.11.0 or later, you can use any valid name.
  name: root-sync
  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

SECRET_NAME は、Secret の名前に置き換えます。

ConfigManagement

次の ConfigManagement オブジェクトでは、継続的インテグレーション パイプラインを設定し、同期先のリポジトリが構造化されていないことを指定します。

# config-management.yaml

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: CLUSTER_NAME
  sourceFormat: unstructured
  git:
    syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
    syncBranch: main
    secretType: ssh
    policyDir: ci-pipeline-unstructured

spec フィールドに追加できるフィールドの全一覧については、ConfigManagement フィールドをご覧ください。

階層型リポジトリを非構造化リポジトリに変換する

階層型リポジトリを使用していて、それを非構造化リポジトリに変換する場合は、リポジトリで次のコマンドを実行します。

nomos hydrate PATH

PATH は、作業ディレクトリのパスに置き換えます。

これにより、現在の作業ディレクトリに compiled/ ディレクトリが作成されます。このディレクトリで、登録済みのクラスタごとにサブディレクトリが作成され、完全に解決された構成ファイルが保存されます。各サブディレクトリは非構造化リポジトリで使用できます。

詳細については、nomos コマンドをご覧ください。

リポジトリを手動で変換する場合は、次の手順を行います。

  1. system/ リポジトリの Repo 構成ファイルを Git リポジトリから削除します。非構造化リポジトリに Repo リソースは必要ありません。

  2. 非構造化リポジトリでは、抽象名前空間ディレクトリはサポートされていません。namespaces/ ディレクトリとそのサブディレクトリに元々含まれていたすべてのリソースの名前空間を宣言する必要があります。

  3. 名前空間の継承は非構造化リポジトリでサポートされていません。したがって、もともと下位の名前空間に継承されているすべてのリソース、つまり、もともと 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 ディレクトリから同期するように構成します。

次のステップ