構成ファイルを変更する
このチュートリアルでは、構成ファイルを変更してクラスタに同期させる方法について説明します。このチュートリアルは、Config Sync のスタートガイドで学んだスキルを前提としています。
ここでは、組織のコンプライアンス チームの新しいメンバーとして、最初の構成ファイルを変更する場合について説明します。
目標
- Git リポジトリを作成する。
- SSH 認証鍵ペアを使用するように Config Sync を構成する。
- 構成ファイルに変更を加えて、Config Sync がその変更を適用することを確認する。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
このチュートリアルを始める前に、次のことを行ってください。
Config Sync のスタートガイドに沿って操作します。構成したクラスタは削除しないでください。
GitHub へのアクセス権がない場合は、GitHub アカウントを作成します。
GitHub ドキュメントの GitHub アカウントに新しい SSH 認証鍵を追加するの手順を完了します。このチュートリアルを完了するには、秘密鍵の場所が必要になります。
また、Git リポジトリの fork とクローン作成にも慣れておいてください。
リポジトリを作成する
このセクションでは、Anthos Config Management サンプル リポジトリの fork を作成して Git リポジトリを作成し、作業用のコピーとしてローカル クローンを作成します。
リポジトリを作成するには、次の手順を完了します。
ブラウザで Anthos Config Management サンプル リポジトリに移動し、[Fork] をクリックします。
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
ターミナルで、フォークのクローンを作成します。
git clone git@github.com:GIT_USERNAME/anthos-config-management-samples.git
GIT_USERNAME
は GitHub ユーザー名で置き換えます。始める前にで追加した SSH 秘密鍵を使用して、GitHub の認証を行うようにローカル システムを構成します。
クラスタを構成する
Git 認証情報に Kubernetes Secret を作成する
Git リポジトリに登録されている秘密鍵を取得します。ファイルのダウンロード方法と保存場所に注意してください。Git リポジトリの認証で使用される場合があります。
SSH 鍵ペアを使用して Secret を作成します。
ルート リポジトリに Secret を作成します。
kubectl create secret generic SECRET_NAME \ --namespace=config-management-system \ --from-file=ssh=PATH_TO_KEYPAIR_PRIVATE_KEY_FILENAME
各 Namespace リポジトリに Secret を作成します。
ルート リポジトリには RepoSync オブジェクトが含まれているため、RepoSync オブジェクトの Namespace(
gamestore
)に Secret を作成する必要があります。kubectl create secret generic SECRET_NAME \ --namespace=gamestore --from-file=ssh=PATH_TO_KEYPAIR_PRIVATE_KEY_FILENAME
次のように置き換えます。
- SECRET_NAME: Secret の名前を追加します。
- PATH_TO_KEYPAIR_PRIVATE_KEY_FILENAME: 秘密鍵の名前(
.pub
サフィックスのない秘密鍵)を追加します。
ローカル ディスクの秘密鍵を保護するか、削除します。
Git 構成を更新する
このセクションでは、Config Sync のスタートガイドで説明した RootSync オブジェクトと RepoSync オブジェクトを編集します。次のように変更します。
RootSync オブジェクトの次の値を更新します。
repo
の値を fork のアドレスに変更します。GIT_USERNAME
は GitHub ユーザー名で置き換えます。auth
の値をnone
からssh
に変更します。spec.git.secretRef.name
をSECRET_NAME
に設定します。クラスタ内にSECRET_NAME
Secret が存在している必要があります。
次の例は、更新された構成ファイルを示しています。
apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git branch: main dir: config-sync-quickstart/multirepo/root auth: ssh secretRef: name: SECRET_NAME
フィールドの説明については、RootSync フィールドと RepoSync フィールドをご覧ください。
クラスタに構成ファイルを適用します。
kubectl apply -f root-sync.yaml
config-sync-quickstart/multirepo/root/reposync-gamestore.yaml
に移動します。RepoSync オブジェクトの次の値を更新します。
repo
の値を fork のアドレスに変更します。GIT_USERNAME
は GitHub ユーザー名で置き換えます。auth
の値をssh
に変更します。spec.git.secretRef.name
をSECRET_NAME
に設定します。クラスタ内にSECRET_NAME
Secret が存在している必要があります。
次の例は、更新された構成ファイルを示しています。
apiVersion: configsync.gke.io/v1beta1 kind: Repo metadata: name: repo-sync namespace: gamestore spec: sourceFormat: unstructured git: repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git branch: main dir: quickstart/multirepo/namespaces/gamestore auth: ssh secretRef: name: SECRET_NAME
ルート リポジトリへの変更を commit します。
git add . git commit -m 'Update gamestore RepoSync' git push
コマンドが成功すると、Kubernetes はクラスタの Config Management Operator を更新し、リポジトリからのクラスタ構成の同期を開始します。Config Management Operator が実行されていることを確認するには、config-management-system
Namespace で実行されている Pod のリストを取得します。
kubectl get pods -n config-management-system
出力は次のようになります。
NAME READY STATUS RESTARTS AGE
admission-webhook-7dbc55cbf5-9thcj 1/1 Running 0 6d18h
admission-webhook-7dbc55cbf5-pmrxt 1/1 Running 0 6d18h
ns-reconciler-gamestore-67ff4dcbc4-x4vnh 3/3 Running 0 14m
reconciler-manager-7cdb699bf8-8lvll 2/2 Running 0 6d18h
root-reconciler-84f976b74d-mh6zd 3/3 Running 0 14m
この時点で、クラスタには Config Sync のスタートガイド チュートリアルと同じ構成ファイルがあります。fork にも同じコンテンツがあるため、そのチュートリアルの演習でも同じ結果を確認できます。
リポジトリ内の構成ファイルを変更する
リポジトリで構成を作成または変更すると、Config Sync が commit を検出し、関連する Kubernetes オブジェクトに新しい構成を適用します。
構成ファイルに追加する
このセクションでは、ユーザー admin@gamestore.com
を gamestore
Namespace の gamestore-admin
RoleBinding に追加します。
ターミナルを開いて次のコマンドを実行し、
gamestore
RoleBinding に対する変更を監視します。kubectl get rolebindings gamestore-admin -n gamestore -o yaml --watch
別のターミナルを開き、リポジトリのローカル クローンに移動します。
config-sync-quickstart/multirepo/root/rolebinding-gamestore-admin.yaml
ファイルを編集して、subjects
フィールドにadmin@gamestore.com
を追加します。編集後のファイルの内容は次のとおりです。
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: gamestore-admin namespace: gamestore subjects: - kind: ServiceAccount name: ns-reconciler-gamestore namespace: config-management-system - kind: User name: admin@gamestore.com apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: admin apiGroup: rbac.authorization.k8s.io
ファイルを保存します。
git add config-sync-quickstart/multirepo/root/rolebinding-gamestore-admin.yaml
commit を作成します。
git commit -m "Add admin@gamestore.com to cluster admin"
fork に commit を push します。
git push origin main
gamestore-admin
オブジェクトを監視しているターミナルに戻ります。数秒後、変更がクラスタに同期されます。
変更内容を元に戻す
Config Sync を使用すると、変更を簡単に戻せます。
前のセクションで行った変更を元に戻すには、次の手順を完了します。
Git を使用していたターミナルに戻ります。
git log
コマンドを使用してハッシュを検索します(この例では最上位のエントリ)。直近の変更を元に戻します。
git revert HASH git push origin main
gamestore-admin
オブジェクトを監視しているターミナルに戻ります。ClusterRole のサブジェクト リストにadmin@gamestore.com
が含まれていません。Control+C
キーを押してgamestore-admin
オブジェクトの監視を停止します。
このレッスンでは、リポジトリの変更を commit したときに Config Sync がリポジトリ内の構成ファイルと同期することを確認しました。
クリーンアップ
プロジェクトの削除
Google Cloud プロジェクトを削除します。
gcloud projects delete PROJECT_ID
リソースを個別に削除する
このチュートリアルの演習を終えた後、個々のリソースをクリーンアップする手順は次のとおりです。
- テストに使用したクラスタを削除します。
- fork のローカル クローンを削除します。
- ローカルの SSH 秘密鍵を削除します(該当する場合)。
- サンプル リポジトリの fork を削除します。これにより、リポジトリのみに関連付けられたデプロイキーが削除されます。
次のステップ
- クラスタ オブジェクトの管理について学習する。
- 構成ファイルの作成方法について学習する。
- 構成ファイルの検証について詳細を確認する。