このページでは、Config Controller に関する問題の解決方法について説明します。
インストールのトラブルシューティング
default という名前のネットワークがない
Config Controller インスタンスを作成する際に、デフォルト ネットワークを使用できないというエラーが表示される場合があります。
Error 400: Project \"PROJECT_ID\" has no network named \"default\"., badRequest\n\n on main.tf line 35, in resource \"google_container_cluster\" \"acp_cluster\"
このエラーは、--network
フラグを使用して既存のネットワークを指定しなかった場合や、Google Cloud でデフォルト ネットワークが削除または無効にされている場合に発生します。デフォルトでは、Config Controller は、デフォルト ネットワークで Config Controller インスタンスをサポートする Google Kubernetes Engine(GKE)Enterprise エディション クラスタを作成します。
既存のネットワーク内にインスタンスを作成する場合は、Config Controller インスタンスの作成時に --network=NETWORK
フラグを追加してください。NETWORK
は既存のネットワークの名前に置き換えます。
Config Controller インスタンスをデフォルト ネットワーク内に作成する場合は、次のコマンドを使用してデフォルト ネットワークを再作成します。
gcloud compute networks create default --subnet-mode=auto
このコマンドを使用するには、--subnet-mode=auto
フラグを使用して自動サブネットを有効にする必要があります。
デフォルト ネットワークを再作成した後は、Config Controller インスタンスの作成時に --network
フラグを省略できます。
MasterIpv4CidrBlock の値が無効
Config Controller の作成では、コントロール プレーンの IPv4 CIDR に 172.16.0.128/28
のデフォルト サブネットを使用します。IPv4 CIDR ブロックに競合があると、Config Controller の作成は失敗し、次のエラーが返されます。
Cloud SSA\n\nError: Error waiting for creating GKE cluster: Invalid value for field PrivateClusterConfig.MasterIpv4CidrBlock: 172.16.0.128/28 conflicts with an existing subnet in one of the peered VPCs.
このエラーが表示された場合は、別のプライベート IPv4 CIDR を選択し、gcloud anthos config controller create
コマンドで --master-ipv4-cidr-block
フラグを指定して使用します。
すでに使用されている IPv4 CIDR ブロックを見つける手順は次のとおりです。
ピアリングの名前を見つけます。
gcloud compute networks peerings list --network=NETWORK
NETWORK
は、検索するネットワークの名前に置き換えます。出力は次のようになります。
NAME NETWORK PEER_PROJECT PEER_NETWORK PEER_MTU IMPORT_CUSTOM_ROUTES EXPORT_CUSTOM_ROUTES STATE STATE_DETAILS gke-n210ce17a4dd120e16b6-7ebf-959a-peer default gke-prod-us-central1-59d2 gke-n210ce17a4dd120e16b6-7ebf-0c27-net False False ACTIVE [2021-06-08T13:22:07.596-07:00]: Connected.
ピアリングで使用されている IPv4 CIDR を表示します。
gcloud compute networks peerings list-routes PEERING_NAME \ --direction=INCOMING \ --network=NETWORK \ --region=REGION
次のように置き換えます。
PEERING_NAME
: 検索するピアリングの名前NETWORK
: 検索するネットワークの名前REGION
: Config Controller インスタンスが存在するリージョンの名前
Config Controller の実行中に発生する問題のトラブルシューティング
ノードプールの IP を使い果たした
次のエラー メッセージが表示された場合は、ノードプールに十分な数の IP アドレスが存在しない可能性があります。
Can't scale up because instances in managed instance groups hosting node pools ran out of IPs
この問題は、--cluster-ipv4-cidr-block
フラグを省略した場合に発生することがあります。このフラグを省略すると、Config Controller はデフォルトで /20
Pod CIDR 範囲に設定されます。これにより、ノードの最大数は 16 になります。
CIDR ブロックは作成後に変更できません。追加のノードが必要な場合は、Config Controller インスタンスを削除します。Config Controller インスタンスを再作成する場合は、オプション パラメータ --cluster-ipv4-cidr-block
を使用して、CIDR range or netmask size
を指定します。
ダッシュボード情報がない
Google Cloud コンソールのダッシュボードに Config Controller の詳細が表示されない場合、Config Controller が使用するデフォルトのサービス アカウントに、必要な Google Cloud Observability の権限がない可能性があります。
これらの権限を付与するには、次のコマンドを使用します。
# Cloud Monitoring metrics permissions
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/monitoring.metricWriter \
--condition=None \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/stackdriver.resourceMetadata.writer \
--condition=None \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/opsconfigmonitoring.resourceMetadata.writer \
--condition=None \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
# Cloud Logging permissions
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/logging.logWriter \
--condition=None \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
# Cloud Trace permissions\
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/cloudtrace.agent \
--condition=None \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
次のように置き換えます。
PROJECT_ID
: Config Controller インスタンスを作成したプロジェクトの IDPROJECT_NUMBER
: Google Cloud プロジェクト番号
コンポーネントのトラブルシューティング
Config Controller インスタンスには、Policy Controller、Config Sync、Config Connector がプリインストールされているため、これらのコンポーネントで問題が発生することがあります。これらのコンポーネントのトラブルシューティングについては、次のページをご覧ください。
以降のセクションでは、これらのコンポーネントと Config Controller を組み合わせて使用する際に発生する可能性がある、よくある問題について説明します。
同期エラー
信頼できる情報源(Git リポジトリや OCI イメージなど)の構成は、Config Sync を使用して Config Controller インスタンスと同期されます。この同期プロセスのエラーは、nomos status
コマンドで確認できます。
nomos status --contexts $(kubectl config current-context)
Config Connector リソースのトラブルシューティング
変更不可のフィールドとリソース
プロジェクト ID や VPC ネットワークの名前など、基盤となる Google Cloud リソースのフィールドには、変更できないものがあります。このようなフィールドの編集は、Config Connector によりブロックされ、変更を反映できません。こうした変更不可フィールドの 1 つを編集する必要がある場合は、(Git で)元のリソースを削除し、続いて優先する値で追加し直す必要があります。
停止しているリソース
場合によっては、リソースが正しく削除できないことがあります(nomos
status
で報告されます)。この問題は、リソースのファイナライザを削除した後、手動でリソースを削除することにより解決できます。
たとえば、動かなくなった IAMPolicyMember を削除するには、次のコマンドを実行します。
kubectl patch IAMPolicyMember logging-sa-iam-permissions \
-p '{"metadata":{"finalizers":[]}}' --type=merge -n config-control
kubectl delete IAMPolicyMember logging-sa-iam-permissions -n config-control
次のステップ
- さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。