構成ファイルの作成

このクイックスタートでは、独自の構成ファイルを作成して検証し、クラスタと同期する方法について説明します。このトピックでは、読み取り専用リポジトリを使用するクイックスタートで学んだスキルを使います。ここでは、組織のコンプライアンス チームの新しいメンバーとして、自分の構成ファイルを作成してみます。

このクイックスタートの終了後、既存のクラスタ オブジェクトの管理と非管理に関する上級クイックスタートに進むことができます。

始める前に

Anthos Config Management の使用には、有効な Anthos の使用権が必要です。詳細については、Anthos の料金をご覧ください。

  1. 読み取り専用リポジトリの使い方を説明するクイックスタートを終了します。ただし、クラスタは削除しないでください。

  2. GitHub アカウントを持っていない場合は、GitHub アカウントを作成します

  3. GitHub ドキュメントの手順に沿って GitHub アカウントに新しい SSH 認証鍵を追加します

また、Git リポジトリの fork とクローン作成にも慣れておいてください。

リポを作成する

このクイックスタートでは、自分用のリポを作成するため、foo-corp リポの fork を作成してから、作業コピーとしてローカル クローンを作成します。

  1. ブラウザで foo-corp リポにアクセスし、[Fork] ボタンをクリックします。

  2. ローカル システムで fork のクローンを作成します。[my-git-username] は GitHub ユーザー名で置き換えてください。

    git clone git@github.com:[my-git-username]/csp-config-management.git
  3. 始める前にで追加した SSH 秘密鍵で GitHub の認証を行うようにローカル システムを構成します

nomos vet pre-commit フックを作成する

変更に対して nomos vet コマンドを実行する pre-commit フックをインストールできます。このフックを使用すると、ローカル リポジトリに commit する前に、nomos vet が変更に構文エラーなどの問題がないかどうか確認します。

  1. ターミナルで、リポのクローンを作成したディレクトリに移動します。

  2. .git/hooks/pre-commit ファイルを編集します。.git/ ディレクトリに付いている . 文字に注意してください。

  3. nomos vet は、ローカルにクローンを作成されたリポジトリの foo-corp ディレクトリに対して実行する必要があります。ファイルに次の内容を追加します。[/path/to/repo] は、リポジトリのクローンを作成した場所の完全修飾パスで置き換えます。

    nomos vet --path=/path/to/repo/foo-corp

    ファイルを保存します。

  4. .git/hooks/pre-commit ファイルが実行可能であることを確認します。

    chmod +x .git/hooks/pre-commit
  5. git commit で pre-commit のテストを行います。nomos vet が実行され、エラー メッセージが表示されます。

クラスタを構成する

git-creds Secret を作成します。

  1. Git リポジトリに登録されている秘密鍵を取得します。ファイルのダウンロード方法と保存場所に注意してください。Git リポジトリの認証で使用される場合があります。

  2. Kubernetes クラスタに git-creds という名前の Secret として秘密鍵を保存します。

    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=ssh=/path/to/[KEYPAIR-PRIVATE-KEY-FILENAME]
    
  3. ローカル ディスクの秘密鍵を保護するか、削除します。

ConfigManagement オブジェクトを更新する

読み取り専用リポジトリの使い方を説明するクイックスタートで作成した config-management.yaml ファイルを編集します。次のように変更します。

  1. syncRepo の値を fork のアドレスに更新します。my-github-username は GitHub のユーザー名で置き換えます。
  2. secretType の値を ssh に更新します。クラスタ内に git-creds Secret が存在している必要があります。

次の例は、更新後の内容を表しています。フィールドの説明について、インストール手順をご覧ください。

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  git:
    syncRepo: git@github.com:my-github-username/csp-config-management.git
    syncBranch: 1.0.0
    secretType: ssh
    policyDir: "foo-corp"

クラスタに構成を適用します。

kubectl apply -f config-management.yaml

コマンドが成功すると、Kubernetes はクラスタの Config Management Operator を更新し、リポジトリからクラスタの構成の同期を開始します。Config Management Operator が実行されていることを確認するには、config-management-system 名前空間で実行されている Pod のリストを取得します。

kubectl get pods -n config-management-system
NAME                                   READY     STATUS    RESTARTS   AGE
git-importer-5f8bdb59bd-7nn5m          2/2       Running   0          2m
monitor-58c48fbc66-ggrmd               1/1       Running   0          2m
syncer-7bbfd7686b-dxb45                1/1       Running   0          2m

この時点で、fork に同じコンテンツがあるため、クラスタの構成は読み取り専用リポジトリの使い方のクイックスタートと同じ内容になります。このクイックスタートの演習を行うと、同じ結果を確認できます。

リポジトリ内の構成ファイルを変更する

リポジトリで構成ファイルを作成または変更すると、Anthos Config Management が commit を検出し、新しい構成を関連する Kubernetes オブジェクトに適用します。

この例では、ユーザー jane@foo-corp.comnamespace-readers ClusterRoleBinding に追加します。

ターミナルを開いて次のコマンドを実行し、namespace-readers ClusterRoleBinding に対する変更を監視します。

kubectl get clusterrolebindings namespace-readers -o yaml --watch

別のターミナルを開き、リポのローカル クローンに移動します。cluster/namespace-reader-clusterrolebinding.yaml ファイルを編集して、jane@foo-corp.comsubjects フィールドに追加します。編集後のファイルの内容は次のとおりです。

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-readers
subjects:
- kind: User
  name: cheryl@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
- kind: User
  name: jane@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: namespace-reader
  apiGroup: rbac.authorization.k8s.io

ファイルを保存します。commit を作成します。

git add cluster/namespace-reader-clusterrolebinding.yaml

git commit -m "Add Jane to namespace-reader"

commit を行うたびに nomos vet コマンドが実行されます。構文エラーのある構成は commit されません。このことを確認するには、commit を行う前に、ファイルに意図的に構文エラーを追加します(たとえば、: 文字を削除します)。

fork に commit を push します。

git push origin master

namespace-reader オブジェクトを監視しているターミナルに戻ります。 数秒後、変更がクラスタに同期されます。

変更を元に戻すのも簡単です。Git を使用していたターミナルに戻ります。git log コマンドを使用してハッシュ(この例では先頭のエントリ)を検索して、元に戻します。次のコマンドを使用し、[HASH] は実際の commit のハッシュに置き換えます。元に戻すと、新しい commit が作成されるため、nomos vet が結果の構成を再度確認します。

git revert [HASH]

git push origin master

namespace-reader オブジェクトを監視しているターミナルに戻ります。jane@foo-corp.com は ClusterRole の件名リストに含まれていません。

namespace-reader オブジェクトの監視を停止するには、Ctrl + C キーを押します。

この演習から、変更をリポに commit すると、Anthos Config Management によってオブジェクトがリポ内の構成ファイルと同期されることがわかります。

クリーンアップ

このトピックの演習を終えたら、次のクリーンアップ作業を行います。

  • テストに使用したクラスタを削除します。
  • fork のローカル クローンを削除します。
  • ローカルの SSH 秘密鍵を削除します(該当する場合)。
  • サンプル リポジトリの fork を削除します。これにより、リポジトリのみに関連付けられたデプロイキーが削除されます。

次のステップ