構成ファイルを変更する

このチュートリアルでは、構成ファイルを変更してクラスタに同期させる方法について説明します。このチュートリアルは、Config Sync のスタートガイドで学んだスキルを前提としています。

ここでは、組織のコンプライアンス チームの新しいメンバーとして、最初の構成ファイルを変更する場合について説明します。

目標

  • Git リポジトリを作成する。
  • SSH 認証鍵ペアを使用するように Config Sync を構成する。
  • 構成ファイルに変更を加えて、Config Sync がその変更を適用することを確認する。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

このチュートリアルを始める前に、次のことを行ってください。

  1. Config Sync のスタートガイドに沿って操作します。構成したクラスタは削除しないでください。

  2. GitHub へのアクセス権がない場合は、GitHub アカウントを作成します

  3. GitHub ドキュメントの GitHub アカウントに新しい SSH 認証鍵を追加するの手順を完了します。このチュートリアルを完了するには、秘密鍵の場所が必要になります。

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

リポジトリを作成する

このセクションでは、Anthos Config Management サンプル リポジトリの fork を作成して Git リポジトリを作成し、作業用のコピーとしてローカル クローンを作成します。

リポジトリを作成するには、次の手順を完了します。

  1. ブラウザで Anthos Config Management サンプル リポジトリに移動し、[Fork] をクリックします。

  2. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  3. ターミナルで、フォークのクローンを作成します。

    git clone git@github.com:GIT_USERNAME/anthos-config-management-samples.git
    

    GIT_USERNAME は GitHub ユーザー名で置き換えます。

  4. 始める前にで追加した SSH 秘密鍵を使用して、GitHub の認証を行うようにローカル システムを構成します

クラスタを構成する

Git 認証情報に Kubernetes Secret を作成する

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

  2. SSH 鍵ペアを使用して Secret を作成します。

    1. ルート リポジトリに Secret を作成します。

      kubectl create secret generic SECRET_NAME \
       --namespace=config-management-system \
       --from-file=ssh=PATH_TO_KEYPAIR_PRIVATE_KEY_FILENAME
      
    2. 各 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 サフィックスのない秘密鍵)を追加します。
  3. ローカル ディスクの秘密鍵を保護するか、削除します。

Git 構成を更新する

このセクションでは、Config Sync のスタートガイドで説明した RootSync オブジェクトと RepoSync オブジェクトを編集します。次のように変更します。

  1. RootSync オブジェクトの次の値を更新します。

    • repo の値を fork のアドレスに変更します。GIT_USERNAME は GitHub ユーザー名で置き換えます。
    • auth の値を none から ssh に変更します。
    • spec.git.secretRef.nameSECRET_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 フィールドをご覧ください。

  2. クラスタに構成ファイルを適用します。

    kubectl apply -f root-sync.yaml
  3. config-sync-quickstart/multirepo/root/reposync-gamestore.yaml に移動します。

  4. RepoSync オブジェクトの次の値を更新します。

    • repo の値を fork のアドレスに変更します。GIT_USERNAME は GitHub ユーザー名で置き換えます。
    • auth の値を ssh に変更します。
    • spec.git.secretRef.nameSECRET_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
    
  5. ルート リポジトリへの変更を 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.comgamestore Namespace の gamestore-admin RoleBinding に追加します。

  1. ターミナルを開いて次のコマンドを実行し、gamestore RoleBinding に対する変更を監視します。

    kubectl get rolebindings gamestore-admin -n gamestore -o yaml --watch
    
  2. 別のターミナルを開き、リポジトリのローカル クローンに移動します。

  3. 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
    
  4. ファイルを保存します。

    git add config-sync-quickstart/multirepo/root/rolebinding-gamestore-admin.yaml
    
  5. commit を作成します。

    git commit -m "Add admin@gamestore.com to cluster admin"
    
  6. fork に commit を push します。

    git push origin main
    
  7. gamestore-admin オブジェクトを監視しているターミナルに戻ります。数秒後、変更がクラスタに同期されます。

変更内容を元に戻す

Config Sync を使用すると、変更を簡単に戻せます。

前のセクションで行った変更を元に戻すには、次の手順を完了します。

  1. Git を使用していたターミナルに戻ります。

  2. git log コマンドを使用してハッシュを検索します(この例では最上位のエントリ)。

  3. 直近の変更を元に戻します。

    git revert HASH
    
    git push origin main
    
  4. gamestore-admin オブジェクトを監視しているターミナルに戻ります。ClusterRole のサブジェクト リストに admin@gamestore.com が含まれていません。

  5. Control+C キーを押して gamestore-admin オブジェクトの監視を停止します。

このレッスンでは、リポジトリの変更を commit したときに Config Sync がリポジトリ内の構成ファイルと同期することを確認しました。

クリーンアップ

プロジェクトの削除

    Google Cloud プロジェクトを削除します。

    gcloud projects delete PROJECT_ID

リソースを個別に削除する

このチュートリアルの演習を終えた後、個々のリソースをクリーンアップする手順は次のとおりです。

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

次のステップ