| 更新 | 1.32.0 ~ 1.32.600、1.33.0 ~ 1.33.100 | 不変の masterNode.replicasフィールドが原因で、非 HA ユーザー クラスタを HA 高度なクラスタに更新できない gkectl updateを使用して、非高可用性(非 HA)ユーザー クラスタを HA コントロール プレーンを含む高度なクラスタに更新すると、次のエラー メッセージが表示されて失敗します。 
Failed to generate diff summary: failed to get desired onprem user cluster and node pools from seed config with dry-run webhooks:
failed to apply validating webhook to OnPremUserCluster:
masterNode.replcias: Forbidden: the field must not be mutated, diff (-before, +after): int64(- 1,+ 3)
 回避策: gkectl upgradeコマンドを使用して、HA 以外のユーザー クラスタを HA の高度なクラスタにアップグレードします。
 | 
  | 更新 | 1.30、1.31 | 無効な TLS 証明書が原因で、ControlPlaneV2 の移行後に Windows Pod が保留状態のままになるバージョン 1.30.x から 1.31.x への ControlPlaneV2 移行を含む Google Distributed Cloud 更新オペレーション中に、Windows Pod のスケジュール設定が失敗し、Pending状態のままになることがあります。この問題は、windows-webhookミューテーション アドミッション Webhook の TLS 証明書の検証エラーとして現れます。この問題は、証明書のサブジェクトの別名(SAN)が、新しいkube-system.svcエンドポイント用に再生成されず、古い Kubeception アーキテクチャで有効な値を誤って保持しているために発生します。 次のエラー メッセージが表示されることがあります。failed calling webhook "windows.webhooks.gke.io": failed to call webhook: Post "https://windows-webhook.kube-system.svc:443/pod?timeout=10s": tls: failed to verify certificate: x509この状況は、ControlPlaneV2 移行プロセスで etcd コンテンツがコピーされ、古い証明書が適切に再生成されずに引き継がれることで発生する可能性があります。Windows ノードプールは非推奨の機能であり、Google Distributed Cloud 1.33 以降のバージョンでは使用できなくなることにご注意ください。 回避策: 
      
        ユーザー クラスタの Namespace で user-component-optionsSecret をバックアップします。     kubectl get secret user-component-options -n USER_CLUSTER_NAME -oyaml > backup.yaml
    
        user-component-optionsSecret を削除します。
     kubectl delete secret user-component-options -n USER_CLUSTER_NAME
    
        onpremuserclusterリソースを編集して、onprem.cluster.gke.io/reconcile: "true"アノテーションを追加し、調整をトリガーします。
     kubectl edit onpremusercluster USER_CLUSTER_NAME -n USER_CLUSTER_MGMT_NAMESPACE
     USER_CLUSTER_NAMEは、ユーザー クラスタの名前に置き換えます。
 | 
  | アップグレード、更新 | 1.32.0 ~ 1.32.500、1.33.0 | 
    高度なクラスタ以外のクラスタを高度なクラスタにアップグレードまたは更新するときに、stackdriver が有効になっていないと、プロセスが応答を停止することがあります。 回避策: 
      クラスタがまだアップグレードされていない場合は、stackdriverを有効にする手順を行う必要があります。
      クラスタ構成ファイルに stackdriver セクションを追加します。
      gkectl updateを実行してstackdriverを有効にします。アップグレードがすでに進行中の場合は、次の手順を行います。
    
      次のコマンドを使用して、USER_CLUSTER_NAME-gke-onprem-mgmtNamespace のuser-cluster-credsSecret を編集します。kubectl --kubeconfig ADMIN_KUBECONFIG \
  patch secret user-cluster-creds \
  -n USER_CLUSTER_NAME-gke-onprem-mgmt \
  --type merge -p "{\"data\":{\"stackdriver-service-account-key\":\"$(cat STACKDRIVER_SERVICE_ACCOUNT_KEY_FILE | base64 | tr -d '\n')\"}}"stackdriver フィールドを使用して OnPremUserClusterカスタム リソースを更新します。この機能を有効にしている場合は、cloudauditlogging と同じプロジェクト、同じプロジェクトのロケーション、同じサービス アカウント キーを使用する必要があります。kubectl --kubeconfig ADMIN_KUBECONFIG \
    patch onpremusercluster USER_CLUSTER_NAME \
    -n USER_CLUSTER_NAME-gke-onprem-mgmt --type merge -p '
    spec:
      stackdriver:
        clusterLocation: PROJECT_LOCATIONproviderID:PROJECT_IDserviceAccountKey:
          kubernetesSecret:
            keyName: stackdriver-service-account-key
            name: user-cluster-creds
'一貫性を保つため、クラスタ構成ファイルに stackdriver セクションを追加します。 | 
  | アップグレード | 1.29、1.30、1.31、1.32+ | Dataplane V2 と制限付きネットワーク ポリシーで Kubernetes API サーバーに接続できない PodControl Plane V2(CPv2)アーキテクチャ(バージョン 1.29 以降のデフォルト)と Dataplane V2 を使用するクラスタでは、Pod が Kubernetes API サーバー(kubernetes.default.svc.cluster.local)に接続できないことがあります。この問題は、ネットワーク ポリシー(特にデフォルトの拒否下り(内向き)ルールを含むポリシー)が存在する場合に発生することがよくあります。次のような症状が見られます。 
    API サーバーのクラスタ IP アドレスまたはノード IP アドレスへの TCP 接続の試行が Connection reset by peerメッセージになります。API サーバーへの接続時の TLS handshake の失敗。影響を受けるノードで cilium monitor -t dropコマンドを実行すると、コントロール プレーン ノードの IP アドレスと API サーバー ポート(通常は 6443)宛てのパケットがドロップされていることがわかります。 原因この問題は、CPv2 アーキテクチャの Dataplane V2(Cilium ベース)と Kubernetes ネットワーク ポリシーの相互作用によって発生します。このアーキテクチャでは、コントロール プレーン コンポーネントがユーザー クラスタ内のノードで実行されます。デフォルトの Cilium 構成では、コントロール プレーン メンバーのノード IP へのトラフィックを許可することを目的としたネットワーク ポリシーの ipBlock ルールが正しく解釈されません。この問題は、アップストリームの Cilium の問題(cilium#20550)に関連しています。 回避策: バージョン 1.29、1.30、1.31 では、コントロール プレーン ノードへのトラフィックをブロックする可能性のある制限付きの下り(外向き)ネットワーク ポリシーの使用は避けてください。デフォルトの拒否ポリシーが必要な場合は、すべての下り(外向き)トラフィックに対して広範な許可ルールを追加する必要があります。たとえば、下り(外向き)セクションで to ルールを指定しないことで、すべての下り(外向き)を効果的に許可します。このソリューションはセキュリティが低く、すべての環境に適しているとは限りません。  他のすべてのバージョンでは、Cilium 構成を有効にして、ネットワーク ポリシーの ipBlock フィールドでノード IP を正しく照合します。ネットワーク ポリシーの ipBlockフィールドでノードの IP を照合するには、次の操作を行います。 
    cilium-configConfigMap を編集します。kubectl edit configmap -n kube-system cilium-configpolicy-cidr-match-mode: nodesを含めるようにデータ セクションを追加または変更します。data:
      policy-cidr-match-mode: nodes構成の変更を適用するには、anetd DaemonSet を再起動します。kubectl rollout restart ds anetd -n kube-systemPod から API サーバー ポートのコントロール プレーン ノード IP への下り(外向き)トラフィックを明示的に許可するネットワーク ポリシーがあることを確認します。kubectl get svc kubernetesを実行して、ユーザー クラスタ コントロール プレーン ノードの IP アドレスを特定します。出力は次のようになります。    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-egress-to-kube-apiserver
      namespace: NAMESPACE_NAME
    spec:
      podSelector: {} 
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: CP_NODE_IP_1/32
        - ipBlock:
            cidr: CP_NODE_IP_2/32
        ports:
        - protocol: TCP
          port: 6443 # Kubernetes API Server port on the node
     | 
  | インストール | 1.30.200-gke.101 | ユーザー クラスタの作成中に gke-connectエージェント Pod がPending状態で停止するユーザー クラスタの作成中に、gke-connectエージェント Pod がPending状態のままになり、クラスタが完全に作成されないことがあります。この問題は、gke-connectエージェント Pod がワーカーノードが使用可能になる前にスケジュールしようとして、デッドロックが発生するために発生します。 この問題は、プリフライト検証エラーが原因で最初のユーザー クラスタの作成が失敗し、部分的に作成されたリソースを削除せずにクラスタの作成を試みた場合に発生します。その後のクラスタ作成の試行では、コントロール プレーン ノードの容認されない taint により gke-connectエージェント Pod が停止します。次のようなエラーが表示されます。     0/3 nodes are available: 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }`.
    回避策:  プリフライト検証エラーが原因でユーザー クラスタの作成に失敗した場合は、部分的に作成されたクラスタ リソースを削除してから、修正した構成でクラスタの再作成を試みます。これにより、gke-connectエージェント Pod がデプロイされる前にノードプールが作成されるなど、作成ワークフローが正しく進行します。 | 
    | 更新 | 1.16 以前のバージョン、1.28.0-1.28.1100、1.29.0-1.29.700、1.30.0-1.30.200 | Secret の常時暗号化を無効にしても Secret が暗号化されたままになるgkectl update clusterでシークレットの常時暗号化を無効にしても、シークレットは暗号化された状態でetcdに保存されます。この問題は、kubeception ユーザー クラスタでのみ発生します。クラスタで Controlplane V2 を使用している場合、この問題の影響を受けません。
 シークレットがまだ暗号化されているかどうかを確認するには、次のコマンドを実行します。このコマンドは、etcdに保存されているdefault/private-registry-credsシークレットを取得します。 
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    exec -it -n USER_CLUSTER_NAME kube-etcd-0 -c kube-etcd -- \
    /bin/sh -ec "export ETCDCTL_API=3; etcdctl \
    --endpoints=https://127.0.0.1:2379 \
    --cacert=/etcd.local.config/certificates/etcdCA.crt \
    --cert=/etcd.local.config/certificates/etcd.crt \
    --key=/etcd.local.config/certificates/etcd.key \
    get /registry/secrets/default/private-registry-creds" | hexdump -C
Secret が暗号化されて保存されている場合、出力は次のようになります。 00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 70 72 69 76 61 74  |s/default/privat|
00000020  65 2d 72 65 67 69 73 74  72 79 2d 63 72 65 64 73  |e-registry-creds|
00000030  0d 0a 6b 38 73 3a 65 6e  63 3a 6b 6d 73 3a 76 31  |..k8s:enc:kms:v1|
00000040  3a 67 65 6e 65 72 61 74  65 64 2d 6b 65 79 2d 6b  |:generated-key-k|
00000050  6d 73 2d 70 6c 75 67 69  6e 2d 31 3a 00 89 65 79  |ms-plugin-1:..ey|
00000060  4a 68 62 47 63 69 4f 69  4a 6b 61 58 49 69 4c 43  |JhbGciOiJkaXIiLC|
... Secret が暗号化されて保存されていない場合、出力は次のようになります。 00000000  2f 72 65 67 69 73 74 72  79 2f 73 65 63 72 65 74  |/registry/secret|
00000010  73 2f 64 65 66 61 75 6c  74 2f 70 72 69 76 61 74  |s/default/privat|
00000020  65 2d 72 65 67 69 73 74  72 79 2d 63 72 65 64 73  |e-registry-creds|
00000030  0d 0a 6b 38 73 00 0d 0a  0c 0d 0a 02 76 31 12 06  |..k8s.......v1..|
00000040  53 65 63 72 65 74 12 83  47 0d 0a b0 2d 0d 0a 16  |Secret..G...-...|
00000050  70 72 69 76 61 74 65 2d  72 65 67 69 73 74 72 79  |private-registry|
00000060  2d 63 72 65 64 73 12 00  1a 07 64 65 66 61 75 6c  |-creds....defaul|
... 回避策: 
       次のように、特定の DaemonSet でローリング アップデートを行います。
        kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      rollout restart statefulsets kube-apiserver \
      -n USER_CLUSTER_NAME
    ユーザー クラスタ内のすべての Secret のマニフェストを YAML 形式で取得します。
        kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
      get secrets -A -o yaml > SECRETS_MANIFEST.yaml
    ユーザー クラスタ内のすべての Secret を再適用して、すべての Secret が平文として etcdに保存されるようにします。    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
      apply -f SECRETS_MANIFEST.yaml
     | 
    | 構成 | 1.29、1.30、1.31 | 生成された user-cluster.yamlファイルにhostgroupsフィールドがないgkectl get-configコマンドで生成されたユーザー クラスタの構成ファイルuser-cluster.yamlのnodePoolsセクションに、hostgroupsフィールドがありません。gkectl get-configコマンドは、OnPremUserClusterカスタム リソースの内容に基づいてuser-cluster.yamlファイルを生成します。ただし、nodePools[i].vsphere.hostgroupsフィールドはOnPremNodePoolカスタム リソースに存在し、gkectl get-configの実行時にuser-cluster.yamlファイルにコピーされません。
 回避策 この問題を解決するには、user-cluster.yamlファイルにnodePools[i].vsphere.hostgroupsフィールドを手動で追加します。編集したファイルは、次の例のようになります。 apiVersion: v1
kind: UserCluster
...
nodePools:
- name: "worker-pool-1"
  enableLoadBalancer: true
  replicas: 3
  vsphere:
    hostgroups:
    - "hostgroup-1"
...編集したユーザー クラスタ構成ファイルを使用して、エラーをトリガーせずにユーザー クラスタを更新できます。また、hostgroupsフィールドは保持されます。 | 
  | ネットワーキング | 1.29.0~1.29.1000 1.30.0~1.30.500、1.31.0~1.31.100 | バンドルされた Ingress は gateway.networking.k8s.ioリソースと互換性がありません gateway.networking.k8s.ioリソースがユーザー クラスタにインストールされている場合、バンドルされた Ingress の Istiod Pod は準備完了になりません。Pod ログに次のエラー メッセージが表示されることがあります。 
    failed to list *v1beta1.Gateway: gateways.gateway.networking.k8s.io is forbidden: User \"system:serviceaccount:gke-system:istiod-service-account\" cannot list resource \"gateways\" in API group \"gateway.networking.k8s.io\" at the cluster scope"
    回避策:  次の ClusterRole と ClusterRoleBinding をユーザー クラスタに適用します。 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: istiod-gateway
rules:
- apiGroups:
  - 'gateway.networking.k8s.io'
  resources:
  - '*'
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: istiod-gateway-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: istiod-gateway
subjects:
- kind: ServiceAccount
  name: istiod-service-account
  namespace: gke-system
     | 
  | インストール | 1.29.0~1.29.1000 1.30.0~1.30.500、1.31.0~1.31.100 | gkectl create adminの実行後に管理クラスタのコントロール プレーン ノードが再起動を繰り返す
ipblocksフィールドのホスト名に大文字が含まれている場合、管理クラスタのコントロール プレーン ノードが何度も再起動する可能性があります。
 回避策: ホスト名では小文字のみを使用します。 | 
  | インストール、アップグレード | 1.30.0~1.30.500、1.31.0~1.31.100 | gkeadm createまたはupgradeの実行後にRuntime: out of memoryエラーとなる
gkeadmコマンドを使用して管理ワークステーションを作成またはアップグレードした際に、ダウンロードした OS イメージを検証すると OOM エラーが発生することがあります。
  以下に例を示します。 
Downloading OS image
"gs://gke-on-prem-release/admin-appliance/1.30.400-gke.133/gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova"...
[==================================================>] 10.7GB/10.7GB
Image saved to
/anthos/gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova
Verifying image gke-on-prem-admin-appliance-vsphere-1.30.400-gke.133.ova...
|
runtime: out of memory
 回避策: gkeadmコマンドを実行する OS のメモリサイズを増やします。 | 
  | アップグレード | 1.30.0~1.30.400 | 非 HA 管理クラスタのアップグレードが Creating or updating cluster control plane workloadsで停止する非 HA 管理クラスタをアップグレードすると、アップグレードが Creating or updating cluster control plane workloadsで停止することがあります。 この問題は、管理マスター VM で ip a | grep caliが空でない結果を返す場合に発生します。  以下に例を示します。 
ubuntu@abf8a975479b-qual-342-0afd1d9c ~ $ ip a | grep cali
4: cali2251589245f@if3:  mtu 1500 qdisc noqueue state UP group default
 回避策: 
      管理マスターを修復します。
gkectl repair admin-master --kubeconfig=ADMIN_KUBECONFIG \
    --config=ADMIN_CONFIG_FILE \
    --skip-validation
次のようなプロンプトが表示された場合は、1.30 VM テンプレートを選択します。
Please select the control plane VM template to be used for re-creating the
admin cluster's control plane VM.
アップグレードを再開します。
gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG \
    --config ADMIN_CONFIG_FILE
 | 
  | 構成 | 1.31.0 | network.controlPlaneIPBlockのクラスタ構成ファイル内のisControlPlaneフィールドが冗長
 1.31.0 の gkectl create-configによって生成されたクラスタ構成ファイルには、network.controlPlaneIPBlockの下に冗長なisControlPlaneフィールドが含まれています。     controlPlaneIPBlock:
    netmask: ""
    gateway: ""
    ips:
    - ip: ""
      hostname: ""
      isControlPlane: false
    - ip: ""
      hostname: ""
      isControlPlane: false
    - ip: ""
      hostname: ""
      isControlPlane: false
     このフィールドは不要であるため、構成ファイルから安全に削除できます。 | 
  
  | 移行 | 1.29.0~1.29.800、1.30.0~1.30.400、1.31.0 | 非 HA から HA への管理クラスタの移行中に管理アドオンノードが NotReady のままになるMetalLB を使用する非 HA 管理クラスタを HA に移行すると、管理アドオンノードが NotReadyステータスで停止し、移行が完了しないことがあります。 この問題は、MetalLB で構成され、自動修復が有効になっていない管理クラスタにのみ影響します。 この問題は、移行中に MetalLB スピーカーが古い metallb-memberlistシークレットをまだ使用している競合状態が原因で発生します。競合状態の結果、古いコントロール プレーン VIP にアクセスできなくなり、移行が停止します。 回避策: 
      既存の metallb-memberlistSecret を削除します。
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    delete secret metallb-memberlist
metallb-controllerDeployment を再起動して、新しいmetallb-memberlistを生成できるようにします。
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    rollout restart deployment metallb-controller
新しい metallb-memberlistが生成されていることを確認します。
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    get secret metallb-memberlist
metallb-speakerDaemonSet のupdateStrategy.rollingUpdate.maxUnavailableを1から100%に更新します。この手順は、特定の DaemonSet Pod が NotReadyノードで実行されているため必要です。 
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    edit daemonset metallb-speaker
metallb-speakerDaemonSet を再起動して、新しいメンバーリストを読み込みます。
kubectl --kubeconfig=ADMIN_KUBECONFIG -n kube-system \
    rollout restart daemonset metallb-speaker
数分後、管理アドオンノードが再び Readyになり、移行を続行できます。最初の gkectlコマンドが 3 時間以上経過した後にタイムアウトした場合は、gkectl updateを再実行して、失敗した移行を再開します。 | 
  | 構成、オペレーション | 1.12+、1.13+、1.14+、1.15+、1.16+、1.28+、1.29+、1.30+ | データストアとデータディスクの名前が長いため非 HA 管理クラスタのクラスタ バックアップが失敗する 非 HA 管理クラスタのバックアップを試みると、データストア名とデータディスク名の合計長が最大文字数を超えているため、バックアップが失敗します。  データストア名の最大文字数は 80 です。非 HA 管理クラスタのバックアップ パスの命名構文は「__」です。そのため、連結された名前の最大文字数を超えると、バックアップ フォルダの作成は失敗します。
 回避策: データストアまたはデータディスクの名前を短いものに変更します。データストア名とデータディスク名の合計長が最大文字数を超えないようにします。
 | 
  | アップグレード | 1.28、1.29、1.30 | gkectl repair admin-masterの実行後に HA 管理コントロール プレーン ノードに古いバージョンが表示される
 gkectl repair admin-masterコマンドを実行すると、想定されるバージョンよりも古いバージョンが管理コントロール プレーン ノードに表示されることがあります。  この問題は、HA 管理コントロール プレーン ノードの修復に使用されるバックアップ VM テンプレートが、アップグレード後に vCenter で更新されないために発生します。これは、マシン名が変更されない場合、マシンの作成時にバックアップ VM テンプレートがクローン作成されないためです。 回避策: 
    古い Kubernetes バージョンを使用しているマシン名を確認します。
    kubectl get machine -o wide --kubeconfig=ADMIN_KUBECONFIG
    onprem.cluster.gke.io/prevented-deletionアノテーションを削除します。
    kubectl edit machine MACHINE_NAME --kubeconfig=ADMIN_KUBECONFIG
    編集内容を保存します。次のコマンドを実行して、マシンを削除します。
    kubectl delete machine MACHINE_NAME --kubeconfig=ADMIN_KUBECONFIG
    正しいバージョンで新しいマシンが作成されます。 | 
  | 構成 | 1.30.0 |  Terraform を使用してユーザー クラスタまたはノードプールを更新すると、Terraform が vCenterフィールドを空の値に設定しようとする場合があります。  この問題は、クラスタが Terraform を使用して作成されていない場合に発生することがあります。 回避策: 予期しない更新を防ぐには、次の説明に沿って、terraform applyを実行する前に更新が安全であることを確認してください。 
     terraform planを実行します。出力で、vCenterフィールドがnilに設定されているかどうかを確認します。Terraform 構成で vCenterフィールドが空の値に設定されている場合は、Terraform ドキュメントに沿って、ignore_changesリストにvcenterを追加します。これにより、これらのフィールドの更新を防ぐことができます。terraform planを再度実行し、出力を確認して、更新が想定どおりであることを確認します。 | 
  | 更新 | 1.13、1.14、1.15、1.16 | 最初の管理クラスタの更新オペレーション中にユーザー クラスタのコントロール プレーン ノードが常に再起動される kubeception ユーザー クラスタのコントロール プレーン ノードが作成、更新、アップグレードされると、影響を受けるバージョンのいずれかで管理クラスタが作成またはアップグレードされた最初の管理クラスタ オペレーション中に、コントロール プレーン ノードが 1 つずつ再起動されます。コントロール プレーン ノードが 3 つある kubeception クラスタの場合、これによりコントロール プレーンのダウンタイムが発生することはありません。影響は、管理クラスタ オペレーションに時間がかかることだけです。 | 
  
  
    | インストール、アップグレード、更新 | 1.31 | カスタム リソースの作成エラーGoogle Distributed Cloud バージョン 1.31 では、クラスタ(すべてのタイプ)やワークロードなどのカスタム リソースを作成しようとすると、エラーが発生することがあります。この問題は、Kubernetes 1.31 で導入された破壊的変更が原因で発生します。この変更により、カスタム リソース定義の caBundleフィールドが有効な状態から無効な状態に移行できなくなります。この変更の詳細については、Kubernetes 1.31 の変更ログをご覧ください。 Kubernetes 1.31 より前は、以前の Kubernetes バージョンでは API サーバーで空の CA バンドル コンテンツが許可されていなかったため、caBundleフィールドは\nの一時的な値に設定されることがよくありました。cert-managerは通常caBundleを後で更新するため、\nを使用することは、混乱を避けるための妥当な回避策でした。 caBundleが無効な状態から有効な状態に一度パッチ適用されていれば、問題は発生しません。ただし、カスタム リソース定義が\n(または別の無効な値)に調整されると、次のエラーが発生する可能性があります。
 
...Invalid value: []byte{0x5c, 0x6e}: unable to load root certificates: unable to parse bytes as PEM block]
回避策 caBundleが無効な値に設定されているカスタム リソース定義がある場合は、caBundleフィールドを完全に削除しても安全です。これで問題が解決するはずです。
 | 
  | OS | 1.31 | cloud-init statusが常にエラーを返す
Container Optimized OS(COS)OS イメージを使用するクラスタを 1.31 にアップグレードすると、cloud-init はエラーなく完了しても、cloud-init statusコマンドが失敗します。 回避策: 次のコマンドを実行して、cloud-init のステータスを確認します。 
    systemctl show -p Result cloud-final.service
    出力が次のようになると、cloud-init は正常に完了しています。 
    Result=success
     | 
  | アップグレード | 1.28 | ディスクサイズが 100 GB 未満で 1.28 にアップグレードすると、管理ワークステーションのプリフライト チェックが失敗するクラスタを 1.28 にアップグレードすると、管理ワークステーションのディスクサイズが 100 GB 未満の場合、管理ワークステーションのプリフライト チェックの実行中に gkectl prepareコマンドが失敗します。この場合、コマンドから次のようなエラー メッセージが表示されます。 
    Workstation Hardware: Workstation hardware requirements are not satisfied
    1.28 では、管理ワークステーションのディスクサイズの前提条件が 50 GB から 100 GB に引き上げられました。 回避策: 
    管理ワークステーションをロールバックします。管理ワークステーションの構成ファイルを更新して、ディスクサイズを 100 GB 以上に引き上げます。管理ワークステーションをアップグレードします。 | 
  | アップグレード | 1.30 | gkectlが netapp storageclass で false エラーを返す
gkectl upgradeコマンドが、netapp storageclass に関する間違ったエラーを返します。次のようなエラー メッセージが表示されます。
     detected unsupported drivers:
      csi.trident.netapp.io
    回避策: 「--skip-pre-upgrade-checks」フラグを使用して gkectl upgradeを実行します。 | 
  | ID | すべてのバージョン | ClientConfigでクラスタ CA のローテーション後に無効な CA 証明書が原因でクラスタ認証が妨げられる
ユーザー クラスタで認証局(CA)証明書をローテーションした後に、ClientConfigのspec.certificateAuthorityDataフィールドに無効な CA 証明書が含まれ、クラスタの認証ができなくなります。 回避策: 次回、gcloud CLI で認証する前に、ClientConfigのspec.certificateAuthorityDataフィールドを正しい CA 証明書を使用して手動で更新します。 
    管理クラスタ kubeconfig の certificate-authority-dataフィールドからクラスタ CA 証明書をコピーします。
    ClientConfigを編集し、CA 証明書をspec.certificateAuthorityDataフィールドに貼り付けます。    kubectl edit clientconfig default -n kube-public --kubeconfig USER_CLUSTER_KUBECONFIG
     | 
  | 更新 | 1.28+ | バンドルされた Ingress を無効にするとプリフライト チェックが失敗するクラスタ構成ファイルの loadBalancer.vips.ingressVIPフィールドを削除してバンドルされた Ingress を無効にすると、MetalLB プリフライト チェックのバグにより、クラスタの更新が失敗し、「invalid user ingress vip: invalid IP」というエラー メッセージが表示されます。 回避策: このエラー メッセージは無視してください。次のいずれかの方法でプリフライト チェックをスキップしてください。
 
    gkectl update clusterコマンドに--skip-validation-load-balancerフラグを追加します。。onpremuserclusterオブジェクトにonprem.cluster.gke.io/server-side-preflight-skip: skip-validation-load-balancerでアノテーションを付けます | 
  | VMware、アップグレード | 1.16 | vCenter にアンチアフィニティ グループ ルールがないことが原因で、クラスタのアップグレードが失敗するクラスタのアップグレード時、vCenter にアンチアフィニティ グループ(AAG)ルールがないことが原因で、マシン オブジェクトが「作成中」フェーズで停止し、ノード オブジェクトへのリンクに失敗することがあります。 問題のあるマシン オブジェクトを記述すると、「Reconfigure DRS rule task "task-xxxx" complete」のようなメッセージが繰り返し表示されます。     kubectl --kubeconfig KUBECONFIG describe machine MACHINE_OBJECT_NAME
    回避策:  管理クラスタ構成とユーザー クラスタ構成の両方でアンチ アフィニティ グループ設定を無効にし、更新の強制実行コマンドをトリガーしてクラスタ アップグレードのブロックを解除します。     gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
        gkectl update cluster --config USER_CLUSTER_CONFIG_FILE --kubeconfig USER_CLUSTER_KUBECONFIG --force
     | 
  | 移行 | 1.29、1.30 | シークレットの暗号化が有効になっている場合、ユーザー クラスタの Controlplane V2 への移行が失敗する ユーザー クラスタを Controlplane V2 に移行するときに、常時有効なシークレット暗号化が有効になっている場合、移行プロセスでシークレット暗号鍵が正しく処理されません。この問題により、新しい Controlplane V2 クラスタではシークレットを復号できません。次のコマンドの出力が空でない場合、常時有効なシークレット暗号化がいずれかの時点で有効になっているため、クラスタはこの問題の影響を受けます。     kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      get onpremusercluster USER_CLUSTER_NAME \
      -n USER_CLUSTER_NAME-gke-onprem-mgmt \
      -o jsonpath={.spec.secretsEncryption}
    移行をすでに開始していて、移行に失敗した場合は、Google にサポートを依頼してください。それ以外の場合は、移行前に常時有効なシークレット暗号化を無効にしてシークレットを復号します。 | 
  | 移行 | 1.29.0~1.29.600、1.30.0~1.30.100 | シークレットの暗号化が有効になっている場合、非 HA から HA への管理クラスタの移行が失敗する 1.14 以前の管理クラスタで常時有効なシークレット暗号化が有効になっており、影響を受ける 1.29 バージョンと 1.30 バージョンにアップグレードした場合、管理クラスタを非 HA から HA に移行すると、移行プロセスでシークレット暗号鍵が正しく処理されません。この問題により、新しい HA 管理クラスタでシークレットを復号できません。  古い形式のキーがクラスタで使用されているかどうかを確認するには、次のコマンドを実行します。     kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret -n kube-system admin-master-component-options -o jsonpath='{.data.data}' | base64 -d | grep -oP '"GeneratedKeys":\[.*?\]'
    出力に次のような空のキーが表示される場合、クラスタはこの問題の影響を受ける可能性があります。     "GeneratedKeys":[{"KeyVersion":"1","Key":""}]
     移行をすでに開始していて、移行に失敗した場合は、Google にサポートを依頼してください。  それ以外の場合は、移行を開始する前に暗号鍵をローテーションします。 | 
  | アップグレード | 1.16、1.28、1.29、1.30 | 管理ワークステーションのアップグレード中に credential.yamlが誤って再生成されるgkeadm upgrade
       admin-workstationコマンドを使用して管理ワークステーションをアップグレードすると、credential.yamlファイルが正しく再生成されません。ユーザー名とパスワードのフィールドが空白になります。また、privateRegistryキーにスペルミスがあります。
 privateRegistryキーの同じスペルミスがadmin-cluster.yamlファイルにも存在します。
 credential.yamlファイルは管理クラスタのアップグレード プロセス中に再生成されるため、修正したとしてもスペルミスが残ります。
 回避策: 
    credential.yamlの非公開レジストリキー名を更新して、admin-cluster.yamlのprivateRegistry.credentials.fileRef.entryと一致させます。credential.yamlで非公開レジストリのユーザー名とパスワードを更新します。 | 
  | アップグレード | 1.16+ | アップグレード前の調整のタイムアウトが原因でユーザー クラスタのアップグレードが失敗するユーザー クラスタをアップグレードするときに、アップグレード前の調整オペレーションが定義されたタイムアウトより長くかかり、アップグレードが失敗することがあります。次のようなエラー メッセージが表示されます。 
Failed to reconcile the user cluster before upgrade: the pre-upgrade reconcile failed, error message:
failed to wait for reconcile to complete: error: timed out waiting for the condition,
message: Cluster reconcile hasn't finished yet, please fix that before
rerun the upgrade.
  アップグレード前の調整オペレーションのタイムアウトは、5 分間と、ユーザー クラスタのノードプールごとに 1 分間です。 回避策: gkectl diagnose clusterコマンドがエラーなしで合格することを確認します。
 gkectl upgrade clusterコマンドに--skip-reconcile-before-preflightフラグを追加して、アップグレード前の調整オペレーションをスキップします。例:
 gkectl upgrade cluster --skip-reconcile-before-preflight --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG_FILE | 
  | 更新 | 1.16、1.28.0~1.28.800、1.29.0-1~1.29.400、1.30.0 | DataplaneV2 ForwardMode の更新で anetd DaemonSet の再起動が自動的にトリガーされないgkectl update clusterを使用してユーザー クラスタの dataplaneV2.forwardMode フィールドを更新すると、変更は ConfigMap でのみ更新されます。anetdDaemonSet は、再起動されるまで構成変更を取得せず、変更は適用されません。
 回避策: gkectl update clusterコマンドが完了すると、Done updating the user clusterの出力が表示されます。このメッセージが表示されたら、次のコマンドを実行してanetdDaemonSet を再起動し、構成変更を取得します。
 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG rollout restart daemonset anetd 再起動後に DaemonSet の準備状況を確認します。 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get daemonset anetd 上記のコマンドの出力で、DESIRED列の番号がREADY列の番号と一致することを確認します。 | 
  | アップグレード | 1.16 | クラスタのアップグレード中に、管理クラスタのバックアップ ステージで etcdctl コマンドが見つからない1.16 から 1.28 へのユーザー クラスタのアップグレード中に、管理クラスタがバックアップされます。管理クラスタのバックアップ プロセスで、「etcdctl: command not found」というエラー メッセージが表示されます。ユーザー クラスタのアップグレードが成功し、管理クラスタが正常な状態を維持します。唯一の問題は、管理クラスタのメタデータ ファイルがバックアップされていないことです。 この問題は、etcdctlバイナリが 1.28 で追加され、1.16 ノードで使用できないことが原因です。 管理クラスタのバックアップには、etcd のスナップショットを取得してから、管理クラスタのメタデータ ファイルを書き込むなどの複数のステップが含まれます。etcd Pod への exec 後に etcdctlをトリガーできるため、etcd バックアップは継続します。しかし、メタデータ ファイルの書き込みは、ノードにインストールされるetcdctlバイナリに依存するため、この処理は失敗します。ただし、メタデータ ファイルのバックアップが失敗しても、バックアップの妨げにはなりません。したがって、ユーザー クラスタのアップグレードと同様に、バックアップ プロセスは成功します。 回避策: メタデータ ファイルのバックアップを作成する場合、gkectl を使用して管理クラスタをバックアップして復元するの説明に従って、管理クラスタのバージョンと一致するバージョンの gkectlを使用して、別の管理クラスタ バックアップをトリガーします。 | 
  | インストール | 1.16~1.29 | 手動ロード バランシングを使用したユーザー クラスタの作成が失敗する手動ロード バランシング用に構成されたユーザー クラスタを作成すると、バンドルされた Ingress が無効になっている場合でも、ingressHTTPNodePort値が 30,000 以上である必要があることを示すgkectl check-configエラーが発生します。 この問題は、ingressHTTPNodePortフィールドとingressHTTPSNodePortフィールドが設定されているかどうかに関係なく発生します。 回避策: この問題を回避するには、gkectl check-configから返された結果を無視します。バンドルされた Ingress を無効にするには、バンドルされた Ingress を無効にするをご覧ください。 | 
  
  | 更新 | 1.29.0 | PodDisruptionBudget(PDB)の問題は、高可用性(HA)管理クラスタを使用しているときに発生します。移行後にロールのない管理クラスタノードが 0 個または 1 個あります。ロールのないノード オブジェクトがあるかどうか確認するには、次のコマンドを実行します。
 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes -o wide 移行後にロールのないノード オブジェクトが複数ある場合、PDB の構成が正しくありません。 症状: admin cluster diagnose の出力には、次の情報が含まれます。 
Checking all poddisruptionbudgets...FAILURE
  Reason: 1 pod disruption budget error(s).
  Unhealthy Resources:
  PodDisruptionBudget metrics-server: gke-managed-metrics-server/metrics-server might be configured incorrectly: the total replicas(1) should be larger than spec.MinAvailable(1).
 回避策: 次のコマンドを実行して PDB を削除します。 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete pdb metrics-server -n gke-managed-metrics-server | 
  | インストール、アップグレード、更新 | 1.28.0-1.28.600、1.29.0-1.29.100 | Binary Authorization ウェブブックが CNI プラグインをブロックするため、nodepool の 1 つが起動しないまれな競合状態で Binary Authorization Webhook と gke-connect Pod のインストール順序が正しくないため、ノードが準備完了状態にならず、ユーザー クラスタの作成が停止することがあります。影響を受けるシナリオでは、ノードが準備完了状態にならないことが原因で、ユーザー クラスタの作成が停止することがあります。この場合、次のメッセージが表示されます。 
     Node pool is not ready: ready condition is not true: CreateOrUpdateNodePool: 2/3 replicas are ready
    回避策: 
       構成ファイルから Binary Authorization 構成を削除します。設定手順については、GKE on VMware での Binary Authorization の Day 2 インストール ガイドをご覧ください。現在のクラスタ作成プロセス中に異常なノードのブロックを解除するには、次のコマンドを使用して、ユーザー クラスタ内の Binary Authorization Webhook 構成を一時的に削除します。        kubectl --kubeconfig USER_KUBECONFIG delete ValidatingWebhookConfiguration binauthz-validating-webhook-configuration
        ブートストラップ プロセスが完了したら、次の Webhook 構成を再度追加できます。apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: binauthz-validating-webhook-configuration
webhooks:
- name: "binaryauthorization.googleapis.com"
  namespaceSelector:
    matchExpressions:
    - key: control-plane
      operator: DoesNotExist
  objectSelector:
    matchExpressions:
    - key: "image-policy.k8s.io/break-glass"
      operator: NotIn
      values: ["true"]
  rules:
  - apiGroups:
    - ""
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - pods
    - pods/ephemeralcontainers
  admissionReviewVersions:
  - "v1beta1"
  clientConfig:
    service:
      name: binauthz
      namespace: binauthz-system
      path: /binauthz
    # CA Bundle will be updated by the cert rotator.
    caBundle: Cg==
  timeoutSeconds: 10
  # Fail Open
  failurePolicy: "Ignore"
  sideEffects: None
         | 
  | アップグレード | 1.16、1.28、1.29 | deletionTimestampでミラーリングされたマシンが原因で CPV2 ユーザー クラスタのアップグレードが停止する
ユーザー クラスタのアップグレード中に、ユーザー クラスタ内にミラーリングされたマシン オブジェクトに deletionTimestampが含まれていると、アップグレード オペレーションが停止することがあります。アップグレードが停止した場合、次のエラー メッセージが表示されます。 
    machine is still in the process of being drained and subsequently removed
    この問題は、以前にユーザー クラスタ内にミラーリングされたマシンに gkectl delete machineを実行して、ユーザー コントロール プレーン ノードの修復を試みた場合に発生することがあります。 回避策: 
     ミラーリングされたマシン オブジェクトを取得し、バックアップのためにローカル ファイルに保存します。次のコマンドを実行して、ミラーリングされたマシンからファイナライザを削除し、ユーザー クラスタから削除されるまで待ちます。    kubectl --kubeconfig ADMIN_KUBECONFIG patch machine/MACHINE_OBJECT_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=mergeControlplane V2 ユーザー クラスタのコントロール プレーン ノードの手順に沿って、コントロール プレーン ノードでノードの修復をトリガーし、正しいソースマシン仕様がユーザー クラスタに再同期されるようにします。gkectl upgrade clusterを再実行して、アップグレードを再開します。 | 
  
  | 構成、インストール | 1.15、1.16、1.28、1.29 | 異なるサブネットにあるコントロール プレーン VIP が原因でクラスタの作成に失敗するHA 管理クラスタまたは ControlPlane V2 ユーザー クラスタの場合、コントロール プレーン VIP は他のクラスタノードと同じサブネットに存在する必要があります。そうでないと、kubelet はコントロール プレーン VIP を使用して API サーバーと通信できないため、クラスタの作成に失敗します。 回避策: クラスタを作成する前に、コントロール プレーン VIP が他のクラスタノードと同じサブネットに構成されていることを確認します。 | 
  | インストール、アップグレード、更新 | 1.29.0~1.29.100 | FQDN 以外の vCenter ユーザー名を使用すると、クラスタの作成またはアップグレードに失敗するクラスタの作成 / アップグレードが失敗し、vCenter ユーザー名が無効であることを示す vsphere CSI Pod のエラーが表示されます。これは、使用されているユーザー名が完全修飾ドメイン名ではないためです。vsphere-csi-controller Pod のエラー メッセージは次のとおりです。 
    GetCnsconfig failed with err: username is invalid, make sure it is a fully qualified domain username
    この問題は、完全修飾ドメインのユーザー名の使用を強制する検証が vSphere CSI ドライバに追加されたバージョン 1.29 以降でのみ発生します。 回避策: 認証情報構成ファイルの vCenter ユーザー名に完全修飾ドメイン名を使用します。たとえば、username1 ではなく、username1@example.com を使用します。 | 
  | アップグレード、更新 | 1.28.0 - 1.28.500 | バージョン 1.10 以前で作成されたクラスタで、管理クラスタのアップグレードに失敗する管理クラスタを 1.16 から 1.28 にアップグレードすると、新しい管理マスターマシンのブートストラップ中にコントロール プレーン証明書を生成できない場合があります。この問題は、バージョン 1.28 以降の Kubernetes API サーバーで証明書の生成方法が変更されたことが原因で発生します。この問題は、バージョン 1.10 以前で作成されたクラスタを、リーフ証明書をローテーションしないまま 1.16 までアップグレードすると発生します。 管理クラスタのアップグレード失敗の原因が、この問題であるかどうかを判断するには、次の操作を行います。 
    SSH を使用して、アップグレードに失敗した管理マスターマシンに接続します。/var/log/startup.logを開いて、次のようなエラーを検索します。 
Error adding extensions from section apiserver_ext
801B3213B57F0000:error:1100007B:X509 V3 routines:v2i_AUTHORITY_KEYID:unable to get issuer keyid:../crypto/x509/v3_akid.c:177:
801B3213B57F0000:error:11000080:X509 V3 routines:X509V3_EXT_nconf_int:error in extension:../crypto/x509/v3_conf.c:48:section=apiserver_ext, name=authorityKeyIdentifier, value=keyid>
    回避策: 
   SSH を使用して、管理マスターマシンに接続します。詳細については、SSH を使用した管理クラスタノードへの接続をご覧ください。/etc/startup/pki-yaml.shのコピーを作成して/etc/startup/pki-yaml-copy.shという名前を付けます。/etc/startup/pki-yaml-copy.shを編集します。apiserver_ext、client_ext、etcd_server_ext、kubelet_server_extの拡張機能のセクションでauthorityKeyIdentifier=keyidsetを見つけて、authorityKeyIdentifier=keyid,issuerに変更します。例:
      [ apiserver_ext ]
      keyUsage = critical, digitalSignature, keyEncipherment
      extendedKeyUsage=serverAuth
      basicConstraints = critical,CA:false
      authorityKeyIdentifier = keyid,issuer
      subjectAltName = @apiserver_alt_names
変更を /etc/startup/pki-yaml-copy.shに保存します。テキスト エディタを使用して /opt/bin/master.shを開き、/etc/startup/pki-yaml.shが含まれるすべての箇所を/etc/startup/pki-yaml-copy.shに置き換えて保存します。/opt/bin/master.shを実行して証明書を生成し、マシンの起動を完了します。gkectl upgrade adminを再度実行して、管理クラスタをアップグレードします。アップグレードが完了したら、ローテーションを開始するの説明に従って、管理クラスタとユーザー クラスタの両方のリーフ証明書をローテーションします。証明書のローテーションが完了したら、前と同じ手順で /etc/startup/pki-yaml-copy.shを編集し、/opt/bin/master.shを実行します。 | 
  
  | 構成 | 1.29.0 | Dataplane V2 が有効になっているクラスタで、誤った警告メッセージが表示されるすでに Dataplane V2 が有効になっているクラスタの作成、更新、アップグレードを gkectlを使用して実行すると、次のような誤った警告メッセージが出力されます。 
WARNING: Your user cluster is currently running our original architecture with
[DataPlaneV1(calico)]. To enable new and advanced features we strongly recommend
to update it to the newer architecture with [DataPlaneV2] once our migration
tool is available.
 これは gkectl のバグです。クラスタの構成ファイルで enableDataplaneV2: trueが設定されていても、dataplaneV2.forwardModeが使用されていないとこの警告が常に表示されます。 回避策: この警告は無視してかまいません。 | 
  
  | 構成 | 1.28.0-1.28.400、1.29.0 | HA 管理クラスタのインストールのプリフライト チェックで、必要な静的 IP の数が正しく報告されないHA 管理クラスタを作成する際のプリフライト チェックで、次のような誤ったエラー メッセージが表示されます。 
- Validation Category: Network Configuration
    - [FAILURE] CIDR, VIP and static IP (availability and overlapping): needed
    at least X+1 IP addresses for admin cluster with X nodes
1.28 以降の HA 管理クラスタにはアドオンノードがないため、この要件は該当しません。また、3 つの管理クラスタ コントロール プレーン ノードの IP は、管理クラスタの構成ファイルの network.controlPlaneIPBlockセクションに指定されているため、IP ブロック ファイルの IP は kubeception ユーザー クラスタ コントロール プレーン ノードにのみ必要です。 回避策: 修正されていないリリースで適切でないプリフライト チェックをスキップするには、gkectlコマンドに--skip-validation-net-configを追加します。 | 
  
  | オペレーション | 1.29.0~1.29.100 | 管理クラスタを非 HA から HA に移行した後、Connect Agent が Google Cloud が接続できなくなる管理クラスタを非 HA から HA に移行すると、管理クラスタの Connect Agent が gkeconnect.googleapis.comとの接続を失い、「Failed to verify JWT signature」というエラーが表示されます。これは、移行中に KSA 署名鍵が変更されるため、OIDC JWK を更新するために再登録が必要になるためです。 回避策: 管理クラスタを Google Cloudに再接続するには、次の手順で再登録をトリガーします。 まず、gke-connectDeployment の名前を取得します。 kubectl --kubeconfig KUBECONFIG get deployment -n gke-connect gke-connectデプロイを削除します。
 kubectl --kubeconfig KUBECONFIG delete deployment GKE_CONNECT_DEPLOYMENT -n gke-connect onpremadminclusterCR に force-reconcile アノテーションを追加して、onprem-admin-cluster-controllerの強制調整をトリガーします。
 kubectl --kubeconfig KUBECONFIG patch onpremadmincluster ADMIN_CLUSTER_NAME -n kube-system --type merge -p '
metadata:
  annotations:
    onprem.cluster.gke.io/force-reconcile: "true"
'使用可能な既存の gke-connectDeployment が見つからない場合は、onprem-admin-cluster-controllerが常にgke-connectDeployment を再デプロイし、クラスタを再登録します。 回避策を実施した後、gke-connect-agentログから「Failed to verify JWT signature」400 エラーが消えているはずです(コントローラが調整を完了するまでに数分かかる場合があります)。 kubectl --kubeconfig KUBECONFIG logs GKE_CONNECT_POD_NAME -n gke-connect | 
  
  | インストール、オペレーティング システム | 1.28.0-1.28.500~1.29.0 | Docker ブリッジ IP で COS クラスタのコントロール プレーン ノードに 172.17.0.1/16 が使用されるGoogle Distributed Cloud は、デフォルトの 172.17.0.1/16サブネットの予約を防ぐため、Docker 構成で Docker ブリッジ IP 専用のサブネット--bip=169.254.123.1/24を指定します。ただし、バージョン 1.28.0~1.28.500 と 1.29.0 では、COS OS イメージの回帰により、Google Distributed Cloud が Docker の構成をカスタマイズした後、Docker サービスが再起動されません。その結果として、Docker はデフォルトの172.17.0.1/16をブリッジ IP アドレス サブネットとして選択します。この IP アドレス範囲内にすでに実行中のワークロードがある場合、IP アドレスの競合が発生する可能性があります。 回避策: この問題を回避するには、docker サービスを再起動する必要があります。 sudo systemctl restart docker Docker が正しいブリッジ IP アドレスを選択していることを確認します。 ip a | grep docker0 注: VM を再作成すると、この解決策は無効になります。VM が再作成されるたびに、この回避策を再適用する必要があります。 | 
  
  | update | 1.28.0~1.28.400、1.29.0~1.29.100 | 標準 CNI で複数のネットワーク インターフェースが機能しない標準の CNI バイナリ bridge, ipvlan, vlan, macvlan, dhcp, tuning,
    host-local, ptp, portmapは、影響を受けるバージョンの OS イメージに含まれていません。これらの CNI バイナリは Dataplane v2 では使用されませんが、複数のネットワーク インターフェース機能で追加のネットワーク インターフェースに使用されます。 これらの CNI プラグインを使用すると、複数のネットワーク インターフェースは機能しません。 回避策: この機能を使用している場合は、修正が適用されたバージョンにアップグレードしてください。 | 
  
  | update | 1.15、1.16、1.28 | Netapp Trident の依存関係が vSphere CSI ドライバと干渉するクラスタノードに multipathdをインストールすると、vSphere CSI ドライバの動作が妨げられ、ユーザー ワークロードを起動できなくなります。 回避策: | 
  
  | 更新 | 1.15、1.16 | 管理クラスタの Webhook によって更新がブロックされることがある検証がスキップされて管理クラスタに必要な構成が空になっているときに、これらの構成を追加すると、管理クラスタの Webhook によって更新がブロックされることがあります。たとえば、既存の管理クラスタで gkeConnectフィールドが設定されていない場合、gkectl update adminコマンドで追加すると、次のエラー メッセージが表示されることがあります。 
admission webhook "vonpremadmincluster.onprem.cluster.gke.io" denied the request: connect: Required value: GKE connect is required for user clusters
Kubernetes API サーバーと Webhook 間の通信で問題が発生する場合があります。この場合、次のエラー メッセージが表示されることがあります。 
failed to apply OnPremAdminCluster 'kube-system/gke-admin-btncc': Internal error occurred: failed calling webhook "monpremadmincluster.onprem.cluster.gke.io": failed to call webhook: Post "https://onprem-admin-cluster-controller.kube-system.svc:443/mutate-onprem-cluster-gke-io-v1alpha1-onpremadmincluster?timeout=10s": dial tcp 10.96.55.208:443: connect: connection refused
 回避策:これらのエラーが発生した場合は、バージョンに応じて次のいずれかの回避策を使用してください。 
      
        1.15 管理クラスタの場合は、--disable-admin-cluster-webhookフラグを指定してgkectl update adminコマンドを実行します。次のような例になります。        gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --disable-admin-cluster-webhook
        
        1.16 管理クラスタの場合は、--forceフラグを指定してgkectl update adminコマンドを実行します。次のような例になります。        gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
         | 
  
  
    | 構成 | 1.15.0~1.15.10、1.16.0~1.16.6、1.28.0~1.28.200 | manualLB仕様が空の場合、controlPlaneNodePortフィールドのデフォルトが 30968 になる
手動ロードバランサを使用する場合(loadBalancer.kindが"ManualLB"に設定されている場合)は、バージョン 1.16 以降の高可用性(HA)管理クラスタの構成ファイルでloadBalancer.manualLBセクションを構成する必要はありません。ただし、このセクションが空の場合、Google Distributed Cloud はmanualLB.controlPlaneNodePortを含むすべての NodePort にデフォルト値を割り当てます。これにより、クラスタの作成が失敗し、次のエラー メッセージが表示されます。 - Validation Category: Manual LB
  - [FAILURE] NodePort configuration: manualLB.controlPlaneNodePort must
   not be set when using HA admin cluster, got: 30968 回避策: HA 管理クラスタの管理クラスタ構成で、manualLB.controlPlaneNodePort: 0を指定します。 loadBalancer:
  ...
  kind: ManualLB
  manualLB:
    controlPlaneNodePort: 0
  ... | 
  
  
    | ストレージ | 1.28.0~1.28.100 | Ubuntu OS イメージに nfs-common がありませんUbuntu OS イメージに 1.28 にアップグレードした後に、ログに次のようなエントリが含まれている場合、この問題の影響を受けています。nfs-commonがないため、NetApp などの NFS 依存ドライバを使用している環境で問題が発生する可能性があります。 Warning FailedMount 63s (x8 over 2m28s) kubelet MountVolume.SetUp failed for volume "pvc-xxx-yyy-zzz" : rpc error: code = Internal desc = error mounting NFS volume 10.0.0.2:/trident_pvc_xxx-yyy-zzz on mountpoint /var/lib/kubelet/pods/aaa-bbb-ccc/volumes/kubernetes.io~csi/pvc-xxx-yyy-zzz/mount: exit status 32".
      回避策: ノードが Canonical からパッケージをダウンロードできることを確認します。 次に、以下の DaemonSet をクラスタに適用して、nfs-commonをインストールします。 apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: install-nfs-common
  labels:
    name: install-nfs-common
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: install-nfs-common
  minReadySeconds: 0
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 100%
  template:
    metadata:
      labels:
        name: install-nfs-common
    spec:
      hostPID: true
      hostIPC: true
      hostNetwork: true
      initContainers:
      - name: install-nfs-common
        image: ubuntu
        imagePullPolicy: IfNotPresent
        securityContext:
          privileged: true
        command:
        - chroot
        - /host
        - bash
        - -c
        args:
        - |
          apt install -y nfs-common
        volumeMounts:
        - name: host
          mountPath: /host
      containers:
      - name: pause
        image: gcr.io/gke-on-prem-release/pause-amd64:3.1-gke.5
        imagePullPolicy: IfNotPresent
      volumes:
      - name: host
        hostPath:
          path: /
       | 
  
  
    | ストレージ | 1.28.0~1.28.100 | 管理クラスタの構成テンプレートにストレージ ポリシー フィールドがありません管理クラスタの SPBM は 1.28.0 以降のバージョンでサポートされています。しかし、構成ファイルのテンプレートに vCenter.storagePolicyNameフィールドがありません。 回避策: 管理クラスタのストレージ ポリシーを構成する場合は、管理クラスタの構成ファイルに vCenter.storagePolicyName フィールドを追加します。手順をご確認ください。 | 
  
  
    | ロギングとモニタリング | 1.28.0~1.28.100 | 最近追加された API kubernetesmetadata.googleapis.com は VPC-SC に対応していません。そのため、メタデータ収集エージェントは VPC-SC の下にあるこの API に到達できなくなります。その後、指標のメタデータ ラベルが失われます。 回避策: 次のコマンドを実行して、kube-system Namespace の CR stackdriver で、featureGates.disableExperimentalMetadataAgent フィールドを true に設定します。  `kubectl -n kube-system patch stackdriver stackdriver -p '{"spec":{"featureGates":{"disableExperimentalMetadataAgent":true}}}'`  次のコマンドを実行します。  `kubectl -n kube-system patch deployment stackdriver-operator -p '{"spec":{"template":{"spec":{"containers":[{"name":"stackdriver-operator","env":[{"name":"ENABLE_LEGACY_METADATA_AGENT","value":"true"}]}]}}}}'`  | 
  
  | アップグレード、更新 | 1.15.0-1.15.7、1.16.0-1.16.4、1.28.0 | 管理クラスタとコントロール プレーン V2 が有効になっているユーザー クラスタが、異なる vSphere 認証情報を使用すると、clusterapi-controller がクラッシュすることがある管理クラスタと Controlplane V2 が有効になっているユーザー クラスタが異なる vSphere 認証情報を使用していると(たとえば、管理クラスタの vSphere 認証情報の更新後)、再起動後に clusterapi-controller が vCenter に接続できないことがあります。管理クラスタの kube-system 名前空間で実行されている clusterapi-controller のログを確認します。 kubectl logs -f -l component=clusterapi-controllers -c vsphere-controller-manager \
    -n kube-system --kubeconfig KUBECONFIGログに次のようなエントリがある場合は、この問題の影響を受けています。E1214 00:02:54.095668       1 machine_controller.go:165] Error checking existence of machine instance for machine object gke-admin-node-77f48c4f7f-s8wj2: Failed to check if machine gke-admin-node-77f48c4f7f-s8wj2 exists: failed to find datacenter "VSPHERE_DATACENTER": datacenter 'VSPHERE_DATACENTER' not found 回避策: vSphere 認証情報を更新して、管理クラスタと Controlplane V2 が有効になっているすべてのユーザー クラスタで同じ vSphere 認証情報が使用されるようにします。 | 
  
  
    | ロギングとモニタリング | 1.14 | Prometheus Alert Manager で etcd の失敗した GRPC リクエスト数が多いPrometheus が次のようなアラートを報告することがあります。 Alert Name: cluster:gke-admin-test1: Etcd cluster kube-system/kube-etcd: 100% of requests for Watch failed on etcd instance etcd-test-xx-n001. 次の手順で、このアラートが無視できる誤検出かどうか確認します。 
        元の grpc_server_handled_total指標と、アラート メッセージで指定されたgrpc_methodと比較します。この例では、grpc_codeラベルでWatchを確認します。
 この指標は、次の MQL クエリで Cloud Monitoring を使用して確認できます。
 fetch
    k8s_container | metric 'kubernetes.io/anthos/grpc_server_handled_total' | align rate(1m) | every 1mコードが次のいずれかでない場合、OK以外のすべてのコードのアラートは無視しても問題ありません。Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded 
 回避策: こうした誤検出のアラートを無視するように Prometheus を構成するには、次のオプションを確認します。 
        Alert Manager の UI でアラートをミュートします。アラートのミュートが選択できない場合は、次の手順で誤検出を抑制します。
変更が永続的に保持されるように、モニタリング オペレーターを 0個のレプリカにスケールダウンします。次の例に示すように、prometheus-configconfigmap を変更して、etcdHighNumberOfFailedGRPCRequestsアラート構成にgrpc_method!="Watch"を追加します。元:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code!="OK",job=~".*etcd.*"}[5m])変更後:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code=~"Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded",grpc_method!="Watch",job=~".*etcd.*"}[5m])次のCLUSTER_NAMEはクラスタの名前で置き換えます。
Prometheus と Alertmanager Statefulset を再起動して、新しい構成を取得します。
コードが問題のあるケースのいずれかに該当する場合は、etcd ログと kube-apiserverログを確認して、さらにデバッグします。 | 
  
  
    | ネットワーキング | 1.16.0~1.16.2、1.28.0 | 下り(外向き)NAT の長時間接続が切断されるトラフィックがない場合、接続が確立されてから 5~10 分後に、下り(外向き)NAT 接続が切断されることがあります。 conntrack は、インバウンド方向(クラスタへの外部接続)でのみ問題になります。この問題は、接続がしばらく情報を送信していないときに宛先側で何かを送信すると発生します。下り(外向き)NAT の Pod が常にメッセージングをインスタンス化する場合、この問題は発生しません。 この問題は、デーモンが未使用と判断した conntrack エントリが anetd ガベージ コレクションによって誤って削除されるために発生します。この動作を修正するため、最近 anetd にアップストリームの修正が統合されました。 
 回避策: 簡単な回避策はありません。バージョン 1.16 では、この動作による問題は確認されていません。この問題が原因で長時間接続が切断された場合は、下り(外向き)IP アドレスと同じノードでワークロードを使用するか、常に TCP 接続でメッセージを送信します。 | 
  
  
    | オペレーション | 1.14、1.15、1.16 | 証明書に署名するときに、CSR 署名者が spec.expirationSecondsを無視するexpirationSecondsを設定して CertificateSigningRequest(CSR)を作成すると、expirationSecondsは無視されます。
 回避策: この問題の影響を受ける場合は、ユーザー クラスタ構成ファイルに disableNodeIDVerificationCSRSigning: trueを追加してユーザー クラスタを更新し、gkectl update clusterコマンドを実行して、この構成でクラスタを更新します。 | 
  
  
    | ネットワーキング、アップグレード、更新 | 1.16.0-1.16.3 | disable_bundled_ingressのユーザー クラスタのロードバランサの検証が失敗する
既存のクラスタで、バンドルされた Ingress を無効にしようとすると、次の例のようなエラーで gkectl update clusterコマンドが失敗します。 
[FAILURE] Config: ingress IP is required in user cluster spec
 このエラーは、gkectlがプリフライト チェック中にロードバランサの Ingress IP アドレスを確認するために発生します。バンドルされた Ingress を無効にする場合は、このチェックは必要ありませんが、disableBundledIngressがtrueに設定されていると、gkectlのプリフライト チェックが失敗します。 
 回避策: 次の例のように、クラスタを更新するときに --skip-validation-load-balancerパラメータを使用します。 gkectl update cluster \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG  \
  --skip-validation-load-balancer 詳細については、既存のクラスタのバンドルされた Ingress を無効にする方法をご覧ください。 | 
  
  
    | アップグレード、更新 | 1.13, 1.14, 1.15.0-1.15.6 | CA のローテーション後に管理クラスタの更新が失敗する管理クラスタの認証局(CA)証明書をローテーションすると、それ以降の gkectl update adminコマンドの実行は失敗します。次のようなエラーが返されます。 
failed to get last CARotationStage: configmaps "ca-rotation-stage" not found
 
 回避策: この問題の影響を受けている場合、gkectl update adminコマンドで--disable-update-from-checkpointフラグを使用して、管理クラスタを更新できます。 gkectl update admin --config ADMIN_CONFIG_file \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --disable-update-from-checkpoint--disable-update-from-checkpointフラグを使用すると、update コマンドはクラスタの更新中にチェックポイント ファイルを信頼できる情報源として使用しません。チェックポイント ファイルは、今後の使用のために引き続き更新されます。
 | 
  
  
    | ストレージ | 1.15.0~1.15.6、1.16.0~1.16.2 | Pod の起動に失敗したため、CSI ワークロードのプリフライト チェックが失敗するプリフライト チェック中に、CSI Workload 検証チェックによって Pod が defaultNamespace にインストールされます。CSI ワークロード Pod は、vSphere CSI ドライバがインストールされ、動的ボリューム プロビジョニングを実行できることを確認します。この Pod が起動しないと、CSI ワークロードの検証チェックが失敗します。 
      この Pod の起動の妨げとなる既知の問題がいくつかあります。 
      Pod にリソース上限が指定されていない場合(Admission Webhook がインストールされている一部のクラスタの場合)、Pod は起動しません。defaultNamespace で自動 Istio サイドカー インジェクションが有効になっている状態で、Cloud Service Mesh がクラスタにインストールされている場合、CSI ワークロード Pod は起動しません。 CSI ワークロード Pod が起動しない場合は、プリフライト検証中に次のようなタイムアウト エラーが発生します。 - [FAILURE] CSI Workload: failure in CSIWorkload validation: failed to create writer Job to verify the write functionality using CSI: Job default/anthos-csi-workload-writer-<run-id> replicas are not in Succeeded phase: timed out waiting for the condition Pod リソースセットの不足が失敗の原因かどうかを確認するには、次のコマンドを実行して anthos-csi-workload-writer-<run-id>ジョブのステータスを確認します。 kubectl describe job anthos-csi-workload-writer-<run-id> CSI ワークロード Pod のリソース上限が正しく設定されていない場合、ジョブ ステータスの中に次のようなエラー メッセージが表示されます。 CPU and memory resource limits is invalid, as it are not defined for container: volume-tester Istio サイドカー インジェクションが原因で CSI ワークロード Pod が起動しない場合は、defaultNamespace で Istio サイドカーの自動インジェクションを一時的に無効にできます。Namespace のラベルを確認し、次のコマンドを使用してistio.io/revで始まるラベルを削除します。 kubectl label namespace default istio.io/rev- Pod の構成が正しくない場合は、vSphere CSI ドライバを使用した動的ボリューム プロビジョニングが機能することを手動で確認します。 
      standard-rwoStorageClass を使用する PVC を作成します。PVC を使用する Pod を作成します。Pod がボリュームに対してデータの読み取り / 書き込みが可能であることを確認します。適切な動作を確認したら、Pod と PVC を削除します。 vSphere CSI ドライバを使用した動的ボリューム プロビジョニングが機能する場合は、--skip-validation-csi-workloadフラグを指定してgkectl diagnoseまたはgkectl upgradeを実行し、CSI ワークロードのチェックをスキップします。 | 
    
  
    | オペレーション | 1.16.0-1.16.2 | 管理クラスタのバージョンが 1.15 の場合、ユーザー クラスタの更新がタイムアウトするユーザー管理の管理ワークステーションにログオンすると、gkectl update clusterコマンドがタイムアウトしてユーザー クラスタの更新に失敗することがあります。これは、管理クラスタのバージョンが 1.15 で、gkectl update clusterを実行する前にgkectl update adminを実行した場合に発生します。この障害が発生した場合、クラスタを更新しようとすると、次のエラーが表示されます。 
      Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
      1.15 管理クラスタの更新中に、プリフライト チェックをトリガーする validation-controllerがクラスタから削除されます。その後、ユーザー クラスタを更新しようとすると、タイムアウトに達するまでプリフライト チェックがハングします。 回避策: 
      次のコマンドを実行して validation-controllerを再デプロイします。
      gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
      
      準備が完了したら、gkectl update clusterを再度実行してユーザー クラスタを更新します。 | 
  
  
    | オペレーション | 1.16.0-1.16.2 | 管理クラスタのバージョンが 1.15 の場合、ユーザー クラスタの作成がタイムアウトするユーザー管理の管理ワークステーションにログオンすると、gkectl create clusterコマンドがタイムアウトしてユーザー クラスタの作成に失敗することがあります。これは、管理クラスタのバージョンが 1.15 の場合に発生します。この障害が発生した場合、クラスタを作成しようとすると、次のエラーが表示されます。 
      Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
      validation-controllerは 1.16 で追加されたため、1.15 の管理クラスタを使用する場合、プリフライト チェックをトリガーするvalidation-controllerが欠落しています。そのため、ユーザー クラスタを作成しようとすると、タイムアウトになるまでプリフライト チェックがハングします。
 回避策: 
      次のコマンドを実行して validation-controllerをデプロイします。
      gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
      
      準備が完了したら、gkectl create clusterを再度実行してユーザー クラスタを作成します。 | 
  
  
    | アップグレード、更新 | 1.16.0-1.16.2 | アドオン サービスのプロジェクトまたはロケーションが一致しない場合、管理クラスタの更新やアップグレードが失敗する管理クラスタをバージョン 1.15.x から 1.16.x にアップグレードする場合、または、connect、stackdriver、cloudAuditLogging、またはgkeOnPremAPI構成を追加する場合に、管理クラスタを更新すると、管理クラスタの Webhook によってオペレーションが拒否される場合があります。次のいずれかのエラー メッセージが表示される場合があります。 
        "projects for connect, stackdriver and cloudAuditLogging must be the
        same when specified during cluster creation.""locations for connect, gkeOnPremAPI, stackdriver and
        cloudAuditLogging must be in the same region when specified during
        cluster creation.""locations for stackdriver and cloudAuditLogging must be the same
        when specified during cluster creation." 管理クラスタの更新またはアップグレードでは、kind クラスタの管理クラスタを調整するために onprem-admin-cluster-controllerが必要です。kind クラスタで管理クラスタの状態が復元されると、管理クラスタの Webhook は、OnPremAdminClusterオブジェクトが管理クラスタの作成用なのか、更新またはアップグレードのオペレーションを再開するためのものかを区別できません。一部の作成専用の検証は、更新とアップグレードで予期せずに呼び出されます。 
 回避策: onprem.cluster.gke.io/skip-project-location-sameness-validation: trueアノテーションをOnPremAdminClusterオブジェクトに追加します。
 
        onpremadminclustersクラスタ リソースを編集します。kubectl edit onpremadminclusters ADMIN_CLUSTER_NAME -n kube-system –kubeconfig ADMIN_CLUSTER_KUBECONFIG次のように置き換えます。 ADMIN_CLUSTER_NAME: 管理クラスタの名前。ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス
onprem.cluster.gke.io/skip-project-location-sameness-validation: trueアノテーションを追加して、カスタム リソースを保存します。管理クラスタの種類に応じて、次のいずれかの操作を行います。
チェックポイント ファイルがある非 HA 管理クラスタの場合: update コマンドに disable-update-from-checkpointパラメータを追加するか、upgrade コマンドに disable-upgrade-from-checkpooint パラメータを追加します。これらのパラメータは、次にupdateまたはupgradeコマンドを実行するときにのみ、必要になります。
gkectl update admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  --disable-update-from-checkpoint
gkectl upgrade admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  --disable-upgrade-from-checkpoint
HA 管理クラスタの場合、またはチェックポイント ファイルが無効になっている場合: 通常どおり管理クラスタを更新またはアップグレードします。update コマンドまたは upgrade コマンドに追加のパラメータは必要ありません。
 | 
  
  
    | オペレーション | 1.16.0-1.16.2 | ユーザー管理の管理ワークステーションを使用している場合、ユーザー クラスタの削除に失敗するユーザー管理の管理ワークステーションにログオンすると、gkectl delete clusterコマンドがタイムアウトしてユーザー クラスタの削除に失敗することがあります。これは、ユーザー管理のワークステーションでgkectlを使用して、ユーザー クラスタの作成、更新、アップグレードを実行した場合に発生します。この障害が発生した場合、クラスタを削除しようとすると、次のエラーが表示されます。 
      failed to wait for user cluster management namespace "USER_CLUSTER_NAME-gke-onprem-mgmt"
      to be deleted: timed out waiting for the condition
      削除時に、クラスタはすべてのオブジェクトを削除します。Validation オブジェクト(作成、更新、アップグレード中に作成されたもの)の削除は、削除の段階で停止します。これは、ファイナライザがオブジェクトの削除をブロックし、クラスタの削除が失敗するためです。 回避策: 
      すべての Validation オブジェクトの名前を取得します。
         kubectl  --kubeconfig ADMIN_KUBECONFIG get validations \
           -n USER_CLUSTER_NAME-gke-onprem-mgmt
        
      Validation オブジェクトごとに次のコマンドを実行して、Validation オブジェクトからファイナライザを削除します。
      kubectl --kubeconfig ADMIN_KUBECONFIG patch validation/VALIDATION_OBJECT_NAME \
        -n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=merge
      
      すべての Validation オブジェクトからファイナライザを削除すると、オブジェクトが削除され、ユーザー クラスタの削除オペレーションが自動的に完了します。ユーザー側で対応は必要ありません。 | 
  
  
    | ネットワーキング | 1.15、1.16 | 外部サーバーの下り(外向き)NAT ゲートウェイ トラフィックが失敗する送信元 Pod と下り(外向き)NAT ゲートウェイ Pod がそれぞれ異なるワーカーノードにある場合、送信元 Pod からのトラフィックは外部サービスに到達できません。Pod が同じホストにある場合、外部サービスまたはアプリケーションへの接続は成功します。 この問題は、トンネル集約が有効になっているときに vSphere が VXLAN パケットを破棄することで発生します。NSX と VMware には、既知の VXLAN ポート(4789)で集約されたトラフィックのみを送信するという既知の問題があります。 
 回避策: Cilium が使用する VXLAN ポートを 4789に変更します。 
        cilium-configConfigMap を編集します。kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIGcilium-configConfigMap に次のように追加します。tunnel-port: 4789anetd DaemonSet を再起動します。kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG この回避策は、クラスタがアップグレードされるたびに元に戻ります。アップグレード後に再構成する必要があります。完全に修正するには、VMware 側で vSphere の問題を解決する必要があります。 | 
  
  
    | アップグレード | 1.15.0-1.15.4 | 常時オンのシークレット暗号化が有効になっている管理クラスタのアップグレードが失敗するコントローラで生成された暗号鍵と、管理マスター データ ディスク上で保持されている鍵の不一致が原因で、常時有効なシークレット暗号化が有効になっている管理クラスタを 1.14.x から 1.15.x にアップグレードできません。gkectl upgrade
        adminの出力には、次のエラー メッセージが含まれます。 
      E0926 14:42:21.796444   40110 console.go:93] Exit with error:
      E0926 14:42:21.796491   40110 console.go:93] Failed to upgrade the admin cluster: failed to create admin cluster: failed to wait for OnPremAdminCluster "admin-cluster-name" to become ready: failed to wait for OnPremAdminCluster "admin-cluster-name" to be ready: error: timed out waiting for the condition, message: failed to wait for OnPremAdminCluster "admin-cluster-name" to stay in ready status for duration "2m0s": OnPremAdminCluster "non-prod-admin" is not ready: ready condition is not true: CreateOrUpdateControlPlane: Creating or updating credentials for cluster control plane
      kubectl get secrets -A --kubeconfig KUBECONFIG`を実行すると、次のエラーで失敗します。
 
      Internal error occurred: unable to transform key "/registry/secrets/anthos-identity-service/ais-secret": rpc error: code = Internal desc = failed to decrypt: unknown jwk
      回避策管理クラスタのバックアップがある場合は、次の手順でアップグレード エラーを回避してください。 
        
          管理クラスタの構成ファイルで secretsEncryptionを無効にし、次のコマンドを使用してクラスタを更新します。gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
        新しい管理マスター VM が作成されたら、管理マスター VM に SSH で接続し、データディスク上の新しい鍵をバックアップの古い鍵に置き換えます。鍵は管理マスターの /opt/data/gke-k8s-kms-plugin/generatedkeysにあります。
        /etc/kubernetes/manifestsの kms-plugin.yaml 静的 Pod マニフェストを更新して、元の暗号鍵のkidフィールドと一致するように--kek-idを更新します。
        /etc/kubernetes/manifests/kms-plugin.yamlを別のディレクトリに移動して kms-plugin 静的 Pod を再起動してから、それを元に戻します。
        gkectl upgrade adminを再度実行して、管理のアップグレードを再開します。 アップグレードの失敗を防ぐまだアップグレードしていない場合は、1.15.0~1.15.4 にアップグレードしないことをおすすめします。影響を受けるバージョンにアップグレードする必要がある場合は、管理クラスタをアップグレードする前に、次の操作を行います。 
        
          管理クラスタをバックアップします。
          管理クラスタの構成ファイルで secretsEncryptionを無効にし、次のコマンドを使用してクラスタを更新します。gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG管理クラスタをアップグレードします。常時有効なシークレット暗号化を有効にします。 | 
  
  
    | ストレージ | 1.11~1.16 | 変更ブロックのトラッキング(CBT)の使用時のディスクエラーとアタッチの失敗Google Distributed Cloud は、ディスクの変更ブロック トラッキング(CBT)をサポートしていません。一部のバックアップ ソフトウェアは、CBT 機能を使用してディスクの状態を追跡し、バックアップを行います。このため、Google Distributed Cloud を実行する VM にディスクを接続できません。詳細については、VMware Knowledge Base の記事をご覧ください。 
 回避策: サードパーティのバックアップ ソフトウェアを使用すると、ディスクで CBT が有効になる可能性があるため、Google Distributed Cloud VM をバックアップしないでください。これらの VM をバックアップする必要はありません。 この変更は、更新またはアップグレードを行うと破棄されるため、ノードで CBT を有効にしないでください。 CBT が有効になっているディスクがすでにある場合は、VMware Knowledge Base の記事の解決策の手順に沿って、ファースト クラスのディスクで CBT を無効にします。 | 
  
  
    | ストレージ | 1.14、1.15、1.16 | 複数のホストから共有ファイルに並列追加が行われると NFSv3 上のデータが破損するNutanix ストレージ アレイを使用して NFSv3 共有をホストに提供すると、データが破損したり、Pod が正常に動作しなくなることがあります。この問題は、特定のバージョンの VMware と Nutanix のバージョン間で確認されている互換性の問題が原因で発生します。詳細については、関連する VMware KB の記事をご覧ください。 
 回避策: VMware の KB 記事は最新でないため、現在実施できる解決策はありません。この問題を解決するには、ホスト上の ESXi を最新バージョンに更新し、ストレージ アレイ上の Nutanix を最新バージョンに更新します。 | 
  | オペレーティング システム | 1.13.10、1.14.6、1.15.3 | kubelet と Kubernetes コントロール プレーン間のバージョンの不一致一部の Google Distributed Cloud リリースでは、ノードで実行される kubelet と Kubernetes コントロール プレーンのバージョンが一致していない場合があります。OS イメージにプリロードされた kubelet バイナリが異なるバージョンを使用しているため、不一致があります。
 次の表に、確認されているバージョンの不一致を示します。 
      
        | Google Distributed Cloud のバージョン | kubelet のバージョン | Kubernetes のバージョン |  
        | 1.13.10 | v1.24.11-gke.1200 | v1.24.14-gke.2100 |  
        | 1.14.6 | v1.25.8-gke.1500 | v1.25.10-gke.1200 |  
        | 1.15.3 | v1.26.2-gke.1001 | v1.26.5-gke.2100 |  回避策: 必要な対応はありません。この不整合は Kubernetes パッチ バージョン間のみであり、このバージョン スキューによる問題はありません。
 | 
  | アップグレード、更新 | 1.15.0-1.15.4 | 1 より大きいバージョンの CA を使用した管理クラスタのアップグレードまたは更新が失敗する管理クラスタの認証局(CA)のバージョンが 1 より大きい場合、Webhook の CA バージョンの検証により、更新またはアップグレードが失敗します。gkectlupgrade / update の出力には、次のエラー メッセージが含まれます。     CAVersion must start from 1
    回避策: 
      
        管理クラスタの auto-resize-controllerDeployment をスケールダウンして、ノードの自動サイズ変更を無効にします。1.15 で管理クラスタのカスタム リソースに導入された新しいフィールドにより、auto-resize-controllerで nil ポインタエラーが発生する可能性があるため、このような操作が必要になります。 kubectl scale deployment auto-resize-controller -n kube-system --replicas=0 --kubeconfig KUBECONFIG
      
         --disable-admin-cluster-webhookフラグを指定してgkectlコマンドを実行します。例:        gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG --disable-admin-cluster-webhook
         | 
  | オペレーション | 1.13、1.14.0~1.14.8、1.15.0~1.15.4、1.16.0~1.16.1 | 非 HA コントロール プレーン V2 クラスタの削除がタイムアウトまで停止する非 HA Controlplane V2 クラスタが削除されると、タイムアウトするまで、ノードの削除で処理が停止します。 回避策: クラスタに重要なデータを含む StatefulSet が含まれている場合は、Cloud カスタマーケアにお問い合わせください。 それ以外の場合は、次の操作を行います。 
     vSphere からすべてのクラスタ VM を削除します。vSphere UI で VM を削除するか、次のコマンドを実行します。      govc vm.destroyクラスタをもう一度強制的に削除します。     gkectl delete cluster --cluster USER_CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG --force
      | 
  | ストレージ | 1.15.0+, 1.16.0+ | バージョン 1.15 以降にアップグレードすると、in-tree PVC / PV に対して一定の CNS attachvolume タスクが毎分表示されるクラスタに in-tree vSphere 永続ボリューム(たとえば、standardStorageClass で作成された PVC)が含まれていると、vCenter から 1 分ごとに com.vmware.cns.tasks.attachvolume タスクがトリガーされます。 
 回避策: vSphere CSI 機能の configMap を編集し、list-volumes を false に設定します。      kubectl edit configmap internal-feature-states.csi.vsphere.vmware.com -n kube-system --kubeconfig KUBECONFIG
     vSphere CSI コントローラ Pod を再起動します。      kubectl rollout restart deployment vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
     | 
  | ストレージ | 1.16.0 | PVC に関する誤った警告クラスタに intree vSphere 永続ボリュームが含まれている場合、gkectl diagnoseおよびgkectl upgradeコマンドを実行すると、クラスタのストレージ設定を検証するときに、永続ボリューム要求(PVC)に対して誤った警告が表示されることがあります。次のような警告メッセージが表示されます。     CSIPrerequisites pvc/pvc-name: PersistentVolumeClaim pvc-name bounds to an in-tree vSphere volume created before CSI migration enabled, but it doesn't have the annotation pv.kubernetes.io/migrated-to set to csi.vsphere.vmware.com after CSI migration is enabled
    
 回避策: 次のコマンドを実行して、先ほどの警告が表示された PVC のアノテーションを確認します。     kubectl get pvc PVC_NAME -n PVC_NAMESPACE -oyaml --kubeconfig KUBECONFIG
    出力の annotationsフィールドに次の内容が含まれている場合、警告は無視して構いません。       pv.kubernetes.io/bind-completed: "yes"
      pv.kubernetes.io/bound-by-controller: "yes"
      volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
     | 
  
  
    | アップグレード、更新 | 1.15.0+, 1.16.0+ | 複数のキーが期限切れになった場合、サービス アカウント キーのローテーションが失敗するクラスタで非公開レジストリが使用されておらず、コンポーネント アクセス サービス アカウント キーと Logging-monitoring(または Connect-register)サービス アカウント キーが期限切れになると、サービス アカウント キーのローテーション時に、gkectl update credentialsが次のようなエラーで失敗します。 Error: reconciliation failed: failed to update platform: ... 回避策: まず、コンポーネント アクセス サービス アカウント キーをローテーションします。同じエラー メッセージが表示されますが、コンポーネント アクセス サービス アカウント キーのローテーション後に他のキーをローテーションできるはずです。 それでも更新が成功しない場合は、Cloud カスタマーケアにお問い合わせください。 | 
  | アップグレード | 1.16.0~1.16.5 | ユーザー クラスタ コントローラが 1.16 にアップグレードされると、1.15 ユーザー マスター マシンで予期しない再作成が発生するユーザー クラスタのアップグレードで、ユーザー クラスタ コントローラが 1.16 にアップグレードされた後に、同じ管理クラスタで管理されている 1.15 のユーザー クラスタが存在すると、そのユーザー マスター マシンが予期せずに再作成される可能性があります。 1.16 ユーザー クラスタ コントローラにバグがあり、1.15 ユーザー マスター マシンの再作成をトリガーできます。 回避策は、この問題が発生した状況によって異なります。  Google Cloud コンソールを使用してユーザー クラスタをアップグレードする場合の回避策: オプション 1: 修正適用済みのバージョン 1.16.6 以降の GKE on VMware を使用します。 オプション 2: 次の操作を行います。 
    次のコマンドを実行して、再実行のアノテーションを手動で追加します。kubectl edit onpremuserclusters USER_CLUSTER_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt --kubeconfig ADMIN_KUBECONFIG 再実行のアノテーションは次のとおりです。 onprem.cluster.gke.io/server-side-preflight-rerun: trueOnPremUserCluster の statusフィールドで、アップグレードの進行状況をモニタリングします。 独自の管理ワークステーションを使用してユーザー クラスタをアップグレードする場合の回避策: オプション 1: 修正適用済みのバージョン 1.16.6 以降の GKE on VMware を使用します。 オプション 2: 次の操作を行います。 
      次の内容のビルド情報ファイル /etc/cloud/build.infoを追加します。これにより、プリフライト チェックがサーバーではなく、管理ワークステーションのローカルで実行されるようになります。gke_on_prem_version: GKE_ON_PREM_VERSION例: gke_on_prem_version: 1.16.0-gke.669アップグレード コマンドを再実行します。アップグレードが完了したら、build.info ファイルを削除します。 | 
  | 作成 | 1.16.0~1.16.5、1.28.0~1.28.100 | ホスト名が IP ブロック ファイルにないとき、プリフライト チェックが失敗するクラスタの作成時に、IP ブロック ファイルのすべての IP アドレスにホスト名を指定しないと、プリフライト チェックが失敗し、次のエラー メッセージが表示されます。 multiple VMs found by DNS name  in xxx datacenter. Anthos Onprem doesn't support duplicate hostname in the same vCenter and you may want to rename/delete the existing VM.`
    プリフライト チェックのバグにより、空のホスト名が重複とみなされます。 回避策: オプション 1: 修正適用済みのバージョンを使用します。 オプション 2: --skip-validation-net-configフラグを追加して、このプリフライト チェックをバイパスします。 オプション 3: IP ブロック ファイル内の IP アドレスごとに一意のホスト名を指定します。 | 
| アップグレード、更新 | 1.16 | 非 HA 管理クラスタとコントロール プレーン v1 のユーザー クラスタを使用している場合、管理クラスタをアップグレードまたは更新するときにボリューム マウントが失敗する非 HA 管理クラスタとコントロール プレーン v1 ユーザー クラスタの場合、管理クラスタをアップグレードまたは更新すると、ユーザー クラスタ マスター マシンの再起動と同時に管理クラスタ マスター マシンの再作成が行われることがあります。これにより、競合状態が発生する可能性があります。この状況が発生すると、ユーザー クラスタ コントロール プレーン Pod が管理クラスタ コントロール プレーンと通信できなくなり、ユーザー クラスタ コントロール プレーンの kube-etcd と kube-apiserver でボリューム接続の問題が発生します。 この問題を確認するには、影響を受けた Pod に対して次のコマンドを実行します。 kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace USER_CLUSTER_NAME describe pod IMPACTED_POD_NAME次のようなイベントが表示されます。 
Events:
  Type     Reason       Age                  From               Message
  ----     ------       ----                 ----               -------
  Warning  FailedMount  101s                 kubelet            Unable to attach or mount volumes: unmounted volumes=[kube-audit], unattached volumes=[], failed to process volumes=[]: timed out waiting for the condition
  Warning  FailedMount  86s (x2 over 3m28s)  kubelet            MountVolume.SetUp failed for volume "pvc-77cd0635-57c2-4392-b191-463a45c503cb" : rpc error: code = FailedPrecondition desc = volume ID: "bd313c62-d29b-4ecd-aeda-216648b0f7dc" does not appear staged to "/var/lib/kubelet/plugins/kubernetes.io/csi/csi.vsphere.vmware.com/92435c96eca83817e70ceb8ab994707257059734826fedf0c0228db6a1929024/globalmount"
 回避策: 
    
    ユーザー コントロール プレーン ノードに SSH で接続します。これはコントロール プレーン v1 ユーザー クラスタであるため、ユーザー コントロール プレーン ノードは管理クラスタにあります。
    次のコマンドを使用して kubelet を再起動します。    sudo systemctl restart kubelet
    再起動後、kubelet はステージ グローバル マウントを適切に再構築できます。 | 
  | アップグレード、更新 | 1.16.0 | コントロール プレーン ノードの作成に失敗する管理クラスタのアップグレードまたは更新中に競合状態が発生し、vSphere クラウド コントローラ マネージャーが新しいコントロール プレーン ノードを予期せず削除する場合があります。これにより、ノードの作成を待機するために clusterapi-controller が停止し、最終的にアップグレードや更新がタイムアウトします。この場合、gkectlのアップグレード / 更新コマンドの出力は次のようになります。     controlplane 'default/gke-admin-hfzdg' is not ready: condition "Ready": condition is not ready with reason "MachineInitializing", message "Wait for the control plane machine "gke-admin-hfzdg-6598459f9zb647c8-0\" to be rebooted"...
    この問題を特定するには、次のコマンドを実行して、管理クラスタで vSphere クラウド コントローラ マネージャーにログインします。     kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
    kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
    このコマンドから次のようなエラー メッセージが返されます。 
         node name: 81ff17e25ec6-qual-335-1500f723 has a different uuid. Skip deleting this node from cache.
    回避策: 
      
      障害が発生したマシンを再起動して、削除されたノード オブジェクトを再作成します。
      各コントロール プレーン ノードに SSH で接続し、vSphere クラウド コントローラ マネージャーの静的 Pod を再起動します。      sudo crictl ps | grep vsphere-cloud-controller-manager | awk '{print $1}'
      sudo crictl stop PREVIOUS_COMMAND_OUTPUT
      
      アップグレード / 更新コマンドを再実行します。 | 
  | オペレーション | 1.16 | 同じデータセンター内でホスト名が重複していると、クラスタのアップグレードまたは作成に失敗する同じデータセンター内でホスト名が重複していると、1.15 クラスタのアップグレードや、静的 IP を持つ 1.16 クラスタの作成が失敗します。このエラーは、vSphere クラウド コントローラ マネージャーがノード オブジェクトに外部 IP とプロバイダ ID を追加できないために発生します。これにより、クラスタのアップグレード / 作成がタイムアウトします。 問題を特定するには、クラスタの vSphere クラウド コントローラ マネージャーの Pod ログを取得します。使用するコマンドは、クラスタタイプによって異なります。 
      管理クラスタ:      kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
      enableControlplaneV2falseを使用するユーザー クラスタ:      kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME
      enableControlplaneV2trueを使用するユーザー クラスタ:      kubectl get pods --kubeconfig USER_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
      kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig USER_KUBECONFIG -n kube-system
       次のようなエラー メッセージが表示されます。     I1003 17:17:46.769676       1 search.go:152] Finding node admin-vm-2 in vc=vcsa-53598.e5c235a1.asia-northeast1.gve.goog and datacenter=Datacenter
    E1003 17:17:46.771717       1 datacenter.go:111] Multiple vms found VM by DNS Name. DNS Name: admin-vm-2
    データセンター内でホスト名が重複しているかどうかを確認します。次の方法でホスト名が重複しているかどうか確認し、必要に応じて回避策を行います。           export GOVC_DATACENTER=GOVC_DATACENTER
          export GOVC_URL=GOVC_URL
          export GOVC_USERNAME=GOVC_USERNAME
          export GOVC_PASSWORD=GOVC_PASSWORD
          export GOVC_INSECURE=true
          govc find . -type m -guest.hostName HOSTNAME
          コマンドと出力の例:          export GOVC_DATACENTER=mtv-lifecycle-vc01
          export GOVC_URL=https://mtv-lifecycle-vc01.anthos/sdk
          export GOVC_USERNAME=xxx
          export GOVC_PASSWORD=yyy
          export GOVC_INSECURE=true
          govc find . -type m -guest.hostName f8c3cd333432-lifecycle-337-xxxxxxxz
          ./vm/gke-admin-node-6b7788cd76-wkt8g
          ./vm/gke-admin-node-6b7788cd76-99sg2
          ./vm/gke-admin-master-5m2jb
          失敗したオペレーションによって回避策が異なります。 アップグレード時の回避策: クラスタタイプに応じて回避策を行います。 
        ユーザー クラスタ:
          user-ip-block.yaml で、影響を受けるマシンのホスト名を一意の名前に変更し、強制更新をトリガーします。
           gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config NEW_USER_CLUSTER_CONFIG --force
          
          gkectl upgrade clusterを再実行します。
管理クラスタ:
admin-ip-block.yaml で、影響を受けるマシンのホスト名を一意の名前に変更し、強制更新をトリガーします。
           gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config NEW_ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
          非 HA 管理クラスタであり、管理マスター VM が重複するホスト名を使用していることが判明した場合は、次の操作も必要になります。管理マスターマシン名を取得する
           kubectl get machine --kubeconfig ADMIN_KUBECONFIG -owide -A
          管理マスター マシン オブジェクトを更新する注: NEW_ADMIN_MASTER_HOSTNAME は、手順 1 で admin-ip-block.yaml で設定したものと同じにする必要があります。
 
           kubectl patch machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG --type='json' -p '[{"op": "replace", "path": "/spec/providerSpec/value/networkSpec/address/hostname", "value":"NEW_ADMIN_MASTER_HOSTNAME"}]'
          管理マスター マシン オブジェクトで、ホスト名が更新されていることを確認します。
           kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -oyaml
          kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -o jsonpath='{.spec.providerSpec.value.networkSpec.address.hostname}'
          チェックポイントを無効にして管理クラスタのアップグレードを再実行します。
           gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --disable-upgrade-from-checkpoint
          
 インストールの回避策: クラスタタイプに応じて回避策を行います。 | 
  | オペレーション | 1.16.0、1.16.1、1.16.2、1.16.3 | vSphere のユーザー名またはパスワードで $と`がサポートされないvSphere のユーザー名またはパスワードに $または`が含まれていると、次の処理を行うことができません。 
        Controlplane V2 が有効になっている 1.15 ユーザー クラスタを 1.16 にアップグレードする1.15 高可用性(HA)管理クラスタを 1.16 にアップグレードするコントロール レーン V2 が有効な 1.16 ユーザー クラスタを作成する1.16 HA 管理クラスタを作成する 修正が適用された 1.16.4 以降のバージョンの Google Distributed Cloud を使用するか、以下の回避策を実施してください。失敗したオペレーションによって回避策が異なります。 アップグレード時の回避策: 
      vCenter 側で vCenter のユーザー名またはパスワードを変更して、$と`を削除します。認証情報構成ファイルで vCenter のユーザー名またはパスワードを更新します。クラスタの強制更新をトリガーします。
        ユーザー クラスタ:        gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG --force
        管理クラスタ:        gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
         インストールの回避策: 
      vCenter 側で vCenter のユーザー名またはパスワードを変更して、$と`を削除します。認証情報構成ファイルで vCenter のユーザー名またはパスワードを更新します。クラスタタイプに応じて回避策を行います。 | 
  | ストレージ | 1.11+、1.12+、1.13+、1.14+、1.15+、1.16 | 同じ名前でノードを再作成した後に PVC 作成に失敗するノードを削除してから同じノード名で再作成した後に、PersistentVolumeClaim(PVC)を作成すると、次のようなエラーで失敗することがあります。     The object 'vim.VirtualMachine:vm-988369' has already been deleted or has not been completely created vSphere CSI コントローラが、削除されたマシンをキャッシュから削除していないために、競合状態が発生しています。 
 回避策: vSphere CSI コントローラ Pod を再起動します。     kubectl rollout restart deployment vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
     | 
  
  
    | オペレーション | 1.16.0 | gkectl repair admin-master で kubeconfig unmarshall エラーが返されるHA 管理クラスタで gkectl repair admin-masterコマンドを実行すると、gkectlが次のエラー メッセージを返します。   Exit with error: Failed to repair: failed to select the template: failed to get cluster name from kubeconfig, please contact Google support. failed to decode kubeconfig data: yaml: unmarshal errors:
    line 3: cannot unmarshal !!seq into map[string]*api.Cluster
    line 8: cannot unmarshal !!seq into map[string]*api.Context
  
 回避策: コマンドに --admin-master-vm-template=フラグを追加して、修復するマシンの VM テンプレートを指定します。   gkectl repair admin-master --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
      --config ADMIN_CLUSTER_CONFIG_FILE \
      --admin-master-vm-template=/DATA_CENTER/vm/VM_TEMPLATE_NAME
  マシンの VM テンプレートを確認するには: 
        vSphere クライアントの [Hosts and Clusters] ページに移動します。[VM Templates] をクリックして、管理クラスタ名でフィルタします。管理クラスタの 3 つの VM テンプレートが表示されます。修復するマシンの名前と一致する VM テンプレート名をコピーして、そのテンプレート名を repair コマンドで使用します。   gkectl repair admin-master \
      --config=/home/ubuntu/admin-cluster.yaml \
      --kubeconfig=/home/ubuntu/kubeconfig \
      --admin-master-vm-template=/atl-qual-vc07/vm/gke-admin-98g94-zx...7vx-0-tmpl | 
  | ネットワーキング | 1.10.0+、1.11.0+、1.12.0+、1.13.0+、1.14.0-1.14.7、1.15.0~1.15.3、1.16.0 | ディスク容量不足により Seesaw VM が破損するクラスタのロードバランサ タイプとして Seesaw を使用しているときに、Seesaw VM が停止していたり、起動の失敗を繰り返すと、vSphere コンソールに次のエラー メッセージが表示されることがあります。     GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd
    このエラーは、Seesaw VM で実行されている fluent-bit が正しいログ ローテーションで構成されていないため、VM のディスク容量が不足していることを示します。 
 回避策: du -sh -- /var/lib/docker/containers/* | sort -rhを使用して、ディスク容量の大部分を占有しているログファイルを探します。サイズが最も大きいログファイルをクリーンアップして、VM を再起動します。
 注: VM が完全にアクセス不能な場合は、ディスクを作業中の VM(管理ワークステーションなど)にアタッチしてファイルを削除し、そのディスクを元の Seesaw VM に再度アタッチします。 この問題が再発しないようにするには、VM に接続して /etc/systemd/system/docker.fluent-bit.serviceファイルを変更します。Docker コマンドに--log-opt max-size=10m --log-opt max-file=5を追加して、systemctl restart docker.fluent-bit.serviceを実行します。 | 
  | オペレーション | 1.13、1.14.0~1.14.6、1.15 | 管理クラスタのアップグレードまたは更新後に、管理 SSH 公開鍵エラーが発生するチェックポイントを有効にして非 HA 管理クラスタをアップグレード(gkectl upgrade admin)または更新(gkectl update admin)しようとすると、アップグレードや更新が失敗して、次のようなエラーが表示されることがあります。 Checking admin cluster certificates...FAILURE
    Reason: 20 admin cluster certificates error(s).
Unhealthy Resources:
    AdminMaster clusterCA bundle: failed to get clusterCA bundle on admin master, command [ssh -o IdentitiesOnly=yes -i admin-ssh-key -o StrictHostKeyChecking=no -o ConnectTimeout=30 ubuntu@AdminMasterIP -- sudo cat /etc/kubernetes/pki/ca-bundle.crt] failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
    ubuntu@AdminMasterIP: Permission denied (publickey).failed to ssh AdminMasterIP, failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
    ubuntu@AdminMasterIP: Permission denied (publickey)error dialing ubuntu@AdminMasterIP: failed to establish an authenticated SSH connection: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]... 
 回避策: 修正が適用された Google Distributed Cloud のパッチ バージョンにアップグレードできない場合は、Google サポートにお問い合わせください。 | 
  | アップグレード | 1.13.0-1.13.9, 1.14.0-1.14.6, 1.15.1-1.15.2 | GKE On-Prem API に登録された管理クラスタのアップグレードが失敗することがある管理クラスタが GKE On-Prem API に登録されていると、フリート メンバーシップを更新できず、影響を受けるバージョンに管理クラスタをアップグレードできないことがあります。この状況でクラスタをアップグレードしようとすると、次のエラーが表示されます。     failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.on_prem_cluster.resource_link: field cannot be updated
    管理クラスタが API に登録されるのは、クラスタを明示的に登録した場合だけはありません。GKE On-Prem API クライアントを使用してユーザー クラスタをアップグレードした場合にも登録されます。 
 回避策:管理クラスタの登録を解除します。     gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
    管理クラスタのアップグレードを再開します。「failed to register cluster」というエラーが一時的に表示される場合があります。これは、しばらくすると自動的に更新されます。 | 
  | アップグレード、更新 | 1.13.0-1.13.9, 1.14.0-1.14.4, 1.15.0 | 登録済みの管理クラスタのリソースリンク アノテーションが保持されない管理クラスタが GKE On-Prem API に登録されると、そのリソース リンク アノテーションが OnPremAdminClusterカスタム リソースに適用されます。これは、間違ったアノテーション キーが使用されているため、クラスタ管理を更新すると破棄されます。これにより、管理クラスタが GKE On-Prem API に再度登録される可能性があります。 管理クラスタが API に登録されるのは、クラスタを明示的に登録した場合だけはありません。GKE On-Prem API クライアントを使用してユーザー クラスタをアップグレードした場合にも登録されます。 
 回避策:管理クラスタの登録を解除します。     gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
    管理クラスタをもう一度登録します。 | 
  
  
    | ネットワーキング | 1.15.0~1.15.2 | CoreDNS orderPolicyが認識されないOrderPolicyがパラメータとして認識されないため、使用されません。代わりに、Google Distributed Cloud は常にRandomを使用します。
 この問題は、CoreDNS テンプレートが更新されておらず、orderPolicyが無視されることが原因で発生します。 
 回避策: CoreDNS テンプレートを更新して修正を適用します。この修正は、アップグレードするまで維持されます。 
        既存のテンプレートを編集します。kubectl edit cm -n kube-system coredns-templateファイルの内容を次のコードで置き換えます。 coredns-template: |-
  .:53 {
    errors
    health {
      lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
      pods insecure
      fallthrough in-addr.arpa ip6.arpa
    }
{{- if .PrivateGoogleAccess }}
    import zones/private.Corefile
{{- end }}
{{- if .RestrictedGoogleAccess }}
    import zones/restricted.Corefile
{{- end }}
    prometheus :9153
    forward . {{ .UpstreamNameservers }} {
      max_concurrent 1000
      {{- if ne .OrderPolicy "" }}
      policy {{ .OrderPolicy }}
      {{- end }}
    }
    cache 30
{{- if .DefaultDomainQueryLogging }}
    log
{{- end }}
    loop
    reload
    loadbalance
}{{ range $i, $stubdomain := .StubDomains }}
{{ $stubdomain.Domain }}:53 {
  errors
{{- if $stubdomain.QueryLogging }}
  log
{{- end }}
  cache 30
  forward . {{ $stubdomain.Nameservers }} {
    max_concurrent 1000
    {{- if ne $.OrderPolicy "" }}
    policy {{ $.OrderPolicy }}
    {{- end }}
  }
}
{{- end }} | 
  | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13.0-1.13.7, 1.14.0-1.14.3 | OnPremAdminCluster のステータスがチェックポイントと実際の CR の間で一致しない特定の競合状態のため、チェックポイントと実際の CR で OnPremAdminClusterステータスが一致しない場合があります。この問題が発生した場合、管理クラスタをアップグレードした後に更新するときに、次のエラーが発生することがあります。 Exit with error:
E0321 10:20:53.515562  961695 console.go:93] Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updatedこの問題を回避するには、チェックポイントを編集するか、アップグレードまたは更新のチェックポイントを無効にする必要があります。回避策については、Google サポートチームまでお問い合わせください。 | 
  | オペレーション | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | 調整プロセスにより、管理クラスタの管理者証明書が変更されるGoogle Distributed Cloud は、クラスタ アップグレード時など、調整プロセスごとに管理クラスタのコントロール プレーンの管理証明書を変更します。この動作により、管理クラスタ(特にバージョン 1.15 のクラスタ)で無効な証明書を取得する可能性が高くなります。 この問題の影響を受けている場合、次のような問題が発生する可能性があります。 
 回避策: 修正が適用された Google Distributed Cloud のバージョン 1.13.10 以降、1.14.6 以降、1.15.2 以降にアップグレードします。アップグレードできない場合は、この問題の解決のために Cloud カスタマーケアにお問い合わせください。 | 
  
  
    | ネットワーキング、オペレーション | 1.10, 1.11, 1.12, 1.13, 1.14 | 優先度クラスがないため、Anthos Network Gateway コンポーネントが強制排除されるか、保留中になるkube-systemのネットワーク ゲートウェイ Pod には、次の要約した出力例に示すように、PendingまたはEvictedのステータスが表示される場合があります。
 $ kubectl -n kube-system get pods | grep ang-node
ang-node-bjkkc     2/2     Running     0     5d2h
ang-node-mw8cq     0/2     Evicted     0     6m5s
ang-node-zsmq7     0/2     Pending     0     7h これらのエラーは、ノードのリソースを原因とする強制排除イベント、または Pod のスケジューリング不能を示しています。Anthos Network Gateway Pod には PriorityClass がないため、他のワークロードと同じデフォルトの優先度が設定されます。ノードにリソース制約がある場合、ネットワーク ゲートウェイ Pod が強制終了される可能性があります。この動作は特に、ang-nodeDaemonSet では問題になります。これらの Pod は、特定のノードでスケジュールする必要があり、移動することはできません。 
 回避策: 1.15 以降にアップグレードします。 短期的な解決策として、Anthos Network Gateway コンポーネントに PriorityClass を手動で割り当てる方法があります。Google Distributed Cloud コントローラは、クラスタのアップグレードなどの調整プロセス中に、こうした手動による変更を上書きします。 
        system-cluster-criticalPriorityClass をang-controller-managerとautoscalerのクラスタ コントローラの Deployment に割り当てます。system-node-criticalPriorityClass をang-daemonノードの DaemonSet に割り当てます。 | 
  | アップグレード、更新 | 1.12, 1.13, 1.14, 1.15.0-1.15.2 | クラスタを gcloud に登録した後、管理クラスタのアップグレードが失敗する gcloudを使用して、空でないgkeConnectセクションに管理クラスタを登録した後、クラスタをアップグレードしようとすると、次のエラーが発生することがあります。 failed to register cluster: failed to apply Hub Mem\
bership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.o\
n_prem_cluster.admin_cluster: field cannot be updated gke-connectNamespace を削除します。
 kubectl delete ns gke-connect --kubeconfig=ADMIN_KUBECONFIG管理クラスタ名を取得します。 kubectl get onpremadmincluster -n kube-system --kubeconfig=ADMIN_KUBECONFIGフリート メンバーシップを削除します。 gcloud container fleet memberships delete ADMIN_CLUSTER_NAMEおよび 管理クラスタのアップグレードを再開します。 | 
  | オペレーション | 1.13.0~1.13.8、1.14.0~1.14.5、1.15.0~1.15.1 | gkectl diagnose snapshot --log-sinceが、クラスタノードで実行されているjournalctlコマンドの期間を制限できない
これは、クラスタのスナップショットを取得する機能に影響しません。クラスタノードで journalctlを実行すると、デフォルトで収集されるすべてのログがスナップショットに含まれます。したがって、デバッグ情報が失われることはありません。 | 
  | インストール、アップグレード、更新 | 1.9+, 1.10+, 1.11+, 1.12+ | gkectl prepare windows失敗します。
MicrosoftDockerProviderが非推奨となっているため、gkectl prepare windowsは、1.13 より前のバージョンの Google Distributed Cloud に Docker をインストールできません。
 
 回避策: この問題を回避する一般的な方法は、Google Distributed Cloud 1.13 にアップグレードし、1.13 の gkectlを使用して Windows VM テンプレートを作成してから、Windows ノードプールを作成する方法です。以下に示すように、現在のバージョンから Google Distributed Cloud 1.13 にするには、次の 2 つの方法があります。 注: 現在のバージョンでこの問題を回避するには、1.13 にアップグレードする必要はありませんが、より多くの手順を手動で行う必要があります。Google までお問い合わせください。 
 オプション 1: Blue/Green アップグレード Windows ノードプールを備えた Google Distributed Cloud 1.13 以降のバージョンで新しいクラスタを作成し、ワークロードを新しいクラスタに移行してから、現在のクラスタを破棄できます。最新の Google Distributed Cloud マイナー バージョンを使用することをおすすめします。 注: 新しいクラスタをプロビジョニングするために追加のリソースが必要になりますが、既存のワークロードのダウンタイムや停止は少なくなります。 
 オプション 2: Windows ノードプールを削除し、Google Distributed Cloud 1.13 にアップグレードする際に再度追加する 注: このオプションの場合、クラスタが 1.13 にアップグレードされ、Windows ノードプールが追加されるまで、Windows ワークロードを実行できません。 
      user-cluster.yaml ファイルから Windows ノードプール構成を削除して、既存の Windows ノードプールを削除してから、次のコマンドを実行します。gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE対応するターゲット マイナー バージョンのアップグレード ユーザーガイドに従って、Linux 専用の管理クラスタとユーザー クラスタを 1.12 にアップグレードします。(1.13 にアップグレードする前に、必ずこの操作を行ってください)enableWindowsDataplaneV2: trueがOnPremUserClusterCR で構成されていることを確認します。そうしないと、クラスタは、新しく作成され、Docker がインストールされていない 1.13 Windows VM テンプレートと互換性のない Windows ノードプール用の Docker を引き続き使用します。構成されていないか、false に設定されている場合は、クラスタを更新し、user-cluster.yaml で true に設定してから、次のコマンドを実行します。gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILEアップグレード ユーザーガイドに従って、Linux 専用の管理クラスタとユーザー クラスタを 1.13 にアップグレードします。1.13 gkectl を使用して Windows VM テンプレートを準備します。gkectl prepare windows --base-vm-template BASE_WINDOWS_VM_TEMPLATE_NAME --bundle-path 1.13_BUNDLE_PATH --kubeconfig=ADMIN_KUBECONFIGOSImageフィールドを新しく作成した Windows VM テンプレートに設定し、Windows ノードプール構成を user-cluster.yaml に再度追加します。クラスタを更新して Windows ノードプールを追加します。gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE | 
  | インストール、アップグレード、更新 | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | RootDistanceMaxSec構成がubuntuノードに反映されない
ノードでは、予想される構成(20 秒)ではなく、RootDistanceMaxSecのデフォルト値(5 秒)が使用されます。/var/log/startup.log にある VM に SSH 接続してノードの起動ログを確認すると、次のエラーが見つかります。 + has_systemd_unit systemd-timesyncd
/opt/bin/master.sh: line 635: has_systemd_unit: command not found 5 秒の RootDistanceMaxSecが使用された場合、クロック ドリフトが 5 秒を超えると、システム クロックが NTP サーバーと同期しなくなる可能性があります。 
 回避策: 次の DaemonSet をクラスタに適用して、RootDistanceMaxSecを構成します。 apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: change-root-distance
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: change-root-distance
  template:
    metadata:
      labels:
        app: change-root-distance
    spec:
      hostIPC: true
      hostPID: true
      tolerations:
      # Make sure pods gets scheduled on all nodes.
      - effect: NoSchedule
        operator: Exists
      - effect: NoExecute
        operator: Exists
      containers:
      - name: change-root-distance
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          while true; do
            conf_file="/etc/systemd/timesyncd.conf.d/90-gke.conf"
            if [ -f $conf_file ] && $(grep -q "RootDistanceMaxSec=20" $conf_file); then
              echo "timesyncd has the expected RootDistanceMaxSec, skip update"
            else
              echo "updating timesyncd config to RootDistanceMaxSec=20"
              mkdir -p /etc/systemd/timesyncd.conf.d
              cat > $conf_file << EOF
          [Time]
          RootDistanceMaxSec=20
          EOF
              systemctl restart systemd-timesyncd
            fi
            sleep 600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: / | 
  | アップグレード、更新 | 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 | osImageTypeフィールドが空のため、gkectl update adminが失敗する
バージョン 1.13 の gkectlを使用してバージョン 1.12 の管理クラスタを更新すると、次のエラーが表示されることがあります。 Failed to update the admin cluster: updating OS image type in admin cluster
is not supported in "1.12.x-gke.x" バージョン 1.13 または 1.14 のクラスタで gkectl update adminを使用すると、レスポンスで次のメッセージが表示されることがあります。 Exit with error:
Failed to update the cluster: the update contains multiple changes. Please
update only one feature at a time gkectlログを確認すると、osImageTypeの設定が空の文字列からubuntu_containerdに変更されている箇所があります。
 これらの更新エラーは、バージョン 1.9 で導入された管理クラスタ構成ファイルの osImageTypeフィールドが適切にバックフィルされていないために発生しています。 
 回避策: 修正が適用された Google Distributed Cloud のバージョンにアップグレードします。アップグレードできない場合は、この問題の解決方法を Cloud カスタマーケアにお問い合わせください。 | 
  | インストール、セキュリティ | 1.13、1.14、1.15、1.16 | SNI は、コントロール プレーン V2 のユーザー クラスタで動作しないControlplane V2 が有効な場合(enableControlplaneV2: true)、authentication.sniを使用するユーザー クラスタの Kubernetes API サーバーに追加のサービス証明書を提供する機能は動作しません。 
 回避策: SNI を使用する必要がある場合は、修正を適用した Google Distributed Cloud パッチが利用可能になるまで、Controlplane V2(enableControlplaneV2: false)を無効にします。 | 
  | インストール | 1.0-1.11、1.12、1.13.0~1.13.9、1.14.0~1.14.5、1.15.0~1.15.1 | 非公開レジストリのユーザー名に $が含まれていると、管理コントロール プレーンのマシンを起動できない非公開レジストリのユーザー名に $が含まれている場合、管理コントロール プレーンのマシンが起動できません。
管理コントロール プレーン マシンの/var/log/startup.logに、次のエラーが表示されます。 ++ REGISTRY_CA_CERT=xxx
++ REGISTRY_SERVER=xxx
/etc/startup/startup.conf: line 7: anthos: unbound variable 
 回避策: $なしで非公開レジストリのユーザー名を使用するか、修正を適用した Google Distributed Cloud のバージョンを使用します。
 | 
  | アップグレード、更新 | 1.12.0-1.12.4 | 管理クラスタ更新中のサポートされていない変更に関する誤検出の警告管理クラスタを更新すると、ログに次の誤検出の警告が表示されますが、無視してかまいません。     console.go:47] detected unsupported changes: &v1alpha1.OnPremAdminCluster{
      ...
      -         CARotation:        &v1alpha1.CARotationConfig{Generated: &v1alpha1.CARotationGenerated{CAVersion: 1}},
      +         CARotation:        nil,
      ...
    } | 
  | アップグレード、更新 | 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 | KSA 署名鍵のローテーション後にユーザー クラスタ更新が失敗するKSA 署名鍵をローテーションした後に、ユーザー クラスタを更新すると、gkectl updateが失敗し、次のエラー メッセージが表示される可能性があります。 Failed to apply OnPremUserCluster 'USER_CLUSTER_NAME-gke-onprem-mgmt/USER_CLUSTER_NAME':
admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request:
requests must not decrement *v1alpha1.KSASigningKeyRotationConfig Version, old version: 2, new version: 1" 
 回避策:KSA 署名鍵のバージョンを 1 に戻します。ただし、最新の鍵データを保持します。 USER_CLUSTER_NAMENamespace の管理クラスタで Secret を確認し、ksa-signing-key Secret の名前を取得します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secrets | grep ksa-signing-keyksa-signing-key の Secret をコピーし、コピーした Secret に service-account-cert という名前を付けます。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secret KSA-KEY-SECRET-NAME -oyaml | \
sed 's/ name: .*/ name: service-account-cert/' | \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME apply -f -以前の ksa-signing-key の Secret を削除します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME delete secret KSA-KEY-SECRET-NAMEksa-signing-key-rotation-stage configmap の data.dataフィールドを'{"tokenVersion":1,"privateKeyVersion":1,"publicKeyVersions":[1]}'に更新します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME \
edit configmap ksa-signing-key-rotation-stage検証 Webhook を無効にして、OnPremUserCluster カスタム リソースのバージョン情報を編集します。kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    resources:
    - onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    resources:
    - onpremuserclusters
'OnPremUserCluster カスタム リソースの spec.ksaSigningKeyRotation.generated.ksaSigningKeyRotationフィールドを1に更新します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
edit onpremusercluster USER_CLUSTER_NAMEターゲット ユーザー クラスタの準備ができる待機します。ステータスは次の方法で確認できます。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
get onpremuserclusterユーザー クラスタの検証 Webhook を復元します。kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    - UPDATE
    resources:
    - onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
  rules:
  - apiGroups:
    - onprem.cluster.gke.io
    apiVersions:
    - v1alpha1
    operations:
    - CREATE
    - UPDATE
    resources:
    - onpremuserclusters
'修正が適用されたバージョンにクラスタがアップグレードされるまで、別の KSA 署名鍵のローテーションを使用しないでください。
 | 
  | オペレーション | 1.13.1+、1.14, 1、1.16 | Terraform を使用して、F5 BIG-IP ロードバランサのあるユーザー クラスタを削除すると、クラスタの削除後に F5 BIG-IP 仮想サーバーが削除されません。 
 回避策: F5 リソースを削除するには、ユーザー クラスタの F5 パーティションをクリーンアップするの手順に沿って操作します。 | 
  | インストール、アップグレード、更新 | 1.13.8, 1.14.4 | kind クラスタが docker.ioからコンテナ イメージを pull するバージョン 1.13.8 またはバージョン 1.14.4 の管理クラスタを作成するか、管理クラスタをバージョン 1.13.8 または 1.14.4 にアップグレードすると、kind クラスタは docker.ioから次のコンテナ イメージを pull します。 docker.io/kindest/kindnetddocker.io/kindest/local-path-provisionerdocker.io/kindest/local-path-helperdocker.ioが管理ワークステーションからアクセスできない場合、管理クラスタの作成またはアップグレードで kind クラスタを起動できません。管理ワークステーションで次のコマンドを実行すると、ErrImagePullで保留中の対応するコンテナが表示されます。
 docker exec gkectl-control-plane kubectl get pods -A レスポンスには、次のようなエントリが含まれます。 ...
kube-system         kindnet-xlhmr                             0/1
    ErrImagePull  0    3m12s
...
local-path-storage  local-path-provisioner-86666ffff6-zzqtp   0/1
    Pending       0    3m12s
...これらのコンテナ イメージは、kind クラスタのコンテナ イメージにプリロードされている必要があります。ただし、kind v0.18.0 にはプリロードされたコンテナ イメージに問題があるため、誤ってインターネットから pull される可能性があります。 
 回避策: 管理クラスタの作成またはアップグレードが保留されている間に、管理ワークステーションで次のコマンドを実行します。 docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner:v0.0.23-kind.0
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 | 
  | オペレーション | 1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 | ネットワークで重複する GARP リクエストが除外されていると、HA コントロール プレーン V2 のユーザー クラスタと管理クラスタでフェイルオーバーが失敗するクラスタ VM が、重複する GARP(Gratuitous ARP)リクエストを除外するスイッチに接続されている場合、keepalived リーダー選出が競合状態になり、一部のノードで ARP テーブル エントリが正しくなくなる可能性があります。 影響を受けるノードでコントロール プレーン VIP を pingできますが、コントロール プレーン VIP への TCP 接続がタイムアウトします。 
 回避策:影響を受けるクラスタの各コントロール プレーン ノードで、次のコマンドを実行します。     iptables -I FORWARD -i ens192 --destination CONTROL_PLANE_VIP -j DROP
     | 
  | アップグレード、更新 | 1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 | vCenter 証明書のローテーション後に vsphere-csi-controllerを再起動する必要があるvsphere-csi-controllerは、vCenter 証明書のローテーション後に vCenter Secret を更新します。ただし、現在のシステムではvsphere-csi-controllerの Pod が適切に再起動されないため、ローテーション後にvsphere-csi-controllerがクラッシュします。
 回避策: 1.13 以降のバージョンで作成されたクラスタの場合は、以下の手順で vsphere-csi-controllerを再起動します。 kubectl --kubeconfig=ADMIN_KUBECONFIG rollout restart deployment vsphere-csi-controller -n kube-system | 
  | インストール | 1.10.3~1.10.7、1.11、1.12、1.13.0~1.13.1 | クラスタ登録でエラーが発生しても、管理クラスタの作成が失敗しない管理クラスタの作成中にクラスタ登録が失敗した場合でも、この問題を特定するには、gkectl create admin のログで次のエラー メッセージを探します。gkectl create adminコマンドがエラーで失敗せず、成功することがあります。つまり、フリートに登録されることなく管理クラスタの作成が「成功」する可能性があります。 
Failed to register admin cluster また、Cloud コンソールで登録済みクラスタの中にクラスタがあるかどうか確認できます。
 回避策: 1.12 以降のバージョンで作成されたクラスタの場合は、クラスタの作成後に管理クラスタの登録の再試行の手順に沿って操作してください。以前のバージョンで作成されたクラスタで、次の操作を行います。 
        
        foo: bar のような架空の Key-Value ペアを connect-register SA キーファイルに追加します。
        gkectl update adminを実行して、管理クラスタを再登録します。 | 
  | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13.0-1.13.1 | 管理クラスタのアップグレード中に管理クラスタの再登録がスキップされることがある管理クラスタのアップグレード中に、ユーザー コントロール プレーン ノードのアップグレードがタイムアウトすると、管理クラスタが更新後の Connect Agent バージョンに再登録されません。 
 回避策:クラスタが登録済みクラスタに含まれているかどうか確認します。また、認証の設定後にクラスタにログインして確認することもできます。クラスタがまだ登録されている場合は、以下の手順をスキップして、登録を再試行できます。1.12 以降のバージョンにアップグレードされたクラスタの場合は、クラスタの作成後に管理クラスタ登録の再試行の手順に沿って操作してください。以前のバージョンにアップグレードされたクラスタの場合は、次の操作を行います。 
        foo: bar のような架空の Key-Value ペアを connect-register SA キーファイルに追加します。
        gkectl update adminを実行して、管理クラスタを再登録します。
 | 
  | 構成 | 1.15.0 | vCenter.dataDiskに関する誤ったエラー メッセージ
高可用性管理クラスタで、gkectl prepareが次のような誤ったエラー メッセージを表示します。 
vCenter.dataDisk must be present in the AdminCluster spec 
 回避策: このエラーは無視してかまいません。 | 
  | VMware | 1.15.0 | 冗長な VM-Host アフィニティ ルールが原因でノードプールの作成が失敗するVM ホスト アフィニティを使用するノードプールの作成中に、競合状態が原因で、同じ名前を持つ複数の VM ホスト アフィニティ ルールが作成されることがあります。これにより、ノードプールの作成が失敗する可能性があります。 
 回避策: 古い冗長ルールを削除します。これにより、ノードプールの作成を続行できるようになります。これらのルールの名前は [USER_CLUSTER_NAME]-[HASH] です。 | 
  
  
    | オペレーション | 1.15.0 | failed
      to delete the admin master node object and reboot the admin master VM
      が原因でgkectl repair admin-masterが失敗することがある
競合状態のため、gkectl repair admin-masterコマンドが次のエラーで失敗する場合があります。 Failed to repair: failed to delete the admin master node object and reboot the admin master VM 
 回避策: このコマンドはべき等です。コマンドが成功するまで安全に再実行できます。 | 
| アップグレード、更新 | 1.15.0 | コントロール プレーン ノードの再作成または更新後に Pod が失敗状態のままになるコントロール プレーン ノードの再作成または更新後に、NodeAffinity の述語のエラーにより、特定の Pod が Failed状態のままになる場合があります。このような失敗状態の Pod は、通常のクラスタ オペレーションや正常性には影響しません。 
 回避策: 失敗した Pod を無視するか、手動で削除します。 | 
  | セキュリティの構成 | 1.15.0~1.15.1 | 非公開レジストリの認証情報のため、OnPremUserCluster の準備ができていない準備済みの認証情報と非公開レジストリを使用していても、非公開レジストリ用に準備された認証情報を構成していない場合、OnPremUserCluster が準備完了にならず、次のエラー メッセージが表示される場合があります。 
failed to check secret reference for private registry … 
 回避策: 準備済みの認証情報の構成の手順に従って、ユーザー クラスタの非公開レジストリの認証情報を準備します。
 | 
  
  
    | アップグレード、更新 | 1.15.0 | 
        gkectl upgrade admin中に、CSI 移行のストレージ プリフライト チェックは、CSI 移行の後に無視されるパラメータが StorageClasses にないことを確認します。たとえば、パラメータdiskformatを伴う StorageClass がある場合、gkectl upgrade adminは StorageClass にフラグを付け、プリフライト検証で失敗を報告します。
        Google Distributed Cloud 1.10 以前で作成された管理クラスタには、diskformat: thinが設定された StorageClass があります。このため、この検証は失敗しますが、この StorageClass は CSI 移行の後も正常に動作します。このエラーは、警告として解釈する必要があります。 
        詳細については、in-tree vSphere ボリュームの vSphere コンテナ ストレージ プラグインへの移行の StorageClass パラメータのセクションをご覧ください。 
 回避策: CSI 移行後に、CSI 移行の後で無視されるパラメータのある StorageClass がクラスタに存在することを確認したら、--skip-validation-cluster-healthフラグを使用してgkectl upgrade adminを実行します。 | 
  | ストレージ | 1.15、1.16 | Windows ファイル システムを使用して移行された in-tree vSphere ボリュームは、vSphere CSI ドライバで使用できない特定の条件下では、Windows ノードにディスクを読み取り専用としてアタッチできます。これにより、対応するボリュームが Pod 内で読み取り専用になります。この問題は、新しいノードのセットが古いノードのセットを置き換える場合(クラスタのアップグレードやノードプールの更新など)に発生する可能性が高くなります。以前に正常に動作していたステートフル ワークロードは、新しいノードのセットにあるボリュームに書き込めなくなる可能性があります。 
 回避策: 
       
        ボリュームに書き込めない Pod の UID を取得します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pod \
    POD_NAME --namespace POD_NAMESPACE \
    -o=jsonpath='{.metadata.uid}{"\n"}'PersistentVolumeClaim を使用して PersistentVolume の名前を取得します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pvc \
    PVC_NAME --namespace POD_NAMESPACE \
    -o jsonpath='{.spec.volumeName}{"\n"}'Pod が実行されているノードの名前を確認します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIGget pods \
    --namespace POD_NAMESPACE \
    -o jsonpath='{.spec.nodeName}{"\n"}'
        SSH または vSphere ウェブ インターフェースを使用して、ノードへの PowerShell アクセスを取得します。環境変数を設定します。
PS C:\Users\administrator> pvname=PV_NAME
PS C:\Users\administrator> podid=POD_UIDPersistentVolume に関連付けられているディスクのディスク番号を特定します。
PS C:\Users\administrator> disknum=(Get-Partition -Volume (Get-Volume -UniqueId ("\\?\"+(Get-Item (Get-Item
"C:\var\lib\kubelet\pods\$podid\volumes\kubernetes.io~csi\$pvname\mount").Target).Target))).DiskNumber
        ディスクが readonlyであることを確認します。
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly結果は Trueのようになります。readonlyをfalseに設定します。
PS C:\Users\administrator> Set-Disk -Number $disknum -IsReadonly $false
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonlyPod を削除して再起動できるようにします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete pod POD_NAME \
    --namespace POD_NAMESPACE
        Pod は同じノードにスケジュールされる必要があります。ただし、Pod が新しいノードにスケジュールされている場合は、新しいノードで上記の手順を繰り返す必要があります。
 | 
  
  
    | アップグレード、更新 | 1.12, 1.13.0-1.13.7, 1.14.0-1.14.4 | gkectl update credentials vsphere --admin-clusterの後にvsphere-csi-secretが更新されない
クラスタ認証情報の更新後に管理クラスタの vSphere 認証情報を更新した場合、管理クラスタの kube-system名前空間でvsphere-csi-secretが引き続き古い認証情報を使用することがあります。 
 回避策: 
        vsphere-csi-secretSecret 名を取得します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets | grep vsphere-csi-secret上記の手順で取得した vsphere-csi-secretSecret のデータを更新します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system patch secret CSI_SECRET_NAME -p \
  "{\"data\":{\"config\":\"$( \
    kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets CSI_SECRET_NAME -ojsonpath='{.data.config}' \
      | base64 -d \
      | sed -e '/user/c user = \"VSPHERE_USERNAME_TO_BE_UPDATED\"' \
      | sed -e '/password/c password = \"VSPHERE_PASSWORD_TO_BE_UPDATED\"' \
      | base64 -w 0 \
    )\"}}"vsphere-csi-controllerを再起動します。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout restart deployment vsphere-csi-controllerロールアウトのステータスは次の方法で追跡できます。kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout status deployment vsphere-csi-controllerDeployment が正常にロールアウトされたら、更新された vsphere-csi-secretをコントローラで使用する必要があります。 | 
  
  
    | アップグレード、更新 | 1.10, 1.11, 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 | gkectl update clusterで Cloud Audit Logs を有効にするとaudit-proxyがクラッシュループする
audit-proxyは、空の--cluster-nameが原因でクラッシュ ループすることがあります。この動作は、クラスタ名が audit-proxy Pod とコンテナ マニフェストに伝播されない更新ロジックのバグが原因で発生します。
 
 回避策: enableControlplaneV2: trueの Controlplane v2 ユーザー クラスタの場合は、SSH を使用してユーザー コントロール プレーンのマシンに接続し、--cluster_name=USER_CLUSTER_NAMEで/etc/kubernetes/manifests/audit-proxy.yamlを更新します。
 コントロール プレーン v1 ユーザー クラスタの場合は、kube-apiserverStatefulSet のaudit-proxyコンテナを編集して--cluster_name=USER_CLUSTER_NAMEを追加します。 kubectl edit statefulset kube-apiserver -n USER_CLUSTER_NAME --kubeconfig=ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | アップグレード、更新 | 1.11, 1.12, 1.13.0-1.13.5, 1.14.0-1.14.1 | gkectl upgrade clusterの直後に、追加のコントロール プレーンが再デプロイされる
gkectl upgrade clusterの直後に、コントロール プレーン Pod が再デプロイされることがあります。gkectl list clustersのクラスタの状態がRUNNINGからRECONCILINGに変わります。ユーザー クラスタへのリクエストがタイムアウトになる可能性があります。
 この動作は、gkectl upgrade clusterの後にコントロール プレーンの証明書のローテーションが自動的に行われるために発生します。 この問題は、Controlplane v2 を使用していないユーザー クラスタでのみ発生します。 
 回避策: クラスタの状態が gkectl list clustersで再びRUNNINGに戻るまで待つか、修正を含むバージョン 1.13.6 以降、1.14.2 以降、または 1.15 以降にアップグレードします。 | 
  
  
    | アップグレード、更新 | 1.12.7 | 不正なリリース 1.12.7-gke.19 が削除されました。 Google Distributed Cloud 1.12.7-gke.19 には問題があるため、使用しないでください。これらのアーティファクトは、Cloud Storage バケットから削除されています。
 回避策: 代わりに 1.12.7-gke.20 リリースを使用してください。 | 
  
  
   | アップグレード、更新 | 1.12.0+、1.13.0~1.13.7、1.14.0~1.14.3 | 次のいずれかの方法でレジストリの認証情報を更新した場合: 
      gkectl update credentials componentaccess(非公開レジストリを使用していない場合)gkectl update credentials privateregistry(非公開レジストリを使用している場合) gke-connect-agentが引き続き古いイメージを使用するか、ImagePullBackOffが原因でgke-connect-agentPod を pull できない場合があります。
 この問題は、Google Distributed Cloud リリース 1.13.8、1.14.4、およびそれ以降のリリースで修正される予定です。 
 回避策: オプション 1: gke-connect-agentを手動で再デプロイします。 
      gke-connect名前空間を削除します。kubectl --kubeconfig=KUBECONFIG delete namespace gke-connect元の登録サービス アカウント キーを使用して gke-connect-agentを再デプロイします(鍵を更新する必要はありません)。
      管理クラスタの場合:gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG_FILE --admin-clusterユーザー クラスタの場合: gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE オプション 2: gke-connect-agentDeployment で使用されるイメージ pull Secretregcredのデータを手動で変更できます。 kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch secrets regcred -p "{\"data\":{\".dockerconfigjson\":\"$(kubectl --kubeconfig=KUBECONFIG -n=kube-system get secrets private-registry-creds -ojsonpath='{.data.\.dockerconfigjson}')\"}}"オプション 3: gke-connect-agentDeployment のクラスタのデフォルトのイメージ pull Secret を以下の方法で追加できます。 
      デフォルトの Secret を gke-connect名前空間にコピーします。kubectl --kubeconfig=KUBECONFIG -n=kube-system get secret private-registry-creds -oyaml | sed 's/ namespace: .*/ namespace: gke-connect/' | kubectl --kubeconfig=KUBECONFIG -n=gke-connect apply -f -gke-connect-agentDeployment 名を取得します。kubectl --kubeconfig=KUBECONFIG -n=gke-connect get deployment | grep gke-connect-agentデフォルトの Secret を gke-connect-agentDeployment に追加します。kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch deployment DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"imagePullSecrets": [{"name": "private-registry-creds"}, {"name": "regcred"}]}}}}' | 
  
  
    | インストール | 1.13、1.14 | 手動の LB 構成チェックの失敗手動ロードバランサを使用してクラスタを作成する前に、gkectl check-configを実行して構成を検証すると、次のエラー メッセージでコマンドが失敗します。  - Validation Category: Manual LB    Running validation check for "Network
configuration"...panic: runtime error: invalid memory address or nil pointer
dereference 
 回避策: オプション 1: 修正が適用されたパッチ バージョン 1.13.7 または 1.14.4 を使用します。 オプション 2: 同じコマンドを実行して構成を検証し、ロードバランサの検証をスキップします。 gkectl check-config --skip-validation-load-balancer | 
  
  
    | オペレーション | 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、1.9、1.10、1.11、1.12、1.13、1.14 | etcd ウォッチの不足etcd バージョン 3.4.13 以前を実行しているクラスタで、ウォッチが不足したり、動作していないリソースのウォッチが発生する場合があります。これにより、次の問題が発生する可能性があります。 
         Pod のスケジューリングが中断されるノードが登録できないkubelet が Pod の変更をモニタリングしない これらの問題により、クラスタが機能しなくなる場合があります。 この問題は、Google Distributed Cloud リリース 1.12.7、1.13.6、1.14.3 以降のリリースで修正されています。これらの新しいリリースでは、etcd バージョン 3.4.21 が使用されています。Google Distributed Cloud の以前のバージョンはすべて、この問題の影響を受けます。
         回避策 直ちにアップグレードできない場合は、クラスタ内のノード数を減らすことで、クラスタ障害のリスクを軽減できます。etcd_network_client_grpc_sent_bytes_total指標が 300 MBps 未満になるまでノードを削除します。 
        この指標を Metrics Explorer で表示するには: 
        Google Cloud コンソールで [Metrics Explorer] に移動します。
       
       
       [Metrics Explorer] に移動[構成] タブを選択します。[指標の選択] を展開し、フィルタバーに「Kubernetes Container」と入力してから、サブメニューを使用して指標を選択します。[有効なリソース] メニューで [Kubernetes コンテナ] を選択します。[有効な指標カテゴリ] メニューで [Anthos] を選択します。[アクティブな指標] メニューで [etcd_network_client_grpc_sent_bytes_total] を選択します。[適用] をクリックします。
 | 
  
  
    | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 および 1.14 | GKE Identity Service が原因でコントロール プレーンのレイテンシが高くなるクラスタの再起動またはアップグレード後に、認証 Webhook を介して kube-apiserverから GKE Identity Service に転送された期限切れの JWT トークンで構成されるトラフィックで、GKE Identity Service が過負荷状態になる可能性があります。GKE Identity Service はクラッシュ ループしませんが、応答不能となり、それ以上リクエストを処理できなくなります。この問題は、最終的にコントロール プレーンの高いレイテンシにつながります。 この問題は、次の Google Distributed Cloud リリースで修正されています。 この問題の影響を受けるかどうかを判断するには、次の操作を行います。 
  GKE Identity Service エンドポイントに外部からアクセスできるかどうか確認します。curl -s -o /dev/null -w "%{http_code}" \
    -X POST https://CLUSTER_ENDPOINT/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'CLUSTER_ENDPOINT は、クラスタのコントロール プレーン VIP とコントロール プレーン ロードバランサのポートに置き換えます(たとえば、172.16.20.50:443)。 この問題の影響を受ける場合、コマンドはステータス コード 400を返します。リクエストがタイムアウトした場合は、aisPod を再起動し、curlコマンドを再実行して、問題が解決するかどうかを確認します。ステータス コード000が返された場合、問題は解決されており、完了です。ステータス コード400が返された場合は、GKE Identity Service の HTTP サーバーが起動していません。その場合は、次の操作を行います。GKE Identity Service と kube-apiserver のログを確認します。
GKE Identity Service のコンテナログを確認します。kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
    --kubeconfig KUBECONFIGログに次のようなエントリがある場合は、この問題の影響を受けています。 I0811 22:32:03.583448      32 authentication_plugin.cc:295] Stopping OIDC authentication for ???. Unable to verify the OIDC ID token: JWT verification failed: The JWT does not appear to be from this identity provider. To match this provider, the 'aud' claim must contain one of the following audiences:クラスタの kube-apiserverログを確認します。次のコマンドを実行します。KUBE_APISERVER_POD は、指定されたクラスタ上の kube-apiserverPod の名前です。 管理クラスタ: kubectl --kubeconfig ADMIN_KUBECONFIG logs \
    -n kube-system KUBE_APISERVER_POD kube-apiserverユーザー クラスタ: kubectl --kubeconfig ADMIN_KUBECONFIG logs \
    -n USER_CLUSTER_NAME KUBE_APISERVER_POD kube-apiserverkube-apiserverログに次のようなエントリがある場合は、この問題の影響を受けています。
 E0811 22:30:22.656085       1 webhook.go:127] Failed to make webhook authenticator request: error trying to reach service: net/http: TLS handshake timeout
E0811 22:30:22.656266       1 authentication.go:63] "Unable to authenticate the request" err="[invalid bearer token, error trying to reach service: net/http: TLS handshake timeout]"
 回避策 クラスタをすぐにアップグレードして修正できない場合は、回避策として問題の Pod を特定して再起動します。 
         GKE Identity Service のログの詳細レベルを 9 にします。kubectl patch deployment ais -n anthos-identity-service --type=json \
    -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", \
    "value":"--vmodule=cloud/identity/hybrid/charon/*=9"}]' \
    --kubeconfig KUBECONFIGGKE Identity Service のログで、無効なトークン コンテキストを確認します。kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
    --kubeconfig KUBECONFIG無効な各トークン コンテキストに関連付けられたトークン ペイロードを取得するには、次のコマンドを使用して、関連する各サービス アカウントの Secret を解析します。kubectl -n kube-system get secret SA_SECRET \
    --kubeconfig KUBECONFIG \
    -o jsonpath='{.data.token}' | base64 --decodeトークンをデコードしてソース Pod の名前と Namespace を確認します。jwt.io のデバッガにトークンをコピーします。トークンから特定された Pod を再起動します。 | 
  
  
    | オペレーション | 1.8、1.9、1.10 | etcd-maintenance Pod のメモリ使用量の増加の問題etcddefrag:gke_master_etcddefrag_20210211.00_p0イメージを使用する etcd-maintenance Pod が影響を受けます。etcddefrag コンテナは、デフラグ サイクルのたびに etcd サーバーとの接続を新たに開始しますが、古い接続はクリーンアップされません。
 
 回避策: オプション 1: 修正が適用されている最新のパッチ バージョンにアップグレードします(1.8 から 1.11)。 オプション 2: 1.9.6 と 1.10.3 より前のパッチ バージョンを使用している場合は、管理クラスタとユーザー クラスタの etcd-maintenance Pod をスケールダウンする必要があります。 kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n kube-system --kubeconfig ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | オペレーション | 1.9、1.10、1.11、1.12、1.13 | ユーザー クラスタ コントロール プレーン Pod のヘルスチェックを受けないクラスタのヘルス コントローラと gkectl diagnose clusterコマンドは、どちらも Namespace 全体の Pod のヘルスチェックを含む一連のヘルスチェックを実行します。しかし、ユーザー コントロール プレーン Pod が誤ってスキップされます。Controlplane v2 モードを使用している場合、これはクラスタに影響しません。 
 回避策: これは、ワークロードやクラスタ管理には影響しません。コントロール プレーン Pod の健全性を確認するには、次のコマンドを実行します。 kubectl get pods -owide -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG | 
  
  
    | アップグレード、更新 | 1.6+, 1.7+ | 1.6 と 1.7 の管理クラスタをアップグレードすると、k8s.gcr.ioからregistry.k8s.ioへのリダイレクトの影響を受ける可能性がある2023 年 3 月 20 日、Kubernetes はトラフィックを k8s.gcr.ioからregistry.k8s.ioにリダイレクトしました。Google Distributed Cloud 1.6.x と 1.7.x では、管理クラスタのアップグレードでコンテナ イメージk8s.gcr.io/pause:3.2を使用します。管理ワークステーションにプロキシを使用しているときに、プロキシでregistry.k8s.ioが許可されておらず、コンテナ イメージk8s.gcr.io/pause:3.2がローカルにキャッシュに保存されていないと、コンテナ イメージの pull 時に管理クラスタのアップグレードが失敗します。 
 回避策: 管理ワークステーションのプロキシの許可リストに registry.k8s.ioを追加します。 | 
  
  
    | ネットワーキング | 1.10、1.11、1.12.0~1.12.6、1.13.0~1.13.6、1.14.0~1.14.2 | ロードバランサの作成時に Seesaw の検証が失敗するgkectl create loadbalancerが失敗し、次のエラー メッセージが表示されます。
 - Validation Category: Seesaw LB - [FAILURE] Seesaw validation: xxx cluster lb health check failed: LB"xxx.xxx.xxx.xxx" is not healthy: Get "http://xxx.xxx.xxx.xxx:xxx/healthz": dial tcpxxx.xxx.xxx.xxx:xxx: connect: no route to host これは、Seesaw グループ ファイルがすでに存在しているためです。プリフライト チェックで、存在しない Seesaw ロードバランサの検証が行われます。 回避策: このクラスタの既存の Seesaw グループ ファイルを削除します。管理クラスタの場合、ファイル名は seesaw-for-gke-admin.yamlです。ユーザー クラスタの場合はseesaw-for-{CLUSTER_NAME}.yamlになります。 | 
  
  
    | ネットワーキング | 1.14 | conntrack テーブル挿入エラーによるアプリケーション タイムアウトGoogle Distributed Cloud バージョン 1.14 では、Ubuntu または COS オペレーティング システム イメージを使用しているときに、netfilter 接続トラッキング(conntrack)テーブルで挿入エラーが発生する可能性があります。挿入の失敗はランダムなアプリケーション タイムアウトにつながり、conntrack テーブルに新しいエントリ用のスペースがある場合でも発生する可能性があります。エラーは、チェーン長に基づいてテーブルの挿入を制限するカーネル 5.15 以降の変更が原因です。 この問題の影響を受けるかどうかを確認するには、次のコマンドを使用して、各ノードのカーネル内の接続トラッキング システムの統計情報を確認します。 sudo conntrack -S レスポンスは次のようになります。 cpu=0       found=0 invalid=4 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=1       found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=2       found=0 invalid=16 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=3       found=0 invalid=13 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=4       found=0 invalid=9 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=5       found=0 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=519 search_restart=0 clash_resolve=126 chaintoolong=0
... レスポンスの chaintoolong値がゼロ以外であれば、この問題の影響を受けています。 回避策 短期的な緩和策としては、netfiler ハッシュ テーブル(nf_conntrack_buckets)と netfilter 接続トラッキング テーブル(nf_conntrack_max)の両方のサイズを拡大します。テーブルのサイズを拡大するには、各クラスタノードで次のコマンドを実行します。 sysctl -w net.netfilter.nf_conntrack_buckets=TABLE_SIZE
sysctl -w net.netfilter.nf_conntrack_max=TABLE_SIZE TABLE_SIZE は、新しいサイズ(バイト数)に置き換えます。デフォルトのテーブルサイズ値は 262144です。ノードのコア数の 65,536 倍に等しい値を設定することをおすすめします。たとえば、ノードに 8 個のコアがある場合は、テーブルサイズを524288に設定します。 | 
  
  
   | ネットワーキング | 1.13.0~1.13.2 | Controlplane v2 を使用した Windows ノードで calico-typha または anetd-operator クラッシュ ループが発生する
    Controlplane V2 が有効になっている場合、calico-typhaまたはanetd-operatorが Windows ノードにスケジュールされ、クラッシュ ループが発生する可能性があります。 これは、2 つの Deployment で Windows ノード taint を含むすべての taint が許容されるためです。 
 回避策: 1.13.3 以降にアップグレードするか、次のコマンドを実行して calico-typha または anetd-operator Deployment を編集します。     # If dataplane v2 is not used.
    kubectl edit deployment -n kube-system calico-typha --kubeconfig USER_CLUSTER_KUBECONFIG
    # If dataplane v2 is used.
    kubectl edit deployment -n kube-system anetd-operator --kubeconfig USER_CLUSTER_KUBECONFIG
    次の spec.template.spec.tolerationsを削除します。     - effect: NoSchedule
      operator: Exists
    - effect: NoExecute
      operator: Exists
    次の Toleration を追加します。     - key: node-role.kubernetes.io/master
      operator: Exists
     | 
  
  
    | 構成 | 1.14.0~1.14.2 | ユーザー クラスタの非公開レジストリの認証情報ファイルを読み込めない認証情報 fileRefを使用してprivateRegistryセクションを指定すると、ユーザー クラスタを作成できない場合があります。プリフライトが失敗して次のメッセージが表示される場合があります。 
[FAILURE] Docker registry access: Failed to login.
 
 回避策: 
      このフィールドの指定が意図したものではない場合や、管理クラスタと同じ非公開レジストリの認証情報を使用する場合は、ユーザー クラスタ構成ファイルの privateRegistryセクションを削除するか、コメントします。ユーザー クラスタに特定の非公開レジストリの認証情報を使用する場合は、次のように privateRegistryセクションを一時的に指定します。privateRegistry:
  address: PRIVATE_REGISTRY_ADDRESS
  credentials:
    username: PRIVATE_REGISTRY_USERNAME
    password: PRIVATE_REGISTRY_PASSWORD
  caCertPath: PRIVATE_REGISTRY_CACERT_PATH(注: これは一時的な修正であり、これらのフィールドはすでに非推奨です。1.14.3 以降にアップグレードする場合は、認証情報ファイルの使用を検討してください)。 | 
  
  
   | オペレーション | 1.10+ | Cloud Service Mesh と他のサービス メッシュが Dataplane v2 と互換性がないデータプレーン V2 はロード バランシングを引き受け、パケットベースの DNAT の代わりにカーネル ソケットを作成します。Pod はバイパスされ、IPTables は使用されないため、Cloud Service Mesh はパケット検査を実施できません。 サイドカーはパケット検査を実行できないため、kube-proxy のフリーモードでは、接続が失われるか、Cloud Service Mesh を使用したサービスでトラフィック ルーティングが正しく行われません。 この問題は、Google Distributed Cloud 1.10 のすべてのバージョンで発生しますが、1.10(1.10.2 以降)の一部の新しいバージョンには回避策があります。 
 回避策: 完全な互換性を確保する場合は 1.11 にアップグレードします。1.10.2 以降を実行している場合は以下を実行します。     kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
    configmap に bpf-lb-sock-hostns-only: trueを追加し、anendd DaemonSet を再起動します。       kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
     | 
  
  
    | ストレージ | 1.12+、1.13.3 | kube-controller-managerが 6 分後に永続ボリュームを強制的に切断することがある
PV / PVC を切断するときに、kube-controller-managerが 6 分後にタイムアウトし、PV / PVC を強制的に切断する場合があります。kube-controller-managerの詳細ログには、次のようなイベントが表示されます。 
$ cat kubectl_logs_kube-controller-manager-xxxx | grep "DetachVolume started" | grep expired
kubectl_logs_kube-controller-manager-gke-admin-master-4mgvr_--container_kube-controller-manager_--kubeconfig_kubeconfig_--request-timeout_30s_--namespace_kube-system_--timestamps:2023-01-05T16:29:25.883577880Z W0105 16:29:25.883446       1 reconciler.go:224] attacherDetacher.DetachVolume started for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f"
This volume is not safe to detach, but maxWaitForUnmountDuration 6m0s expired, force detaching
 この問題を確認するには、ノードにログインして次のコマンドを実行します。 # See all the mounting points with disks
lsblk -f
# See some ext4 errors
sudo dmesg -T kubelet ログに次のようなエラーが表示されます。 
Error: GetDeviceMountRefs check failed for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f" :
the device mount path "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount" is still mounted by other references [/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount
 
 回避策: SSH を使用して影響を受けているノードに接続し、ノードを再起動します。 | 
  
  
    | アップグレード、更新 | 1.12+, 1.13+, 1.14+ | サードパーティの CSI ドライバを使用していると、クラスタのアップグレードが停止するサードパーティの CSI ドライバを使用している場合、クラスタをアップグレードできないことがあります。gkectl cluster diagnoseコマンドから次のエラーが返されることがあります。 
"virtual disk "kubernetes.io/csi/csi.netapp.io^pvc-27a1625f-29e3-4e4f-9cd1-a45237cc472c" IS NOT attached to machine "cluster-pool-855f694cc-cjk5c" but IS listed in the Node.Status"
 
 回避策: --skip-validation-allオプションを使用してアップグレードします。
 | 
  
  
    | オペレーション | 1.10+、1.11+、1.12+、1.13+、1.14+ | gkectl repair admin-masterが、VM ハードウェアのバージョンをアップグレードせずに管理マスター VM を作成する
gkectl repair admin-masterを介して作成された管理マスターノードが、想定より古い VM ハードウェア バージョンを使用することがあります。問題が発生すると、gkectl diagnose clusterレポートにエラーが記録されます。
 CSIPrerequisites [VM Hardware]: The current VM hardware versions are lower than vmx-15 which is unexpected. Please contact Anthos support to resolve this issue. 
 回避策: 管理マスターノードをシャットダウンし、https://kb.vmware.com/s/article/1003746 に従って、エラー メッセージで示されている想定バージョンにノードをアップグレードしてから、ノードを起動します。 | 
  
  
    | オペレーティング システム | 1.10+, 1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16+, , 1.28+, 1.29+, 1.30+, 1.31+, 1.32+ | VM のシャットダウン / 再起動時に DHCP リースが予期せずに解放され、IP が変更されることがあるsystemd v244 では、systemd-networkdのKeepConfiguration構成でデフォルトの動作が変更されました。変更前は、VM のシャットダウンまたは再起動時に DHCP リースの解放メッセージは DHCP サーバーに送信されませんでした。変更後、VM はこのようなメッセージを送信して、IP を DHCP サーバーに返却します。その結果、解放された IP が別の VM に割り当てられたり、VM に異なる IP が割り当てられ、VM 上で IP 競合(vSphere レベルではなく Kubernetes レベルで)や IP 変更が発生し、クラスタが破損する可能性があります。 たとえば、次のような症状が発生します。 
       
        vCenter UI では、同じ IP を使用する VM はありませんが、kubectl get
        nodes -o wideを実行すると、重複する IP を持つノードが報告されます。
NAME   STATUS    AGE  VERSION          INTERNAL-IP    EXTERNAL-IP    OS-IMAGE            KERNEL-VERSION    CONTAINER-RUNTIME
node1  Ready     28h  v1.22.8-gke.204  10.180.85.130  10.180.85.130  Ubuntu 20.04.4 LTS  5.4.0-1049-gkeop  containerd://1.5.13
node2  NotReady  71d  v1.22.8-gke.204  10.180.85.130  10.180.85.130  Ubuntu 20.04.4 LTS  5.4.0-1049-gkeop  containerd://1.5.13calico-nodeエラーにより、新しいノードを起動できません。
2023-01-19T22:07:08.817410035Z 2023-01-19 22:07:08.817 [WARNING][9] startup/startup.go 1135: Calico node 'node1' is already using the IPv4 address 10.180.85.130.
2023-01-19T22:07:08.817514332Z 2023-01-19 22:07:08.817 [INFO][9] startup/startup.go 354: Clearing out-of-date IPv4 address from this node IP="10.180.85.130/24"
2023-01-19T22:07:08.825614667Z 2023-01-19 22:07:08.825 [WARNING][9] startup/startup.go 1347: Terminating
2023-01-19T22:07:08.828218856Z Calico node failed to start 
 回避策: クラスタに次の DaemonSet をデプロイして、systemd-networkdのデフォルトの動作を元に戻します。この DaemonSet を実行する VM は、シャットダウン / 再起動時に IP を DHCP サーバーに返却しません。リースが期限切れになると、IP は DHCP サーバーによって自動的に解放されます。       apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: set-dhcp-on-stop
      spec:
        selector:
          matchLabels:
            name: set-dhcp-on-stop
        template:
          metadata:
            labels:
              name: set-dhcp-on-stop
          spec:
            hostIPC: true
            hostPID: true
            hostNetwork: true
            containers:
            - name: set-dhcp-on-stop
              image: ubuntu
              tty: true
              command:
              - /bin/bash
              - -c
              - |
                set -x
                date
                while true; do
                  export CONFIG=/host/run/systemd/network/10-netplan-ens192.network;
                  grep KeepConfiguration=dhcp-on-stop "${CONFIG}" > /dev/null
                  if (( $? != 0 )) ; then
                    echo "Setting KeepConfiguration=dhcp-on-stop"
                    sed -i '/\[Network\]/a KeepConfiguration=dhcp-on-stop' "${CONFIG}"
                    cat "${CONFIG}"
                    chroot /host systemctl restart systemd-networkd
                  else
                    echo "KeepConfiguration=dhcp-on-stop has already been set"
                  fi;
                  sleep 3600
                done
              volumeMounts:
              - name: host
                mountPath: /host
              resources:
                requests:
                  memory: "10Mi"
                  cpu: "5m"
              securityContext:
                privileged: true
            volumes:
            - name: host
              hostPath:
                path: /
            tolerations:
            - operator: Exists
              effect: NoExecute
            - operator: Exists
              effect: NoSchedule
       | 
  
  
    | 運用、アップグレード、更新 | 1.12.0~1.12.5、1.13.0~1.13.5、1.14.0~1.14.1 | 管理クラスタが 1.11.x からアップグレードされた後にコンポーネント アクセス サービス アカウント キーが消去されるこの問題は、1.11.x からアップグレードされた管理クラスタにのみ影響します。1.12 以降に新しく作成された管理クラスタには影響しません。 1.11.x クラスタを 1.12.x にアップグレードすると、admin-cluster-credsSecret のcomponent-access-sa-keyフィールドが空になります。これは、次のコマンドを実行して確認できます。 kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -o yaml | grep 'component-access-sa-key'出力が空の場合、キーが消去されていることを意味します。 コンポーネント アクセス サービス アカウント キーが削除されると、新しいユーザー クラスタのインストールや既存のユーザー クラスタのアップグレードが失敗します。発生する可能性のあるエラー メッセージの一部を以下に示します。 
        検証プリフライトが遅い場合のエラー メッセージ: "Failed
        to create the test VMs: failed to get service account key: service
        account is not configured."gkectl prepareによる準備に失敗した場合のエラー メッセージ:"Failed to prepare OS images: dialing: unexpected end of JSON
        input" Google Cloud コンソールまたは gcloud CLI を使用して 1.13 ユーザー クラスタをアップグレードする場合は、gkectl update admin --enable-preview-user-cluster-central-upgradeを実行してアップグレード プラットフォーム コントローラをデプロイすると、コマンドが失敗し、"failed to download bundle to disk: dialing:
        unexpected end of JSON input"というメッセージが表示されます(このメッセージは、kubectl --kubeconfig 
        ADMIN_KUBECONFIG -n kube-system get onprembundle -oyamlの出力のstatusフィールドで確認できます)。 
 回避策: 次のコマンドを実行して、コンポーネント アクセス サービス アカウント キーを手動で Secret に追加し直します。 kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -ojson | jq --arg casa "$(cat COMPONENT_ACESS_SERVICE_ACOOUNT_KEY_PATH | base64 -w 0)" '.data["component-access-sa-key"]=$casa' | kubectl --kubeconfig ADMIN_KUBECONFIG apply -f - | 
  
  
    | オペレーション | 1.13.0+、1.14.0+ | Controlplane V2 が有効になっていると、クラスタ オートスケーラーが機能しない コントロール プレーン V2 が有効になっているユーザー クラスタでは、自動スケーリングが有効になっているノードプールは、常に user-cluster.yaml内のautoscaling.minReplicasを使用します。cluster-autoscaler Pod のログに、次のようなエラーが表示されます。   > kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
  logs $CLUSTER_AUTOSCALER_POD --container_cluster-autoscaler
 TIMESTAMP  1 gkeonprem_provider.go:73] error getting onpremusercluster ready status: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
 TIMESTAMP 1 static_autoscaler.go:298] Failed to get node infos for groups: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
  cluster-autoscaler Pod を確認するには、次のコマンドを実行します。   > kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
   get pods | grep cluster-autoscaler
cluster-autoscaler-5857c74586-txx2c                          4648017n    48076Ki    30s
   
 回避策: 修正が適用されたバージョンにアップグレードするまで、gkectl update cluster を使用して、すべてのノードプールで自動スケーリングを無効にします。 | 
  
  
    | インストール | 1.12.0 から 1.12.4、1.13.0~1.13.3、1.14.0 | IP ブロック ファイルで CIDR を使用できないユーザーが IP ブロック ファイルで CIDR を使用すると、構成の検証が失敗し、次のエラーが表示されます。 - Validation Category: Config Check
    - [FAILURE] Config: AddressBlock for admin cluster spec is invalid: invalid IP:
172.16.20.12/30
  
 回避策: 修正を含むバージョン 1.12.5、1.13.4、1.14.1 以降にアップグレードするまで、IP ブロック ファイルに個々の IP を含めます。 | 
  
  
    | アップグレード、更新 | 1.14.0-1.14.1 | admin-cluster.yaml の OS イメージタイプが、ユーザー コントロール プレーンのマシンが再作成される前に更新されるadmin-cluster.yaml でコントロール プレーンの OS イメージタイプを更新する際に、対応するユーザー クラスタが enableControlplaneV2をtrueに設定して作成された場合、gkectlコマンドが終了したときにユーザー コントロール プレーンのマシンの再作成が完了していないことがあります。 
 回避策: 更新が完了したら、kubectl --kubeconfig USER_KUBECONFIG get nodes -owideを使用してノード OS のイメージタイプをモニタリングし、ユーザー コントロール プレーン マシンの再作成が完了するまで待ちます。たとえば、Ubuntu から COS に更新する場合、更新コマンドが完了した後も、すべてのコントロール プレーン マシンが Ubuntu から COS に完全に変更されるまで待機する必要があります。 | 
  
  
    | オペレーション | 1.10、1.11、1.12、1.13、1.14.0 | Calico CNI サービス アカウントの認証トークンの問題で Pod の作成エラーまたは削除エラーが発生するGoogle Distributed Cloud 1.14.0 の Calico の問題で Pod の作成と削除が失敗し、kubectl describe podsの出力に次のエラー メッセージが表示されます。 
  error getting ClusterInformation: connection is unauthorized: Unauthorized
   この問題は、クラスタの作成後、または Calico を使用して 1.14 にアップグレードしてから 24 時間後にのみ発生します。 管理クラスタは常に Calico を使用しますが、ユーザー クラスタの場合、user-cluster.yaml に config フィールド enableDataPlaneV2 があります。このフィールドが false に設定されているか、指定されていない場合、ユーザー クラスタで Calico が使用されています。 ノードの install-cniコンテナは、24 時間有効なトークンを含む kubeconfig を作成します。このトークンは、calico-nodePod によって定期的に更新される必要があります。calico-nodePod はノード上の kubeconfig ファイルを含むディレクトリにアクセスできないため、トークンを更新できません。 
 回避策: この問題は、Google Distributed Cloud バージョン 1.14.1 で修正されました。このバージョン以降にアップグレードしてください。 すぐにアップグレードできない場合は、管理クラスタとユーザー クラスタの calico-nodeDaemonSet に次のパッチを適用します。   kubectl -n kube-system get daemonset calico-node \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG -o json \
    | jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
    | kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f -
  kubectl -n kube-system get daemonset calico-node \
    --kubeconfig USER_CLUSTER_KUBECONFIG -o json \
    | jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
    | kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f -
  次のように置き換えます。ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパスUSER_CLUSTER_CONFIG_FILE: ユーザー クラスタの構成ファイルのパス
 | 
  
  
    | インストール | 1.12.0 から 1.12.4、1.13.0~1.13.3、1.14.0 | CIDR を使用すると IP ブロックの検証が失敗するユーザーが適切な構成を行っているにもかかわらず、クラスタの作成に失敗します。クラスタに十分な IP がないため、作成に失敗します。 
 回避策: CIDR をいくつかの小さな CIDR ブロックに分割します。たとえば、10.0.0.0/30を10.0.0.0/31, 10.0.0.2/31のようにします。N+1 CIDR がある限り(N はクラスタ内のノードの数)、これで十分なはずです。 | 
    
  
    | 運用、アップグレード、更新 | 1.11.0 - 1.11.1, 1.10.0 - 1.10.4, 1.9.0 - 1.9.6 | 
        管理クラスタのバックアップに、常時有効なシークレット暗号鍵と構成が含まれていない
        クラスタ バックアップとともに常時有効のシークレット暗号化機能が有効になっている場合、管理クラスタのバックアップには、常時有効のシークレット暗号化機能に必要な暗号鍵と構成が含まれません。そのため、gkectl repair admin-master --restore-from-backupを使用してこのバックアップで管理マスターを修復すると、次のエラーが発生します。 Validating admin master VM xxx ...
Waiting for kube-apiserver to be accessible via LB VIP (timeout "8m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "13m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "18m0s")...  ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master 回避策:
         対応するマイナー バージョンで利用可能なパッチ バージョンの gkectl バイナリを使用して、重要なクラスタ オペレーションの後に管理クラスタのバックアップを実行します。たとえば、クラスタで 1.10.2 バージョンを実行している場合は、gkectl を使用して管理クラスタをバックアップおよび復元するの説明に従って、1.10.5 gkectl バイナリを使用して管理クラスタの手動バックアップを行います。
 | 
  
    | 運用、アップグレード、更新 | 1.10+ | 
          管理 マスター VM の新しいブートディスク(たとえばgkectl repair admin-master)で再作成できない
          クラスタ作成時に、常時有効のシークレット暗号化機能を有効にせず、後で gkectl updateオペレーションを使用して有効にした場合、gkectl repair admin-masterは管理クラスタ コントロール プレーン ノードの修復に失敗します。クラスタ作成時に、常時有効のシークレット暗号化機能を有効にすることをおすすめします。現在、緩和策はありません。 | 
  
  
    | アップグレード、更新 | 1.10 | 最初のユーザー クラスタを 1.9 から 1.10 にアップグレードすると、他のユーザー クラスタのノードが再作成される最初のユーザー クラスタを 1.9 から 1.10 にアップグレードすると、同じ管理クラスタの他のユーザー クラスタでノードが再作成される可能性があります。再作成はローリング方式で行われます。 disk_labelがMachineTemplate.spec.template.spec.providerSpec.machineVariablesから削除されたことにより、すべてのMachineDeploymentで予期せず更新がトリガーされました。
 
 回避策: | 
  
  
    | アップグレード、更新 | 1.10.0 | クラスタのアップグレード後に Docker が頻繁に再起動するユーザー クラスタを 1.10.0 にアップグレードすると、Docker が頻繁に再起動することがあります。 この問題は、kubectl describe node NODE_NAME --kubeconfig USER_CLUSTER_KUBECONFIGを実行することで検出できます。 ノード状態で、Docker が頻繁に再起動するかどうか確認できます。出力の例を次に示します。 Normal   FrequentDockerRestart    41m (x2 over 141m)     systemd-monitor  Node condition FrequentDockerRestart is now: True, reason: FrequentDockerRestart 根本原因を把握するには、問題が発生しているノードに SSH 接続し、sudo journalctl --utc -u dockerやsudo journalctl -xなどのコマンドを実行する必要があります。 
 回避策: | 
  
  
    | アップグレード、更新 | 1.11, 1.12 | バージョン 1.12 にアップグレードした後、セルフデプロイの GMP コンポーネントが維持されないバージョン 1.12 より前の Google Distributed Cloud を使用していて、クラスタの gmp-systemNamespace に Google マネージド Prometheus(GMP)コンポーネントを手動で設定している場合、バージョン 1.12.x にアップグレードすると、コンポーネントが維持されません。 バージョン 1.12 より、gmp-system名前空間と CRD は、デフォルトでは、enableGMPForApplicationsフラグをfalseに設定してstackdriverオブジェクトで管理されます。1.12 にアップグレードする前に、Namespace に GMP コンポーネントを手動でデプロイすると、stackdriverによってリソースが削除されます。 
 回避策: | 
  
  
    | オペレーション | 1.11、1.12、1.13.0~1.13.1 | クラスタ スナップショットの systemシナリオに ClusterAPI オブジェクトがないsystemシナリオでは、クラスタ スナップショットにdefaultNamespace のリソースは含まれません。
 ただし、この Namespace の下にある Cluster API オブジェクトなどの一部の Kubernetes リソースには、有用なデバッグ情報が含まれています。クラスタ スナップショットには、これらの情報が含まれている必要があります。 
 回避策: 次のコマンドを手動で実行して、デバッグ情報を収集できます。 export KUBECONFIG=USER_CLUSTER_KUBECONFIG
kubectl get clusters.cluster.k8s.io -o yaml
kubectl get controlplanes.cluster.k8s.io -o yaml
kubectl get machineclasses.cluster.k8s.io -o yaml
kubectl get machinedeployments.cluster.k8s.io -o yaml
kubectl get machines.cluster.k8s.io -o yaml
kubectl get machinesets.cluster.k8s.io -o yaml
kubectl get services -o yaml
kubectl describe clusters.cluster.k8s.io
kubectl describe controlplanes.cluster.k8s.io
kubectl describe machineclasses.cluster.k8s.io
kubectl describe machinedeployments.cluster.k8s.io
kubectl describe machines.cluster.k8s.io
kubectl describe machinesets.cluster.k8s.io
kubectl describe servicesここで USER_CLUSTER_KUBECONFIG は、ユーザー クラスタの kubeconfig ファイルです。 | 
  
  
    | アップグレード、更新 | 1.11.0-1.11.4, 1.12.0-1.12.3, 1.13.0-1.13.1 | vSAN 環境でユーザー クラスタを削除しているときに、ノードのドレインが停止する次のシナリオで、ユーザー クラスタを削除、更新、またはアップグレードしているときにノードのドレインが停止することがあります。 
        管理クラスタが、vSAN でバージョン 1.12.x 以降の vSphere CSI ドライバを使用しており、管理クラスタとユーザー クラスタに in-tree vSphere プラグインによって作成された PVC / PV オブジェクトがない。 症状を確認するには、次のコマンドを実行します。 kubectl logs clusterapi-controllers-POD_NAME_SUFFIX  --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAMESPACE このコマンドから次のようなエラー メッセージが返されます。 E0920 20:27:43.086567 1 machine_controller.go:250] Error deleting machine object [MACHINE]; Failed to delete machine [MACHINE]: failed to detach disks from VM "[MACHINE]": failed to convert disk path "kubevols" to UUID path: failed to convert full path "ds:///vmfs/volumes/vsan:[UUID]/kubevols": ServerFaultCode: A general system error occurred: Invalid fault kubevolsは、vSphere in-tree ドライバのデフォルト ディレクトリです。現在の実装ではkubevolsが常に存在すると想定されているため、PVC / PV オブジェクトが作成されていないと、kubevolsの検出でノードのドレインが停止する場合があります。
 
 回避策: ノードが作成されるデータストアに kubevolsディレクトリを作成します。これは、user-cluster.yamlファイルまたはadmin-cluster.yamlファイルのvCenter.datastoreフィールドで定義します。 | 
    
  
    | 構成 | 1.7、1.8、1.9、1.10、1.11、1.12、1.13、1.14 | ユーザー クラスタを削除した後に、Cluster Autoscaler clusterrolebinding と clusterrole が削除されるユーザー クラスタの削除時に、cluster-autoscaler で対応する clusterroleとclusterrolebindingも削除されます。これは、cluster-autoscaler が有効になっている同じ管理クラスタのすべてのユーザー クラスタに影響します。この問題は、同じ管理クラスタ内のすべての cluster autoscaler Pod に同じ clusterrole と clusterrolebinding が使用されるために発生します。 次のような症状がみられます。 
        cluster-autoscalerログkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-autoscalerここで、ADMIN_CLUSTER_KUBECONFIG は、管理クラスタの kubeconfig ファイルです。表示される可能性のあるエラー メッセージの例: 2023-03-26T10:45:44.866600973Z W0326 10:45:44.866463       1 reflector.go:424] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
2023-03-26T10:45:44.866646815Z E0326 10:45:44.866494       1 reflector.go:140] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: Failed to watch *unstructured.Unstructured: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
 
 回避策: 回避策を表示する clusterrole と clusterrolebinding が管理クラスタにないかどうかを確認します。 
kubectl get clusterrolebindings --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
kubectl get clusterrole --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler ない場合には、次の clusterrole と clusterrolebind を管理クラスタに適用します。各ユーザー クラスタの clusterrolebinding にサービス アカウント サブジェクトを追加します。 
  
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-autoscaler
rules:
- apiGroups: ["cluster.k8s.io"]
  resources: ["clusters"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["cluster.k8s.io"]
  resources: ["machinesets","machinedeployments", "machinedeployments/scale","machines"]
  verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["onprem.cluster.gke.io"]
  resources: ["onpremuserclusters"]
  verbs: ["get", "list", "watch"]
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  resourceNames: ["cluster-autoscaler"]
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
- apiGroups:
  - ""
  resources:
  - nodes
  verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups:
  - ""
  resources:
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups:
  - ""
  resources:
  - pods/eviction
  verbs: ["create"]
# read-only access to cluster state
- apiGroups: [""]
  resources: ["services", "replicationcontrollers", "persistentvolumes", "persistentvolumeclaims"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["daemonsets", "replicasets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
  resources: ["jobs"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["policy"]
  resources: ["poddisruptionbudgets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses", "csinodes"]
  verbs: ["get", "list", "watch"]
# misc access
- apiGroups: [""]
  resources: ["events"]
  verbs: ["create", "update", "patch"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["create"]
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["cluster-autoscaler-status"]
  verbs: ["get", "update", "patch", "delete"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: cluster-autoscaler
  name: cluster-autoscaler
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-autoscaler
subjects:
  - kind: ServiceAccount
  name: cluster-autoscaler
  namespace:  NAMESPACE_OF_USER_CLUSTER_1 
  - kind: ServiceAccount
  name: cluster-autoscaler
  namespace:  NAMESPACE_OF_USER_CLUSTER_2 
  ... | 
  
  
    | 構成 | 1.7、1.8、1.9、1.10、1.11、1.12、1.13 | ユーザー クラスタを削除した後、管理クラスタの cluster-health-controllerとvsphere-metrics-exporterが機能しないユーザー クラスタの削除時に、対応する clusterroleも削除されるため、自動修復と vsphere 指標エクスポータが機能しなくなります。 次のような症状がみられます。 
        cluster-health-controllerログkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-health-controllerここで、ADMIN_CLUSTER_KUBECONFIG は、管理クラスタの kubeconfig ファイルです。表示される可能性のあるエラー メッセージの例: error retrieving resource lock default/onprem-cluster-health-leader-election: configmaps "onprem-cluster-health-leader-election" is forbidden: User "system:serviceaccount:kube-system:cluster-health-controller" cannot get resource "configmaps" in API group "" in the namespace "default": RBAC: clusterrole.rbac.authorization.k8s.io "cluster-health-controller-role" not found
 vsphere-metrics-exporterログkubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
vsphere-metrics-exporterここで、ADMIN_CLUSTER_KUBECONFIG は、管理クラスタの kubeconfig ファイルです。表示される可能性のあるエラー メッセージの例: vsphere-metrics-exporter/cmd/vsphere-metrics-exporter/main.go:68: Failed to watch *v1alpha1.Cluster: failed to list *v1alpha1.Cluster: clusters.cluster.k8s.io is forbidden: User "system:serviceaccount:kube-system:vsphere-metrics-exporter" cannot list resource "clusters" in API group "cluster.k8s.io" in the namespace "default"
 
 回避策: 回避策を表示する次の YAML を管理クラスタに適用します。 
vsphere-metrics-exporter の場合kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: vsphere-metrics-exporter
rules:
  - apiGroups:
      - cluster.k8s.io
    resources:
      - clusters
    verbs: [get, list, watch]
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: vsphere-metrics-exporter
  name: vsphere-metrics-exporter
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: vsphere-metrics-exporter
subjects:
  - kind: ServiceAccount
    name: vsphere-metrics-exporter
    namespace: kube-systemcluster-health-controller の場合apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-health-controller-role
rules:
- apiGroups:
  - "*"
  resources:
  - "*"
  verbs:
  - "*" | 
  
  
    | 構成 | 1.12.1~1.12.3、1.13.0~1.13.2 | gkectl check-configが OS イメージ検証で失敗する
これは、gkectl prepareを実行せずにgkectl check-configが失敗する可能性がある既知の問題です。gkectl prepareを実行する前にこのコマンドの実行をすすめているため、混乱が生じています。 gkectl check-configコマンドが次のエラー メッセージで失敗します。
 Validator result: {Status:FAILURE Reason:os images [OS_IMAGE_NAME] don't exist, please run `gkectl prepare` to upload os images. UnhealthyResources:[]}
 回避策: オプション 1: gkectl prepareを実行して、不足している OS イメージをアップロードします。 オプション 2: gkectl check-config --skip-validation-os-imagesを使用して OS イメージの検証をスキップします。 | 
  
  
    | アップグレード、更新 | 1.11, 1.12, 1.13 | アンチ アフィニティ グループの更新時に gkectl update admin/clusterが失敗するこれは、anti affinity groupsの更新時にgkectl update admin/clusterが失敗する可能性がある既知の問題です。 gkectl updateコマンドが次のエラー メッセージで失敗します。
 Waiting for machines to be re-deployed...  ERROR
Exit with error:
Failed to update the cluster: timed out waiting for the condition 
 回避策: 回避策を表示する更新を有効にするには、更新が失敗した afterにマシンを再作成する必要があります。 管理クラスタを更新する場合は、ユーザー マスターノードと管理アドオンノードを再作成する必要があります。 ユーザー クラスタを更新する場合は、ユーザー ワーカーノードを再作成する必要があります。 ユーザー ワーカーノードを再作成するにはオプション 1ドキュメントのバージョン 1.11 のノードプールの更新に沿って CPU またはメモリを変更し、ノードのローリング再作成をトリガーします。
 オプション 2kubectl delete を使用してマシンを 1 つずつ再作成します。
 kubectl delete machines MACHINE_NAME --kubeconfig USER_KUBECONFIG ユーザー マスターノードを再作成するにはオプション 1ドキュメントのバージョン 1.11 のコントロール プレーンのサイズを変更するの手順に沿って CPU またはメモリを変更し、ノードのローリング再作成をトリガーします。
 オプション 2kubectl delete を使用してマシンを 1 つずつ再作成します。
 kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG 管理アドオンノードを再作成するにはkubectl delete を使用してマシンを 1 つずつ再作成します。 kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG | 
  
  
    | インストール、アップグレード、更新 | 1.13.0-1.13.8, 1.14.0-1.14.4, 1.15.0 | クラスタの作成、アップグレード、更新、ノードの自動修復時に、ipMode.typeがstaticで、IP ブロック ファイルに構成されているホスト名にピリオドが 1 つ以上含まれていると、ノードの登録に失敗します。この場合、ノードの証明書署名リクエスト(CSR)は自動的に承認されません。 ノードの保留中の CSR を表示するには、次のコマンドを実行します。 kubectl get csr -A -o wide 次のログでエラー メッセージがないか確認します。 
        管理クラスタで、clusterapi-controllersPod のclusterapi-controller-managerコンテナのログを表示します。kubectl logs clusterapi-controllers-POD_NAME \
    -c clusterapi-controller-manager -n kube-system \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIGユーザー クラスタで同じログを表示するには、次のコマンドを実行します。kubectl logs clusterapi-controllers-POD_NAME \
    -c clusterapi-controller-manager -n USER_CLUSTER_NAME \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIGここで表示される可能性のあるエラー メッセージの例:ADMIN_CLUSTER_KUBECONFIG は、管理クラスタの kubeconfig ファイルです。USER_CLUSTER_NAME は、ユーザー クラスタの名前です。
 "msg"="failed
        to validate token id" "error"="failed to find machine for node
        node-worker-vm-1" "validate"="csr-5jpx9"問題のあるノードの kubeletログを表示します。journalctl --u kubelet表示される可能性のあるエラー メッセージの例: "Error getting
        node" err="node \"node-worker-vm-1\" not found" IP ブロック ファイルのホスト名フィールドにドメイン名を指定すると、最初のピリオドに続く文字は無視されます。たとえば、ホスト名を bob-vm-1.bank.plcと指定すると、VM のホスト名とノード名がbob-vm-1に設定されます。 ノード ID の検証が有効になっていると、CSR 承認者はノード名とマシン仕様のホスト名を比較し、名前の調整に失敗します。承認者が CSR を拒否し、ノードがブートストラップに失敗します。 
 回避策: ユーザー クラスタ 次の手順でノード ID の検証を無効にします。 
        ユーザー クラスタの構成ファイルに次のフィールドを追加します。disableNodeIDVerification: true
disableNodeIDVerificationCSRSigning: trueファイルを保存して、次のコマンドを実行してユーザー クラスタを更新します。gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG_FILE次のように置き換えます。ADMIN_CLUSTER_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。USER_CLUSTER_CONFIG_FILE: ユーザー クラスタの構成ファイルのパス。
 管理クラスタ 
        OnPremAdminClusterカスタム リソースを開いて編集します。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    edit onpremadmincluster -n kube-systemカスタム リソースに次のアノテーションを追加します。features.onprem.cluster.gke.io/disable-node-id-verification: enabled管理クラスタ コントロール プレーンで kube-controller-managerマニフェストを編集します。管理クラスタのコントロール プレーン ノードに SSH で接続します。kube-controller-managerマニフェストを開いて編集します。sudo vi /etc/kubernetes/manifests/kube-controller-manager.yamlcontrollersのリストを見つけます。--controllers=*,bootstrapsigner,tokencleaner,-csrapproving,-csrsigningこのセクションを以下のように更新します。--controllers=*,bootstrapsigner,tokencleaner
Deployment Cluster API コントローラを開いて編集します。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    edit deployment clusterapi-controllers -n kube-systemnode-id-verification-enabledとnode-id-verification-csr-signing-enabledの値をfalseに変更します。--node-id-verification-enabled=false
--node-id-verification-csr-signing-enabled=false | 
  | インストール、アップグレード、更新 | 1.11.0-1.11.4 | 非公開レジストリの証明書バンドルが原因で、管理コントロール プレーン マシンの起動に失敗する管理クラスタの作成またはアップグレードが次のログで停止し、最終的にタイムアウトになります。 
Waiting for Machine gke-admin-master-xxxx to become ready...
 ドキュメントのバージョン 1.11 では、外部クラスタ スナップショットの Cluster API コントローラのログに次のログが含まれています。 
Invalid value 'XXXX' specified for property startup-data
 Cluster API コントローラ ログのファイルパスの例を次に示します。 kubectlCommands/kubectl_logs_clusterapi-controllers-c4fbb45f-6q6g6_--container_vsphere-controller-manager_--kubeconfig_.home.ubuntu..kube.kind-config-gkectl_--request-timeout_30s_--namespace_kube-system_--timestamps
    VMware has a 64k vApp property size limit. In the identified versions,
    the data passed via vApp property is close to the limit. When the private
    registry certificate contains a certificate bundle, it may cause the final
    data to exceed the 64k limit. 
 Workaround: Only include the required certificates in the private registry
    certificate file configured in privateRegistry.caCertPathin
    the admin cluster config file. Or upgrade to a version with the fix when available. | 
  
  
    | Networking | 1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 | NetworkGatewayNodesmarked unhealthy from concurrent
      status update conflict
In networkgatewaygroups.status.nodes, some nodes switch
      betweenNotHealthyandUp. Logs for the ang-daemonPod running on that node reveal
      repeated errors: 
2022-09-16T21:50:59.696Z ERROR ANGd Failed to report status {"angNode": "kube-system/my-node", "error": "updating Node CR status: sending Node CR update: Operation cannot be fulfilled on networkgatewaynodes.networking.gke.io \"my-node\": the object has been modified; please apply your changes to the latest version and try again"}
NotHealthyステータスにより、コントローラで追加のフローティング IP がノードに割り当てられなくなります。これにより、他のノードへの負荷が増加したり、高可用性の冗長性が失われる可能性があります。
 それ以外の場合、データプレーンのアクティビティは影響を受けません。 networkgatewaygroupオブジェクトで競合が発生すると、再試行処理の不具合により、一部のステータス更新が失敗します。ステータス更新の失敗が多すぎると、ang-controller-managerは、ノードがそのハートビート時間の上限を超えたとみなし、ノードをNotHealthyとしてマークします。
 再試行処理の不具合は、以降のバージョンで修正されています。 
 回避策: 利用可能な場合は、修正されたバージョンにアップグレードします。 | 
  
  
    | アップグレード、更新 | 1.12.0-1.12.2, 1.13.0 | 競合状態により、更新中またはアップグレード中にマシン オブジェクトの削除がブロックされるこれは、古いマシン オブジェクトの削除を待機している間に、クラスタのアップグレードまたは更新が停止する可能性がある既知の問題です。マシン オブジェクトからファイナライザを削除できないことが原因で発生します。これは、ノードプールのローリング アップデート オペレーションに影響します。 gkectlコマンドが次のエラー メッセージでタイムアウトします。
 
E0821 18:28:02.546121   61942 console.go:87] Exit with error:
E0821 18:28:02.546184   61942 console.go:87] error: timed out waiting for the condition, message: Node pool "pool-1" is not ready: ready condition is not true: CreateOrUpdateNodePool: 1/3 replicas are updated
Check the status of OnPremUserCluster 'cluster-1-gke-onprem-mgmt/cluster-1' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
 clusterapi-controllerPod のログに、次のようなエラーが記録されます。
 
$ kubectl logs clusterapi-controllers-[POD_NAME_SUFFIX] -n cluster-1
    -c vsphere-controller-manager --kubeconfig [ADMIN_KUBECONFIG]
    | grep "Error removing finalizer from machine object"
[...]
E0821 23:19:45.114993       1 machine_controller.go:269] Error removing finalizer from machine object cluster-1-pool-7cbc496597-t5d5p; Operation cannot be fulfilled on machines.cluster.k8s.io "cluster-1-pool-7cbc496597-t5d5p": the object has been modified; please apply your changes to the latest version and try again
この問題がなく、実行が成功した場合でも、同じマシンでエラーが数分間繰り返されます。ほとんどの場合、エラーはすぐに解決しますが、まれに、この競合状態で数時間停止することがあります。 問題は、基盤となる VM がすでに vCenter で削除されているのに、対応するマシン オブジェクトを削除できないということです。他のコントローラからの更新が頻繁に発生することにより、ファイナライザの削除時に停止します。gkectlコマンドがタイムアウトになる可能性がありますが、コントローラはクラスタの調整を継続するため、アップグレードまたは更新プロセスは最終的に完了します。 
 回避策: この問題には、環境と要件に応じていくつかの緩和策があります。 
        オプション 1: 最終的に単独でアップグレードが完了するまで待機します。
 環境での分析と再現に基づいて、アップグレードは手動による介入なしで最終的に完了します。このオプションの注意点は、各マシン オブジェクトでファイナライザの削除にどのくらい時間がかかるかわからないことです。この処理は、すぐに行われる可能性もありますが、machineset コントローラの調整が非常に高速で処理され、調整の間にマシン コントローラがファイナライザを削除する時間がないと、数時間にわたり継続する可能性があります。
 
 このオプションの優れている点は、お客様側で操作する必要がなく、ワークロードが中断されないことです。アップグレードが完了するまで、さらに時間がかかります。
オプション 2: すべての古いマシン オブジェクトに自動修復アノテーションを適用します。
 machineset コントローラは、自動修復アノテーションが適用され、削除タイムスタンプがゼロ以外のマシンを除外し、それらのマシンに対する削除呼び出しを繰り返しません。これにより、競合状態を回避できます。
 
 デメリットは、マシン上の Pod が強制排除ではなく、直接削除されるため、PDB 構成が考慮されず、ワークロードのダウンタイムが発生する可能性がある点です。
 
 すべてのマシン名を取得するコマンド:
 kubectl --kubeconfig CLUSTER_KUBECONFIG get machines各マシンの自動修復アノテーションを適用するコマンド: kubectl annotate --kubeconfig CLUSTER_KUBECONFIG \
    machine MACHINE_NAME \
    onprem.cluster.gke.io/repair-machine=true この問題が発生し、アップグレードや更新を長期間完了できない場合は、緩和策についてサポートチームにお問い合わせください。 | 
  
  
    | インストール、アップグレード、更新 | 1.10.2, 1.11, 1.12, 1.13 | gkectlgkectl prepare の OS イメージ検証のプリフライトが失敗する
gkectl prepareコマンドが次のエラーで失敗しました。
 
- Validation Category: OS Images
    - [FAILURE] Admin cluster OS images exist: os images [os_image_name] don't exist, please run `gkectl prepare` to upload os images.
gkectl prepareのプリフライト チェックに、誤った検証が含まれています。
 
 回避策: --skip-validation-os-imagesフラグを追加して、同じコマンドを実行します。
 | 
  
  
    | インストール | 1.7、1.8、1.9、1.10、1.11、1.12、1.13 | vCenter URL に https://またはhttp://接頭辞が含まれていると、クラスタの起動に失敗することがある次のエラーで管理クラスタの作成に失敗しました。 
Exit with error:
Failed to create root cluster: unable to apply admin base bundle to external cluster: error: timed out waiting for the condition, message:
Failed to apply external bundle components: failed to apply bundle objects from admin-vsphere-credentials-secret 1.x.y-gke.z to cluster external: Secret "vsphere-dynamic-credentials" is invalid:
[data[https://xxx.xxx.xxx.username]: Invalid value: "https://xxx.xxx.xxx.username": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+'), data[https://xxx.xxx.xxx.password]:
Invalid value: "https://xxx.xxx.xxx.password": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')]
 この URL は秘密鍵の一部として使用されていますが、秘密鍵では / や : がサポートされていません。 
 回避策: 管理クラスタまたはユーザー クラスタの構成 yaml の vCenter.Addressフィールドから、https://接頭辞またはhttp://接頭辞を削除します。 | 
  
    | インストール、アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | util.CheckFileExistsでgkectl prepareがパニックする
gkectl prepareが次のスタック トレースでパニックする可能性があります。
 
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xde0dfa]
goroutine 1 [running]:
gke-internal.googlesource.com/syllogi/cluster-management/pkg/util.CheckFileExists(0xc001602210, 0x2b, 0xc001602210, 0x2b) pkg/util/util.go:226 +0x9a
gke-internal.googlesource.com/syllogi/cluster-management/gkectl/pkg/config/util.SetCertsForPrivateRegistry(0xc000053d70, 0x10, 0xc000f06f00, 0x4b4, 0x1, 0xc00015b400)gkectl/pkg/config/util/utils.go:75 +0x85
...
 この問題は、gkectl prepareが非公開レジストリの証明書ディレクトリを誤った権限で作成したことが原因で発生します。 
 回避策: この問題を解決するには、管理ワークステーションで次のコマンドを実行してください。 sudo mkdir -p /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
sudo chmod 0755 /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS | 
  
    | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | gkectl repair admin-masterと再開可能な管理アップグレードが連携しない
管理クラスタのアップグレードに失敗した後に、gkectl
      repair admin-masterを実行しないでください。これを行うと、以降の管理アップグレードが失敗し、管理マスターのパワーオン障害や VM にアクセスできないなどの問題が発生する可能性があります。 
 回避策: この状況がすでに発生している場合は、サポートにお問い合わせください。 | 
  
    | アップグレード、更新 | 1.10, 1.11 | 管理クラスタのアップグレードを再開すると、管理コントロール プレーンの VM テンプレートが削除される可能性がある管理クラスタのアップグレードを再開した後に管理コントロール プレーンのマシンが再作成されない場合、管理コントロール プレーンの VM テンプレートが削除されます。管理コントロール プレーンの VM テンプレートは、gkectl
      repair admin-masterを使用してコントロール プレーン マシンを復元するために使用される管理マスターのテンプレートです。 
 回避策: 管理コントロール プレーンの VM テンプレートは、次の管理クラスタのアップグレード中に再生成されます。 | 
  
    | オペレーティング システム | 1.12、1.13 | cgroup v2 がワークロードに影響する可能性があるバージョン 1.12.0 では、Container Optimized OS(COS)ノードに対して cgroup v2(統合)がデフォルトで有効になっています。これにより、COS クラスタ内のワークロードが不安定になる可能性があります。 
 回避策: バージョン 1.12.1 では cgroup v1(ハイブリッド)に戻っています。COS ノードを使用している場合は、リリース後すぐにバージョン 1.12.1 にアップグレードすることをおすすめします。 | 
  
    | ID | 1.10, 1.11, 1.12, 1.13 | ClientConfig のカスタム リソースgkectl updateは、ClientConfig カスタム リソースに手動で加えた変更を元に戻します。
 
 回避策: 毎回手動で変更した後に ClientConfig リソースをバックアップすることを強くおすすめします。 | 
  
    | インストール | 1.10, 1.11, 1.12, 1.13 | gkectl check-config検証エラー: F5 BIG-IP パーティションが見つからない
F5 BIG-IP パーティションが存在している場合でも見つからず、検証に失敗します。 F5 BIG-IP API に問題があると、検証が失敗することがあります。 
 回避策: もう一度 gkectl check-configを実行してみてください。 | 
  
    | インストール | 1.12 | cert-manager/ca-injector のリーダー選出の問題により、ユーザー クラスタのインストールが失敗するapiserver/etcd が低速の場合、クラッシュ ループの cert-manager-cainjectorが原因でインストールに失敗する場合があります。 
# These are logs from `cert-manager-cainjector`, from the command
# `kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system
  cert-manager-cainjector-xxx`
I0923 16:19:27.911174       1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election: timed out waiting for the condition
E0923 16:19:27.911110       1 leaderelection.go:321] error retrieving resource lock kube-system/cert-manager-cainjector-leader-election-core:
  Get "https://10.96.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core": context deadline exceeded
I0923 16:19:27.911593       1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election-core: timed out waiting for the condition
E0923 16:19:27.911629       1 start.go:163] cert-manager/ca-injector "msg"="error running core-only manager" "error"="leader election lost"
 
 回避策: 回避策を表示する問題を軽減するために、次のコマンドを実行します。 まず、cert-managerDeployment への変更が元に戻されないように、monitoring-operatorをスケールダウンします。 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
    scale deployment monitoring-operator --replicas=0実行中のレプリカは 1 つしかないため、cert-manager-cainjectorDeployment を編集してリーダー選出を無効にします。単一レプリカの場合、この操作は必要ありません。 # Add a command line flag for cainjector: `--leader-elect=false`
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
    -n kube-system deployment cert-manager-cainjectorcert-manager-cainjectorDeployment に関連する YAML スニペットは、次の例のようになります。
 
...
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cert-manager-cainjector
  namespace: kube-system
...
spec:
  ...
  template:
    ...
    spec:
      ...
      containers:
      - name: cert-manager
        image: "gcr.io/gke-on-prem-staging/cert-manager-cainjector:v1.0.3-gke.0"
        args:
        ...
        - --leader-elect=false
...
インストールが完了するまで、緩和策として monitoring-operatorレプリカを 0 のままにします。それ以外の場合は、変更が元に戻されます。 インストールが完了し、クラスタが稼働したら、Day 2 運用で monitoring-operatorを有効にします。 kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
    scale deployment monitoring-operator --replicas=1各アップグレード後に、変更が元に戻されます。この問題が今後のリリースで修正されるまで、同じ手順を繰り返して問題を軽減します。 | 
  
    | VMware | 1.10, 1.11, 1.12, 1.13 | バージョンが7.0U2 より低い場合は vCenter を再起動またはアップグレードするバージョンが 7.0U2 より前の場合、アップグレードなどの後に vCenter が再起動されると、vCenter の VM 情報にあるネットワーク名が正しくないため、マシンが Unavailable状態になります。最終的に、そのノードは自動修復されて新しいノードが作成されます。 関連する govmomi のバグ。 
 回避策: この回避策は VMware のサポートによって提供されます。 
        この問題は、vCenter バージョン 7.0U2 以降で修正されています。それより前のバージョンの場合は、ホストを右クリックして、[Connection] > [Disconnect] の順に選択します。次に、再接続します。これにより、VM のポートグループが強制的に更新されます。 | 
  
    | オペレーティング システム | 1.10, 1.11, 1.12, 1.13 | リモートホストによって切断された SSH 接続Google Distributed Cloud バージョン 1.7.2 以降では、Ubuntu OS イメージが CIS L1 Server Benchmark で強化されています。 CIS ルール「5.2.16 Ensure SSH Idle Timeout Interval is configured」を満たすために、/etc/ssh/sshd_configには次の設定が行われます。 
ClientAliveInterval 300
ClientAliveCountMax 0
 これらの設定の目的は、アイドル状態の 5 分後にクライアント セッションを終了することです。ただし、ClientAliveCountMax 0値により予期しない動作が発生します。管理ワークステーションまたはクラスタノードで SSH セッションを使用している場合、SSH クライアントがアイドル状態になっていなくても(たとえば、時間のかかるコマンドの実行中などに)SSH 接続が切断され、次のメッセージが表示されてコマンドが終了することがあります。 
Connection to [IP] closed by remote host.
Connection to [IP] closed.
 
 回避策: 次のいずれかを行います。 
        SSH の切断時にコマンドが終了しないようにするには、nohupを使用します。nohup gkectl upgrade admin --config admin-cluster.yaml \
    --kubeconfig kubeconfigゼロ以外の ClientAliveCountMax値を使用するようにsshd_configを更新します。CIS ルールでは、3 未満の値を使用することが推奨されています。sudo sed -i 's/ClientAliveCountMax 0/ClientAliveCountMax 1/g' \
    /etc/ssh/sshd_config
sudo systemctl restart sshd SSH セッションを再接続します。 | 
  
    | インストール | 1.10, 1.11, 1.12, 1.13 | cert-managerのインストールが競合している
1.13 リリースでは、monitoring-operatorによって cert-manager がcert-managerNamespace にインストールされます。なんらかの理由で独自の cert-manager をインストールする必要がある場合は、次の手順で競合を回避してください。 この作業はクラスタごとに 1 回だけ行う必要があります。変更はクラスタのアップグレード後も保持されます。注: 独自の cert-manager をインストールする場合の一般的な症状として、 cert-managerのバージョンまたはイメージ(v1.7.2 など)が古いバージョンに戻されることがあります。これは、monitoring-operatorがcert-managerを調整し、バージョンを元に戻す場合に発生します。
 回避策:アップグレード中の競合を回避します。 
        使用しているバージョンの cert-managerをアンインストールします。独自のリソースを定義している場合は、リソースをバックアップすることをおすすめします。アップグレードを実施します。独自の cert-managerを復元するには、次の操作を行います。 ユーザー クラスタで独自の cert-manager を復元する 
        monitoring-operatorDeployment を 0 にスケーリングします。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n USER_CLUSTER_NAME \
    scale deployment monitoring-operator --replicas=0monitoring-operatorによって管理されるcert-managerDeployment を 0 にスケーリングします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-cainjector\
    --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-webhook --replicas=0使用しているバージョンの cert-managerを再インストールします。必要に応じて、カスタマイズしたリソースを復元します。アップストリームのデフォルト cert-manager のインストールを使用している場合、または cert-manager が cert-managerNamespace にインストールされている場合は、この手順をスキップできます。それ以外の場合は、metrics-cacert-manager.io/v1 証明書とmetrics-pki.cluster.localIssuer リソースをcert-managerから、インストールした cert-manager のクラスタ リソースの Namespace にコピーします。relevant_fields='
{
  apiVersion: .apiVersion,
  kind: .kind,
  metadata: {
    name: .metadata.name,
    namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
  },
  spec: .spec
}
'
f1=$(mktemp)
f2=$(mktemp)
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    get issuer -n cert-manager metrics-pki.cluster.local -o json \
    | jq "${relevant_fields}" > $f1
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    get certificate -n cert-manager metrics-ca -o json \
    | jq "${relevant_fields}" > $f2
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f1
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f2 管理クラスタに独自の cert-manager を復元する 一般に、管理クラスタは Google Distributed Cloud コントロール プレーン ワークロードのみを実行するため、管理クラスタに cert-manager を再インストールする必要はありません。まれに、独自の cert-manager を管理クラスタにインストールする必要が生じた場合は、競合を回避するために次の手順に沿って操作してください。Apigee を利用していて、Apigee の cert-manager のみを必要とする場合は、管理クラスタ コマンドを実行する必要はありません。 
        monitoring-operatorデプロイを 0 にスケーリングします。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n kube-system scale deployment monitoring-operator --replicas=0monitoring-operatorによって管理されるcert-managerDeployment を 0 にスケーリングします。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager \
    --replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
     -n cert-manager scale deployment cert-manager-cainjector \
     --replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    -n cert-manager scale deployment cert-manager-webhook \
    --replicas=0使用しているバージョンの cert-managerを再インストールします。必要に応じて、カスタマイズしたリソースを復元します。アップストリームのデフォルト cert-manager のインストールを使用している場合、または cert-manager が cert-managerNamespace にインストールされている場合は、この手順をスキップできます。それ以外の場合は、metrics-cacert-manager.io/v1 証明書とmetrics-pki.cluster.localIssuer リソースをcert-managerから、インストールした cert-manager のクラスタ リソースの Namespace にコピーします。relevant_fields='
{
  apiVersion: .apiVersion,
  kind: .kind,
  metadata: {
    name: .metadata.name,
    namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
  },
  spec: .spec
}
'
f3=$(mktemp)
f4=$(mktemp)
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \n
    get issuer -n cert-manager metrics-pki.cluster.local -o json \
    | jq "${relevant_fields}" > $f3
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    get certificate -n cert-manager metrics-ca -o json \
    | jq "${relevant_fields}" > $f4
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f3
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f4 | 
  
    | オペレーティング システム | 1.10, 1.11, 1.12, 1.13 | Docker、containerd、runc の脆弱性スキャンにおける誤検出
      Google Distributed Cloud の Ubuntu OS イメージ内の Docker、containerd、runc は、Ubuntu PPA を使用して特別なバージョンに固定されています。これにより、コンテナ ランタイムの変更が各リリース前に Google Distributed Cloud によって認定されるようになります。 ただし、特殊なバージョンは Ubuntu CVE Tracker に知られていません。これは、さまざまな CVE スキャンツールによって脆弱性フィードとして使用されます。このため、Docker、containerd、runc の脆弱性スキャンで誤検出が発生します。 たとえば、CVE のスキャン結果で次の誤検出が発生することがあります。これらの CVE は、Google Distributed Cloud の最新のパッチ バージョンで修正済みです。 CVE の修正については、リリースノートをご覧ください。 
 回避策: Canonical はこの問題を認識しており、修正は https://github.com/canonical/sec-cvescan/issues/73 で追跡されています。 | 
  
    | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | 非 HA クラスタのアップグレード中に、管理者クラスタとユーザー クラスタの間のネットワーク接続が短時間使用できなくなる場合がある非 HA クラスタを 1.9 から 1.10 にアップグレードするときに、ユーザー クラスタに対する kubectl exec、kubectl log、Webhook が一時的に使用できなくなる場合があります。このダウンタイムは最大で 1 分です。これは、受信リクエスト(kubectl exec、kubectl log、Webhook)がユーザー クラスタの kube-apiserver によって処理されるために発生します。ユーザーの kube-apiserver は Statefulset です。非 HA クラスタでは、Statefulset のレプリカは 1 つだけです。そのため、アップグレード中、新しい kube-apiserver の準備ができるまで古い kube-apiserver が使用できなくなる可能性があります。 
 回避策: このダウンタイムはアップグレード プロセス中にのみ発生します。アップグレード時のダウンタイムを短縮するために、HA クラスタに切り替えることをおすすめします。 | 
  
    | インストール、アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | クラスタの作成またはアップグレード後の HA クラスタの診断で Konnectivity の準備チェックが失敗したHA クラスタの作成またはアップグレード中にクラスタの診断で konnectivity の readiness チェックに失敗した場合、通常、Google Distributed Cloud(kubectl exec、kubectl log、Webhook)の機能に影響はありません。これは、不安定なネットワーキングなどの問題が原因で、1、2 個の konnectivity のレプリカが一定期間読み取り不能になっている可能性があるためです。 
 回避策: konnectivity は自己回復します。30 分から 1 時間待ってから、クラスタの診断を再度実行してください。 | 
  
    | オペレーティング システム | 1.7、1.8、1.9、1.10、1.11 | /etc/cron.daily/aideCPU とメモリの急増に関する問題
Google Distributed Cloud バージョン 1.7.2 以降では、Ubuntu OS イメージが CIS L1 Server Benchmark で強化されています。 そのため、cron スクリプト /etc/cron.daily/aideがインストールされ、CIS L1 サーバールールの「1.4.2 ファイルシステムの整合性が確保されていることを定期的に確認する」を実施するaideチェックがスケジュール設定されます。 cron ジョブは、毎日午前 6 時 25 分(UTC)に実行されます。ファイル システム上のファイルの数によっては、この aideプロセスが原因で CPU とメモリの使用量が急増することがあります。 
 回避策: 急増がワークロードに影響を与える場合は、毎日の cron ジョブを無効にします。 sudo chmod -x /etc/cron.daily/aide | 
  
    | ネットワーキング | 1.10, 1.11, 1.12, 1.13 | ロードバランサと NSX-T ステートフル分散ファイアウォール ルールが予期しない動作をする。NSX-T ステートフル分散ファイアウォール ルールを使用する環境に、Seesaw がバンドルされているロードバランサがデプロイされている場合、Google Distributed Cloud バージョン 1.9 以降をデプロイすると、stackdriver-operatorがgke-metrics-agent-confConfigMap の作成に失敗し、gke-connect-agentPod がクラッシュ ループに入る可能性があります。 根本的な問題は、Seesaw が非対称接続フローを使用するため、Seesaw ロードバランサを通るクライアントからユーザー クラスタ API サーバーへの接続がステートフル NSX-T 分散ファイアウォール ルールによって解除されることです。NSX-T 分散ファイアウォール ルールとの連携の問題は、Seesaw を使用するすべての Google Distributed Cloud リリースに影響します。独自のアプリケーションで、32K を超えるサイズの大規模な Kubernetes オブジェクトを作成すると、同様の接続の問題が発生することがあります。 
 回避策: ドキュメントのバージョン 1.13 の手順に沿って NSX-T 分散ファイアウォール ルールを無効にするか、Seesaw VM にステートレス分散ファイアウォール ルールを使用します。 クラスタで手動ロードバランサを使用している場合は、こちらの手順に沿って、バックエンド ノードの障害検出時にクライアント接続がリセットされるようロードバランサを構成します。この構成を行わないと、サーバー インスタンスが停止したときに、Kubernetes API サーバーのクライアントが数分間応答不能になる可能性があります。 | 
  
    | ロギングとモニタリング | 1.10、1.11、1.12、1.13、1.14、1.15 | 予想外の請求のモニタリングGoogle Distributed Cloud バージョン 1.10~1.15 で、[お支払い] ページに予想外に高い Metrics volumeの料金が表示される場合があります。この問題は、次の両方の状況に該当する場合にのみ影響します。 
        アプリケーションのロギングとモニタリングが有効になっている(enableStackdriverForApplications=true)アプリケーション Pod に prometheus.io/scrap=trueアノテーションがある。(このアノテーションは Cloud Service Mesh のインストールでも追加されます)。 この問題の影響を受けるかどうかを確認するには、ユーザー定義の指標を一覧表示します。external.googleapis.com/prometheusという接頭辞の不要な指標に対する請求が表示され、kubectl -n kube-system get stackdriver stackdriver -o yamlのレスポンスでenableStackdriverForApplicationsが true に設定されている場合は、この問題に該当します。 
 回避策  この問題の影響を受ける場合は、クラスタをバージョン 1.12 以降にアップグレードし、enableStackdriverForApplicationsフラグの使用を停止して、prometheus.io/scrap=trueアノテーションに依存しない、新しいアプリケーション モニタリング ソリューションである managed-service-for-prometheus に切り替えることをおすすめします。新しいソリューションでは、enableCloudLoggingForApplicationsフラグとenableGMPForApplicationsフラグを使用して、アプリケーションのログ収集と指標収集を個別に制御できます。  enableStackdriverForApplicationsフラグの使用を停止するには、stackdriver オブジェクトを開いて編集します。 
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
  enableStackdriverForApplications: true行を削除してから保存し、エディタを終了します。 アノテーション ベースの指標の収集を終了できない場合は、次の操作を行います。 
        不要な請求の指標が含まれるソースの Pod と Service を見つけます。kubectl --kubeconfig KUBECONFIG \
  get pods -A -o yaml | grep 'prometheus.io/scrape: "true"'
kubectl --kubeconfig KUBECONFIG get \
  services -A -o yaml | grep 'prometheus.io/scrape: "true"'Pod または Service から prometheus.io/scrap=trueアノテーションを削除します。アノテーションが Cloud Service Mesh によって追加される場合は、Prometheus オプションなしで Cloud Service Mesh を構成するか、Istio 指標マージ機能をオフにすることを検討してください。 | 
  
    | インストール | 1.11, 1.12, 1.13 | vSphere データディスクの作成時にインストーラが失敗する
カスタムロールが誤った権限レベルでバインドされていると、Google Distributed Cloud インストーラが失敗する可能性があります。 ロール バインディングが間違っていると、vSphere データディスクの作成で govcがハングし、0 サイズのディスクが作成されます。この問題を解決するには、vSphere vCenter レベル(root)でカスタムロールをバインドします。 
 回避策: DC レベル(またはルートよりも低いレベル)でカスタムロールをバインドする場合は、vCenter ルートレベルで読み取り専用ロールをユーザーにバインドする必要があります。 ロールの作成の詳細については、vCenter ユーザー アカウントの権限をご覧ください。 | 
  
    | ロギングとモニタリング | 1.9.0~1.9.4、1.10.0~1.10.1 | monitoring.googleapis.com に対する大量のネットワーク トラフィック
ユーザー ワークロードがない新しいクラスタであっても、monitoring.googleapis.comへのネットワーク トラフィック量が多い場合があります。 この問題は、バージョン 1.10.0-1.10.1 とバージョン 1.9.0-1.9.4 に影響します。この問題は、バージョン 1.10.2 と 1.9.5 で修正されています。 
 回避策: 回避策を表示するバージョン 1.10.2 / 1.9.5 以降にアップグレードします。 以前のバージョンでこの問題を回避するには: 
          stackdriver-operator をスケールダウンします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system \
    scale deployment stackdriver-operator --replicas=0USER_CLUSTER_KUBECONFIG は、ユーザー クラスタの kubeconfig ファイルのパスに置き換えます。gke-metrics-agent-confConfigMap を開いて編集します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system \
    edit configmap gke-metrics-agent-confプローブ間隔を 0.1 秒から 13 秒に増やします。  processors:
    disk_buffer/metrics:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-metrics
      probe_interval: 13s
      retention_size_mib: 6144
  disk_buffer/self:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-self
      probe_interval: 13s
      retention_size_mib: 200
    disk_buffer/uptime:
      backend_endpoint: https://monitoring.googleapis.com:443
      buffer_dir: /metrics-data/nsq-metrics-uptime
      probe_interval: 13s
      retention_size_mib: 200編集セッションを閉じます。gke-metrics-agentDaemonSet のバージョンを 1.1.0-anthos.8 に変更します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG  \
  --namespace kube-system  set image daemonset/gke-metrics-agent \
  gke-metrics-agent=gcr.io/gke-on-prem-release/gke-metrics-agent:1.1.0-anthos.8 | 
  
    | ロギングとモニタリング | 1.10, 1.11 | gke-metrics-agentで CrashLoopBackOff エラーが頻繁に発生する
Google Distributed Cloud バージョン 1.10 以降の場合、stackdriver オブジェクトで enableStackdriverForApplications が true に設定されていると、gke-metrics-agent DaemonSet で CrashLoopBackOff エラーが頻繁に発生します。 
 回避策: この問題を軽減するには、次のコマンドを実行して、アプリケーション指標の収集を無効にします。これらのコマンドでアプリケーション ログの収集は無効になりません。 
        次の変更を元に戻さないようにするには、stackdriver-operatorをスケールダウンします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system scale deploy stackdriver-operator \
    --replicas=0USER_CLUSTER_KUBECONFIG は、ユーザー クラスタの kubeconfig ファイルのパスに置き換えます。gke-metrics-agent-confConfigMap を開いて編集します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit configmap gke-metrics-agent-confservices.pipelinesで、metrics/app-metricsセクション全体をコメントアウトします。services:
  pipelines:
    #metrics/app-metrics:
    #  exporters:
    #  - googlecloud/app-metrics
    #  processors:
    #  - resource
    #  - metric_to_resource
    #  - infer_resource
    #  - disk_buffer/app-metrics
    #  receivers:
    #  - prometheus/app-metrics
    metrics/metrics:
      exporters:
      - googlecloud/metrics
      processors:
      - resource
      - metric_to_resource
      - infer_resource
      - disk_buffer/metrics
      receivers:
      - prometheus/metrics編集セッションを閉じます。gke-metrics-agentDaemonSet を再起動します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system rollout restart daemonset gke-metrics-agent | 
  
    | ロギングとモニタリング | 1.11, 1.12, 1.13 | ダッシュボードでサポートが終了した指標を置き換える非推奨の指標が OOTB ダッシュボードで使用されていると、空のグラフがいくつか表示されます。Monitoring ダッシュボードで非推奨の指標を見つけるには、次のコマンドを実行します。 gcloud monitoring dashboards list > all-dashboard.json
# find deprecated metrics
cat all-dashboard.json | grep -E \
  'kube_daemonset_updated_number_scheduled\
    |kube_node_status_allocatable_cpu_cores\
    |kube_node_status_allocatable_pods\
    |kube_node_status_capacity_cpu_cores'次の非推奨の指標を別の指標に移行する必要があります。 
        | 非推奨 | 置換 | 
|---|
 
          | kube_daemonset_updated_number_scheduled | kube_daemonset_status_updated_number_scheduled |  
          | kube_node_status_allocatable_cpu_cores
 kube_node_status_allocatable_memory_bytes
 kube_node_status_allocatable_pods | kube_node_status_allocatable |  
          | kube_node_status_capacity_cpu_cores
 kube_node_status_capacity_memory_bytes
 kube_node_status_capacity_pods | kube_node_status_capacity |  
          | kube_hpa_status_current_replicas | kube_horizontalpodautoscaler_status_current_replicas |  
 回避策: 非推奨の指標を置き換えるには 
        Google Cloud Monitoring ダッシュボードで「GKE on-prem node status」を削除します。こちらの手順で「GKE on-prem node status」を再インストールします。Google Cloud Monitoring ダッシュボードで「GKE on-prem node utilization」を削除します。こちらの手順で「GKE on-prem node utilization」を再インストールします。Google Cloud Monitoring ダッシュボードで「GKE on-prem vSphere vm health」を削除します。こちらの手順で「GKE On-Prem vSphere vm health」を再インストールします。この非推奨は、Kubernetes 1.22 に必要な kube-state-metrics エージェントが v1.9 から v2.4 にアップグレードされたことによるものです。カスタム ダッシュボードまたはアラート ポリシーで、接頭辞 kube_を持つ非推奨のkube-state-metrics指標をすべて置換できます。 | 
  
    | ロギングとモニタリング | 1.10, 1.11, 1.12, 1.13 | Cloud Monitoring で不明な指標データGoogle Distributed Cloud バージョン 1.10 以降では、Cloud Monitoring のクラスタのデータに、次のような無関係なサマリー指標のエントリが含まれている場合があります。 
Unknown metric: kubernetes.io/anthos/go_gc_duration_seconds_summary_percentile
 無関係なサマリー指標が含まれている可能性があるその他の指標タイプ: 
        apiserver_admission_step_admission_duration_seconds_summarygo_gc_duration_secondsscheduler_scheduling_duration_secondsgkeconnect_http_request_duration_seconds_summaryalertmanager_nflog_snapshot_duration_seconds_summary これらのサマリータイプの指標は指標リストに含まれていますが、現時点では gke-metrics-agentではサポートされていません。 | 
  
    | ロギングとモニタリング | 1.10, 1.11, 1.12, 1.13 | 一部のノードで見つからない指標すべてのノードではありませんが、一部のノードでは、次の指標が見つからない場合があります。 
        kubernetes.io/anthos/container_memory_working_set_byteskubernetes.io/anthos/container_cpu_usage_seconds_totalkubernetes.io/anthos/container_network_receive_bytes_total 
 回避策: この問題を解決するには、回避策として次の操作を行います。[バージョン 1.9.5 以降、1.10.2 以降、1.11.0]: 次のステップ 1~4 で、gke-metrics-agent の CPU を増やします。 
        stackdriverリソースを編集用に開きます。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit stackdriver stackdrivergke-metrics-agentの CPU リクエストを10mから50mに、CPU 上限を100mから200mに引き上げるには、次のresourceAttrOverrideセクションをstackdriverマニフェストに追加します。spec:
  resourceAttrOverride:
    gke-metrics-agent/gke-metrics-agent:
      limits:
        cpu: 100m
        memory: 4608Mi
      requests:
        cpu: 10m
        memory: 200Mi編集したリソースは、次のようになります。spec:
  anthosDistribution: on-prem
  clusterLocation: us-west1-a
  clusterName: my-cluster
  enableStackdriverForApplications: true
  gcpServiceAccountSecretName: ...
  optimizedMetrics: true
  portable: true
  projectID: my-project-191923
  proxyConfigSecretName: ...
  resourceAttrOverride:
    gke-metrics-agent/gke-metrics-agent:
      limits:
        cpu: 200m
        memory: 4608Mi
      requests:
        cpu: 50m
        memory: 200Mi変更を保存し、テキスト エディタを終了します。変更が有効になっていることを確認するには、次のコマンドを実行します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system get daemonset gke-metrics-agent -o yaml \
    | grep "cpu: 50m"変更が有効になっている場合は、このコマンドでcpu: 50mが検出されます。 | 
  
  
    | ロギングとモニタリング | 1.11.0~1.11.2、1.12.0 |  管理クラスタに scheduler と controller-manager の指標がない管理クラスタがこの問題の影響を受ける場合、scheduler と controller-manager の指標が欠落しています。たとえば、次の 2 つの指標が欠落しています。 
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
 
 回避策: v1.11.3+、v1.12.1+、または v1.13+ にアップグレードします。 | 
  
  
    |  | 1.11.0~1.11.2、1.12.0 | ユーザー クラスタにスケジューラとコントローラ マネージャーの指標がない ユーザー クラスタがこの問題の影響を受ける場合、scheduler と controller-manager の指標が欠落しています。たとえば、次の 2 つの指標が欠落しています。 
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
 
 回避策: この問題は、Google Distributed Cloud バージョン 1.13.0 以降で修正されています。修正を含むバージョンにクラスタをアップグレードします。 | 
  
    | インストール、アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | 作成時に管理クラスタを登録できないバージョン 1.9.x または 1.10.0 の管理クラスタを作成するときに、指定された gkeConnect仕様で管理クラスタを登録できない場合、次のエラーが発生します。 
Failed to create root cluster: failed to register admin cluster: failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error:  ode = PermissionDenied desc = Permission 'gkehub.memberships.get' denied on PROJECT_PATH
 この管理クラスタは引き続き使用できますが、後で管理クラスタをバージョン 1.10.y にアップグレードしようとすると、次のエラーが発生します。 
failed to migrate to first admin trust chain: failed to parse current version "": invalid version: "" failed to migrate to first admin trust chain: failed to parse current version "": invalid version: ""
 
 回避策: 回避策を表示するこのエラーが発生した場合は、以下の手順でクラスタ登録の問題を解決してください。この修正を行うと、管理クラスタをアップグレードできます。 
          gkectl update adminを実行して、管理クラスタを正しいサービス アカウント キーに登録します。OnPremAdminClusterカスタム リソースにパッチを適用するための専用のサービス アカウントを作成します。export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
# Create Service Account modify-admin
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: modify-admin
  namespace: kube-system
EOF
# Create ClusterRole
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: null
  name: modify-admin-role
rules:
- apiGroups:
  - "onprem.cluster.gke.io"
  resources:
  - "onpremadminclusters/status"
  verbs:
  - "patch"
EOF
# Create ClusterRoleBinding for binding the permissions to the modify-admin SA
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  creationTimestamp: null
  name: modify-admin-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: modify-admin-role
subjects:
- kind: ServiceAccount
  name: modify-admin
  namespace: kube-system
EOFADMIN_CLUSTER_KUBECONFIG は、管理クラスタ kubeconfig ファイルのパスに置き換えます。次のコマンドを実行して、OnPremAdminClusterカスタム リソースを更新します。export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
SERVICE_ACCOUNT=modify-admin
SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} \
    -n kube-system -o json \
    | jq -Mr '.secrets[].name | select(contains("token"))')
TOKEN=$(kubectl get secret ${SECRET} -n kube-system -o json \
    | jq -Mr '.data.token' | base64 -d)
kubectl get secret ${SECRET} -n kube-system -o json \
    | jq -Mr '.data["ca.crt"]' \
    | base64 -d > /tmp/ca.crt
APISERVER=https://$(kubectl -n default get endpoints kubernetes \
    --no-headers | awk '{ print $2 }')
# Find out the admin cluster name and gkeOnPremVersion from the OnPremAdminCluster CR
ADMIN_CLUSTER_NAME=$(kubectl get onpremadmincluster -n kube-system \
    --no-headers | awk '{ print $1 }')
GKE_ON_PREM_VERSION=$(kubectl get onpremadmincluster \
    -n kube-system $ADMIN_CLUSTER_NAME \
    -o=jsonpath='{.spec.gkeOnPremVersion}')
# Create the Status field and set the gkeOnPremVersion in OnPremAdminCluster CR
curl -H "Accept: application/json" \
    --header "Authorization: Bearer $TOKEN" -XPATCH \
    -H "Content-Type: application/merge-patch+json" \
    --cacert /tmp/ca.crt \
    --data '{"status": {"gkeOnPremVersion": "'$GKE_ON_PREM_VERSION'"}}' \
    $APISERVER/apis/onprem.cluster.gke.io/v1alpha1/namespaces/kube-system/onpremadminclusters/$ADMIN_CLUSTER_NAME/status--disable-upgrade-from-checkpointフラグを使用して管理クラスタのアップグレードを再試行します。gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --disable-upgrade-from-checkpointADMIN_CLUSTER_CONFIG は、管理クラスタ構成ファイルのパスに置き換えます。 | 
  
    | ID | 1.10, 1.11, 1.12, 1.13 | GKE Identity Service を使用すると Connect Agent が予期せず再起動する場合がある
GKE Identity Service 機能を使用して GKE Identity Service ClientConfig を管理している場合は、Connect Agent が予期せず再起動することがあります。 
 回避策: 既存のクラスタでこの問題が発生した場合は、次のいずれかを行います。 
        GKE Identity Service を無効にします。GKE Identity Service を無効にしても、デプロイされた GKE Identity Service バイナリや GKE Identity Service ClientConfig は削除されません。GKE Identity Service を無効にするには、次のコマンドを実行します。gcloud container fleet identity-service disable \
    --project PROJECT_IDPROJECT_ID は、クラスタのフリートホスト プロジェクトの名前に置き換えます。Connect Agent のバージョンをアップグレードするために、クラスタをバージョン 1.9.3 以降またはバージョン 1.10.1 以降に更新します。 | 
  
    | ネットワーキング | 1.10, 1.11, 1.12, 1.13 | Cisco ACI は Direct Server Return(DSR)と連動しないSeesaw は DSR モードで動作します。デフォルトでは、data-plane IP の学習が原因で Cisco ACI では機能しません。 
 回避策: この問題を回避するには、Seesaw IP アドレスを Cisco Application Policy Infrastructure Controller(APIC)の L4-L7 仮想 IP として追加し、IP の学習を無効にします。 [Tenant] > [Application Profiles] > [Application EPGs] または [uSeg EPGs] に移動すると、L4-L7 仮想 IP オプションを構成できます。IP の学習の無効化に失敗すると、Cisco API ファブリック内の異なるロケーション間で IP エンドポイントでフラッピングが発生します。 | 
  
    | VMware | 1.10, 1.11, 1.12, 1.13 | vSphere 7.0 Update 3 の問題VMware は最近、次の vSphere 7.0 Update 3 リリースで重大な問題を確認しました。 
        vSphere ESXi 7.0 Update 3(ビルド 18644231)vSphere ESXi 7.0 Update 3a(ビルド 18825058)vSphere ESXi 7.0 Update 3b(ビルド 18905247)vSphere vCenter 7.0 Update 3b (build 18901211) 
 回避策: VMWare はその後、これらのリリースを削除しました。ESXi と vCenter Server を新しいバージョンにアップグレードする必要があります。 | 
  
    | オペレーティング システム | 1.10, 1.11, 1.12, 1.13 | COS ノードで実行されている Pod に emptyDir ボリュームを execとしてマウントできないContainer-Optimized OS(COS)イメージを使用するノードで動作する Pod で、emptyDir ボリュームを execとしてマウントできません。noexecとしてマウントすると、「exec user
      process caused: permission denied」というエラー メッセージが表示されます。たとえば、次のテスト Pod をデプロイすると、次のエラー メッセージが表示されます。 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: test
spec:
  containers:
  - args:
    - sleep
    - "5000"
    image: gcr.io/google-containers/busybox:latest
    name: test
    volumeMounts:
      - name: test-volume
        mountPath: /test-volume
    resources:
      limits:
        cpu: 200m
        memory: 512Mi
  dnsPolicy: ClusterFirst
  restartPolicy: Always
  volumes:
    - emptyDir: {}
      name: test-volume
テスト Pod で mount | grep test-volumeを実行すると、noexec オプションが表示されます。 
/dev/sda1 on /test-volume type ext4 (rw,nosuid,nodev,noexec,relatime,commit=30)
 
 回避策: 回避策を表示するDaemonSet リソースを適用します。たとえば、以下のようになります。 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fix-cos-noexec
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fix-cos-noexec
  template:
    metadata:
      labels:
        app: fix-cos-noexec
    spec:
      hostIPC: true
      hostPID: true
      containers:
      - name: fix-cos-noexec
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          set -ex
          while true; do
            if ! $(nsenter -a -t 1 findmnt -l | grep -qe "^/var/lib/kubelet\s"); then
              echo "remounting /var/lib/kubelet with exec"
              nsenter -a -t 1 mount --bind /var/lib/kubelet /var/lib/kubelet
              nsenter -a -t 1 mount -o remount,exec /var/lib/kubelet
            fi
            sleep 3600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: /
 | 
  
    | アップグレード、更新 | 1.10, 1.11, 1.12, 1.13 | ノードプールで自動スケーリングが無効になると、クラスタ ノードプールのレプリカの更新が機能しないノードプールで自動スケーリングを有効にしてから無効にすると、ノードプールのレプリカが更新されません。 
 回避策: 対応するノードプールのマシンデプロイから cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-sizeアノテーションとcluster.x-k8s.io/cluster-api-autoscaler-node-group-min-sizeアノテーションを削除します。 | 
  
    | ロギングとモニタリング | 1.11, 1.12, 1.13 | Windows モニタリング ダッシュボードに Linux クラスタからのデータが表示されるバージョン 1.11 以降では、すぐに使えるモニタリング ダッシュボード(Windows Pod ステータス ダッシュボードと Windows ノード ステータス ダッシュボード)に Linux クラスタからのデータも表示されます。これは、Windows ノードと Pod の指標が Linux クラスタで公開されるためです。 | 
    
  
    | ロギングとモニタリング | 1.10、1.11、1.12 | 定数 CrashLoopBackOff 内の stackdriver-log-forwarderGoogle Distributed Cloud バージョン 1.10、1.11、1.12 の場合、ディスクでバッファリングされたログが破損していると、stackdriver-log-forwarderDaemonSet でCrashLoopBackOffエラーが発生することがあります。 
 回避策: この問題を軽減するには、ノード上のバッファログをクリーンアップする必要があります。 
        予期しない動作を防ぐには、stackdriver-log-forwarderをスケールダウンします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n kube-system patch daemonset stackdriver-log-forwarder -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'USER_CLUSTER_KUBECONFIG は、ユーザー クラスタの kubeconfig ファイルのパスに置き換えます。クリーンアップした DaemonSet をデプロイして、壊れたチャンクをクリーンアップします。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    -n kube-system -f - << EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit-cleanup
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: fluent-bit-cleanup
  template:
    metadata:
      labels:
        app: fluent-bit-cleanup
    spec:
      containers:
      - name: fluent-bit-cleanup
        image: debian:10-slim
        command: ["bash", "-c"]
        args:
        - |
          rm -rf /var/log/fluent-bit-buffers/
          echo "Fluent Bit local buffer is cleaned up."
          sleep 3600
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        securityContext:
          privileged: true
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: node-role.gke.io/observability
        effect: NoSchedule
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
EOFクリーンアップの DaemonSet がすべてのチャンクをクリーンアップしたことを確認するには、次のコマンドを実行します。2 つのコマンドの出力で、クラスタ内のノード数が同じになるはずです。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  logs -n kube-system -l app=fluent-bit-cleanup | grep "cleaned up" | wc -l
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system get pods -l app=fluent-bit-cleanup --no-headers | wc -lクリーンアップの DaemonSet を削除します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system delete ds fluent-bit-cleanupstackdriver-log-forwarderを再開します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
  -n kube-system patch daemonset stackdriver-log-forwarder --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]' | 
    
  
    | ロギングとモニタリング | 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16 | stackdriver-log-forwarderが Cloud Logging にログを送信しない
クラスタからの Cloud Logging にログが表示されず、ログに次のエラーが見つかった場合: 2023-06-02T10:53:40.444017427Z [2023/06/02 10:53:40] [error] [input chunk] chunk 1-1685703077.747168499.flb would exceed total limit size in plugin stackdriver.0
2023-06-02T10:53:40.444028047Z [2023/06/02 10:53:40] [error] [input chunk] no available chunk
      ログ入力レートがロギング エージェントの上限を超えている可能性があります。これにより、stackdriver-log-forwarderがログを送信しなくなります。この問題は、すべての Google Distributed Cloud バージョンで発生します。回避策: この問題を軽減するには、Logging エージェントのリソース上限を増やす必要があります。 
        stackdriverリソースを編集用に開きます。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system edit stackdriver stackdriverstackdriver-log-forwarderの CPU リクエストを増やすには、次のresourceAttrOverrideセクションをstackdriverマニフェストに追加します。spec:
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder:
      limits:
        cpu: 1200m
        memory: 600Mi
      requests:
        cpu: 600m
        memory: 600Mi編集したリソースは、次のようになります。spec:
  anthosDistribution: on-prem
  clusterLocation: us-west1-a
  clusterName: my-cluster
  enableStackdriverForApplications: true
  gcpServiceAccountSecretName: ...
  optimizedMetrics: true
  portable: true
  projectID: my-project-191923
  proxyConfigSecretName: ...
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder:
      limits:
        cpu: 1200m
        memory: 600Mi
      requests:
        cpu: 600m
        memory: 600Mi変更を保存し、テキスト エディタを終了します。変更が有効になっていることを確認するには、次のコマンドを実行します。kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
    --namespace kube-system get daemonset stackdriver-log-forwarder -o yaml \
    | grep "cpu: 1200m"変更が有効になっている場合は、このコマンドでcpu: 1200mが検出されます。 | 
  
    | セキュリティ | 1.13 | NodeReady 後に Kubelet サービスは一時的に利用できなくなるノードの準備ができても kubelet サーバー証明書の準備ができていない期間が少しあります。この 10 秒間は kubectl execとkubectl logsを使用できません。これは、新しいサーバー証明書の承認者が、更新された有効なノードの IP を確認するのに時間がかかるためです。 この問題は kubelet サーバー証明書にのみ影響します。Pod のスケジューリングには影響しません。 | 
  
  
    | アップグレード、更新 | 1.12 | 部分的な管理クラスタのアップグレードで、後のユーザー クラスタのアップグレードがブロックされないユーザー クラスタのアップグレードが次のエラーで失敗します。 
.LBKind in body is required (Check the status of OnPremUserCluster 'cl-stg-gdl-gke-onprem-mgmt/cl-stg-gdl' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
 管理クラスタが完全にアップグレードされておらず、ステータス バージョンがまだ 1.10 になっています。1.12 へのユーザー クラスタのアップグレードは、プリフライト チェックではブロックされませんが、バージョン スキューの問題で失敗します。 
 回避策: 管理クラスタを 1.11 にアップグレードしてから、ユーザー クラスタを 1.12 にアップグレードします。 | 
  
  
    | ストレージ | 1.10.0-1.10.5, 1.11.0-1.11.2, 1.12.0 | データストアで不足している空き容量が正しく報告されないgkectl diagnose clusterコマンドが次のエラーで失敗します。
 
Checking VSphere Datastore FreeSpace...FAILURE
    Reason: vCenter datastore: [DATASTORE_NAME] insufficient FreeSpace, requires at least [NUMBER] GB
データストアの空き容量の検証は、既存のクラスタ ノードプールに使用しないでください。この検証は gkectl diagnose clusterに誤って追加されたものです。 
 回避策: このエラー メッセージは無視して構いません。--skip-validation-infraを使用して検証をスキップできます。 | 
  
    | オペレーション、ネットワーキング | 1.11、1.12.0~1.12.1 | 管理クラスタが MetalLB ロードバランサの構成で設定されていると、新しいユーザー クラスタを追加できない場合があります。 ユーザー クラスタの削除プロセスがなんらかの理由で停止し、その結果、MatalLB ConfigMap が無効になる場合があります。この状態では新しいユーザー クラスタを追加できません。 
 回避策: ユーザー クラスタを強制的に削除できます。 | 
  
  
    | インストール、オペレーティング システム | 1.10, 1.11, 1.12, 1.13 | ユーザー クラスタに Container-Optimized OS(COS)を使用すると失敗する管理クラスタで osImageTypeがcosを使用している場合、管理クラスタを作成してからユーザー クラスタを作成するまでの間にgkectl check-configを実行すると、次のエラーで処理が失敗します。 
Failed to create the test VMs: VM failed to get IP addresses on the network.
 デフォルトでは、ユーザー クラスタ check-config用に作成されたテスト VM は管理クラスタと同じosImageTypeを使用します。現在、テスト VM は COS と互換性がありません。 
 回避策: gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config
      USER_CLUSTER_CONFIG --fastを使用して、テスト VM を作成するスロー プリフライト チェックを回避します。
 | 
  
    | ロギングとモニタリング | 1.12.0~1.12.1 | 管理クラスタの Grafana がユーザー クラスタに到達できないこの問題は、管理クラスタで Grafana を使用し、Google Distributed Cloud バージョン 1.12.0 と 1.12.1 でユーザー クラスタをモニタリングしているユーザーに影響します。これは、ユーザー クラスタの pushprox-client 証明書と管理クラスタの pushprox-server の許可リストの不一致が原因です。この症状は、次のようなエラーログが出力されるユーザー クラスタの pushprox-client で発生します。 
level=error ts=2022-08-02T13:34:49.41999813Z caller=client.go:166 msg="Error reading request:" err="invalid method \"RBAC:\""
 
 回避策: 回避策を表示する次の操作を行います。 
          管理クラスタの kube-system Namespace で monitoring-operator の Deployment をスケールダウンします。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --namespace kube-system scale deploy monitoring-operator \
    --replicas=0管理クラスタの kube-system 名前空間で pushprox-server-rbac-proxy-configConfigMap を編集します。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --namespace kube-system edit cm pushprox-server-rbac-proxy-configexternal-pushprox-server-auth-proxyリスナーのprincipals行を見つけて、pushprox-client.metrics-consumers.kube-system.cluster.からkube-system部分文字列を削除し、すべてのユーザー クラスタのprincipal_nameを修正します。新しい構成は次のようになります。
permissions:
- or_rules:
    rules:
    - header: { name: ":path", exact_match: "/poll" }
    - header: { name: ":path", exact_match: "/push" }
principals: [{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster.local"}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster."}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.cluster."}}}]
管理クラスタで pushprox-serverDeployment を再起動し、影響を受けるユーザー クラスタでpushprox-clientDeployment を再起動します。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-server
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-client上記の手順で問題を解決できます。問題が修正された 1.12.2 以降にクラスタがアップグレードされたら、管理クラスタの kube-system monitoring-operator をスケールアップして、パイプラインを再度管理できるようにします。kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system scale deploy monitoring-operator --replicas=1 | 
  
  
    | その他 | 1.11.3 | gkectl repair admin-masterで、復元に使用する VM テンプレートがない
gkectl repair admin-masterコマンドが次のエラーで失敗します。
 
Failed to repair: failed to select the template: no VM templates is available for repairing the admin master (check if the admin cluster version >= 1.4.0 or contact support
 管理コントロール プレーン VM の名前の末尾の文字が t、m、p、lである場合、gkectl repair admin-masterは、管理コントロール プレーン VM の修復に使用する VM テンプレートを取得できません。 
 回避策: --skip-validationを使用して、コマンドを再実行します。
 | 
  
    | ロギングとモニタリング | 1.11、1.12、1.13、1.14、1.15、1.16 | 権限が拒否されたため Cloud Audit Logs が失敗する
Cloud Audit Logs には、現在 GKE Hub を使用しているユーザー クラスタに対してのみ自動的に実行される特別な権限設定が必要です。管理クラスタに必要な権限が付与されるように、Cloud Audit Logs には、管理クラスタと同じプロジェクト ID とサービス アカウントを使用するユーザー クラスタを少なくとも 1 つ設定することをおすすめします。 ただし、管理クラスタがユーザー クラスタとは異なるプロジェクト ID またはサービス アカウントを使用している場合、管理クラスタの監査ログは Google Cloudに挿入されません。この状況になると、管理クラスタの audit-proxyPod での一連のPermission Deniedエラーが発生します。 回避策: 回避策を表示するこの問題を解決するには、cloudauditloggingHub 機能を操作して権限を設定します。 
          まず、プロジェクトで Cloud Audit Logs の許可リストに登録されている既存のサービス アカウントを確認します。curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditloggingレスポンスに応じて、次のいずれかを行います。
404 Not_foundエラーが発生した場合、このプロジェクト ID の許可リストに登録されたサービス アカウントがないことを意味します。cloudauditloggingHub 機能を有効にすることで、サービス アカウントを許可リストに登録できます。curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features?feature_id=cloudauditlogging -d \
    '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'"code":
              "OK"を指定した"lifecycleState": "ENABLED"を含む機能仕様と、allowlistedServiceAccountsのサービス アカウントのリストが返された場合、このプロジェクトで許可されている既存のサービス アカウントが存在することを意味しています。クラスタ内でこのリストのサービス アカウントを使用するか、許可リストに新しいサービス アカウントを追加できます。curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging?update_mask=spec.cloudauditlogging.allowlistedServiceAccounts -d \
    '{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'"code":
              "FAILED"を指定した"lifecycleState": "ENABLED"を含む機能仕様が返された場合は、権限の設定が失敗したことを意味します。レスポンスのdescriptionフィールドで問題を解決するか、現在の許可リストをバックアップして cloudauditlogging Hub 機能を削除し、このセクションのステップ 1 の手順で再度有効にします。cloudauditloggingHub 機能は、次の方法で削除できます。curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging
 上記のコマンドで: | 
  
    | オペレーション、セキュリティ | 1.11 | gkectl diagnose証明書チェックの失敗
ワークステーションがユーザー クラスタのワーカーノードにアクセスできない場合、gkectl diagnoseの実行時に次のエラーが発生します。 
Checking user cluster certificates...FAILURE
    Reason: 3 user cluster certificates error(s).
    Unhealthy Resources:
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
ワークステーションが管理クラスタのワーカーノードまたは管理クラスタのワーカーノードにアクセスできない場合、gkectl diagnoseを実行すると次のエラーが発生します。 
Checking admin cluster certificates...FAILURE
    Reason: 3 admin cluster certificates error(s).
    Unhealthy Resources:
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
    Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
 回避策: このメッセージは無視してかまいません。 | 
  
  
    | オペレーティング システム | 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 | /var/log/audit/が VM のディスク容量を占有している
/var/log/audit/が監査ログでいっぱいになっています。ディスクの使用量を確認するには、sudo du -h -d 1 /var/log/auditを実行します。
 管理ワークステーションの特定の gkectlコマンド(gkectl diagnose snapshotなど)は、ディスク使用量に影響します。 Google Distributed Cloud v1.8 以降では、Ubuntu イメージが CIS レベル 2 のベンチマークで強化されています。コンプライアンス ルールの 1 つである「4.1.2.2 監査ログが自動的に削除されないことを確認する」によって、auditd 設定 max_log_file_action = keep_logsが保証されます。これにより、すべての監査ルールがディスクに保持されます。 
 回避策: 回避策を表示する管理ワークステーション 管理ワークステーションの場合、auditd の設定を手動で変更してログを自動的にローテーションしてから、auditd サービスを再起動できます。 sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
systemctl restart auditd 前述の設定では、auditd が 250 個を超えるファイル(それぞれ 8M)を生成すると、auditd は自動的にログをローテーションします。 クラスタノード クラスタノードの場合は、1.11.5+、1.12.4+、1.13.2+、または 1.14+ にアップグレードします。これらのバージョンにまだアップグレードできない場合は、次の DaemonSet をクラスタに適用します。 apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: change-auditd-log-action
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: change-auditd-log-action
  template:
    metadata:
      labels:
        app: change-auditd-log-action
    spec:
      hostIPC: true
      hostPID: true
      containers:
      - name: update-audit-rule
        image: ubuntu
        command: ["chroot", "/host", "bash", "-c"]
        args:
        - |
          while true; do
            if $(grep -q "max_log_file_action = keep_logs" /etc/audit/auditd.conf); then
              echo "updating auditd max_log_file_action to rotate with a max of 250 files"
              sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
              sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
              echo "restarting auditd"
              systemctl restart auditd
            else
              echo "auditd setting is expected, skip update"
            fi
            sleep 600
          done
        volumeMounts:
        - name: host
          mountPath: /host
        securityContext:
          privileged: true
      volumes:
      - name: host
        hostPath:
          path: /この auditd 構成を変更すると、CIS レベル 2 のルール「4.1.2.2  監査ログが自動的に削除されないことを確認する」に違反するので、注意してください。 | 
  
  
    | ネットワーキング | 1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 | NetworkGatewayGroupフローティング IP がノードアドレスと競合する
次の検証 Webhook エラーのため、ユーザーが NetworkGatewayGroupオブジェクトを作成または更新できません。 
[1] admission webhook "vnetworkgatewaygroup.kb.io" denied the request: NetworkGatewayGroup.networking.gke.io "default" is invalid: [Spec.FloatingIPs: Invalid value: "10.0.0.100": IP address conflicts with node address with name: "my-node-name"
 影響を受けるバージョンでは、kubelet がノードに割り当てられたフローティング IP アドレスに誤ってバインドされ、node.status.addressesでノードアドレスとして報告される可能性があります。検証 Webhook は、NetworkGatewayGroupフローティング IP アドレスをクラスタ内のすべてのnode.status.addressesと照合し、競合とみなします。 
 回避策: NetworkGatewayGroupオブジェクトの作成または更新が失敗しているクラスタで、ANG 検証 Webhook を一時的に無効にして変更内容を送信します。
 
        最後に復元できるように Webhook 構成を保存します。kubectl -n kube-system get validatingwebhookconfiguration \
    ang-validating-webhook-configuration -o yaml > webhook-config.yamlWebhook 構成を編集します。kubectl -n kube-system edit validatingwebhookconfiguration \
    ang-validating-webhook-configurationWebhook 構成リストから vnetworkgatewaygroup.kb.io項目を削除して終了し、変更を適用します。NetworkGatewayGroupオブジェクトを作成または編集します。元の Webhook 構成を再適用します。kubectl -n kube-system apply -f webhook-config.yaml | 
  
    | インストール、アップグレード、更新 | 1.10.0-1.10.2 | 管理クラスタの作成またはアップグレードのタイムアウト管理クラスタのアップグレード中に、管理コントロール プレーン VM の作成が停止することがあります。管理コントロール プレーン VM は起動時に無限待機ループに入り、/var/log/cloud-init-output.logファイルに次のような無限ループエラーが表示されます。 
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ head -n 1
+++ grep -v 192.168.231.1
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
++ echo
+ '[' -n '' ']'
+ sleep 1
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
+++ grep -v 192.168.231.1
+++ head -n 1
++ echo
+ '[' -n '' ']'
+ sleep 1
これは、Google Distributed Cloud が起動スクリプトでノード IP アドレスを取得しようとすると、grep -v
      ADMIN_CONTROL_PLANE_VIPを使用して、NIC にも割り当て可能な管理クラスタ コントロール プレーン VIP をスキップするためです。ただし、コマンドは、コントロール プレーン VIP の接頭辞を持つ IP アドレスもスキップするため、起動スクリプトがハングアップします。 たとえば、管理クラスタのコントロール プレーン VIP が 192.168.1.25 であるとします。管理クラスタのコントロール プレーン VM の IP アドレスに同じ接頭辞(たとえば、192.168.1.254)がある場合、コントロール プレーン VM は作成中に停止します。この問題は、ブロードキャスト アドレスにコントロール プレーン VIP と同じ接頭辞(192.168.1.255など)がある場合にも発生する可能性があります。 
 回避策: 
        管理クラスタ作成タイムアウトがブロードキャスト IP アドレスによるものである場合は、管理クラスタのコントロール プレーン VM で次のコマンドを実行します。ip addr add ${ADMIN_CONTROL_PLANE_NODE_IP}/32 dev ens192これにより、ブロードキャスト アドレスなしの行が作成され、起動プロセスのブロックが解除されます。起動スクリプトのブロックを解除したら、次のコマンドを実行して、追加された行を削除します。ip addr del ${ADMIN_CONTROL_PLANE_NODE_IP}/32 dev ens192ただし、管理クラスタ作成のタイムアウトがコントロール プレーン VM の IP アドレスによるものである場合は、起動スクリプトのブロックを解除できません。別の IP アドレスに切り替えて再作成するか、バージョン 1.10.3 以降にアップグレードします。 | 
  
    | オペレーティング システム、アップグレード、更新 | 1.10.0-1.10.2 | COS イメージを使用した管理クラスタの状態が、管理クラスタのアップグレードまたは管理マスターの修復時に失われるCOS イメージを使用している場合、DataDisk は管理クラスタのマスターノードに正しくマウントされず、COS イメージを使用する管理クラスタの状態が、管理クラスタのアップグレードまたは管理マスターの修復時に失われます(COS イメージを使用した管理クラスタはプレビュー機能です)。 
 回避策: osImageType を ubuntu_containerd に設定して管理クラスタを再作成する osImageType を cos に設定して管理クラスタを作成した後、管理クラスタの SSH 認証鍵を取得して、管理マスターノードに SSH 接続します。df -hの結果には/dev/sdb1        98G  209M   93G
      1% /opt/dataが含まれます。lsblkの結果には-sdb1
      8:17   0  100G  0 part /opt/dataが含まれます。 | 
  
    | オペレーティング システム | 1.10 | .localドメインで、systemd-resolved が DNS ルックアップに失敗した
Google Distributed Cloud バージョン 1.10.0 のデフォルトでは、Ubuntu の名前解決は 127.0.0.53でリッスンするローカルの systemd-resolve にルーティングされます。これは、バージョン 1.10.0 で使用される Ubuntu 20.04 イメージで、/etc/resolv.confが127.0.0.53localhost DNS スタブを指す/run/systemd/resolve/stub-resolv.confにシンボリック リンクされているためです。 その結果、名前が検索ドメインとして指定されていない限り、localhost DNS 名前解決では、名前に .local接尾辞のあるアップストリーム DNS サーバー(/run/systemd/resolve/resolv.confで指定)の確認が拒否されます。 これにより、.local名の検索はすべて失敗します。たとえば、ノードの起動時に、kubeletは.local接尾辞の付いた非公開レジストリからのイメージの pull に失敗します。.local接尾辞を持つ vCenter アドレスを指定しても、管理ワークステーションでは動作しません。 
 回避策: クラスタノードのこの問題は、管理クラスタの構成ファイルとユーザー クラスタの構成ファイルで searchDomainsForDNSフィールドを指定してドメインを含めると回避できます。 現在、gkectl updateはsearchDomainsForDNSフィールドの更新をまだサポートしていません。 したがって、このフィールドをクラスタの作成前に設定していない場合は、ノードに SSH で接続し、/etc/resolv.confのシンボリック リンクを/run/systemd/resolve/stub-resolv.conf(127.0.0.53ローカルスタブを含む)から/run/systemd/resolve/resolv.conf(実際のアップストリーム DNS を指す)に変更することでローカルの systemd-resolved スタブをバイパスする必要があります。 sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf 管理ワークステーションの場合、gkeadmでは検索ドメインの指定がサポートされていないため、この問題を手動で回避する必要があります。 このソリューションは、VM の再作成では保持されません。VM が再作成されるたびに、この回避策をやり直す必要があります。 | 
  
    | インストール、オペレーティング システム | 1.10 | Docker ブリッジ IP は 172.17.0.1/16ではなく169.254.123.1/24を使用するGoogle Distributed Cloud は、--bip=169.254.123.1/24を使用する Docker ブリッジの IP アドレス専用のサブネットを指定します。これにより、デフォルトの172.17.0.1/16サブネットは予約されません。ただし、バージョン 1.10.0 では、Ubuntu OS イメージにバグがあり、カスタマイズされた Docker 構成が無視されています。 その結果、Docker はデフォルトの 172.17.0.1/16をブリッジ IP アドレス サブネットとして選択します。この IP アドレス範囲内にすでに実行中のワークロードがある場合、IP アドレスの競合が発生する可能性があります。 
 回避策: この問題を回避するには、次の systemd 構成ファイルを dockerd 用に名前を変更した後、サービスを再起動する必要があります。 sudo mv /etc/systemd/system/docker.service.d/50-cloudimg-settings.cfg \
    /etc/systemd/system/docker.service.d/50-cloudimg-settings.conf
sudo systemctl daemon-reload
sudo systemctl restart dockerDocker が正しいブリッジ IP アドレスを選択していることを確認します。 ip a | grep docker0 注: VM を再作成すると、この解決策は無効になります。VM が再作成されるたびに、この回避策を再適用する必要があります。 | 
  
  
    | アップグレード、更新 | 1.11 | Stackdriver の準備状況によって 1.11 へのアップグレードがブロックされるGoogle Distributed Cloud バージョン 1.11.0 では、ロギングとモニタリングに関連するカスタム リソースの定義が変更されています。 
        stackdriverカスタム リソースのグループ名がaddons.sigs.k8s.ioからaddons.gke.ioに変更されました。monitoringおよびmetricsserverカスタム リソースのグループ名がaddons.k8s.ioからaddons.gke.ioに変更されました。上記のリソースの仕様では、そのスキーマに対する検証が開始します。特に、stackdriverカスタム リソースの resourceAttrOverride と storageSizeOverride の仕様では、CPU、メモリ、ストレージ サイズのリクエストと上限の値に文字列型を設定する必要があります。 グループ名の変更は、Kubernetes 1.22 の CustomResourceDefinition の更新に準拠するために行われました。 影響を受けるカスタム リソースを適用または編集する追加のロジックがない場合、対応は必要ありません。Google Distributed Cloud のアップグレード プロセスでは、影響を受けるリソースの移行が行われ、グループ名の変更後も既存の仕様が保持されます。 ただし、影響を受けるリソースを適用または編集するロジックを実行する場合は、特別な注意が必要です。まず、マニフェスト ファイルで新しいグループ名を使用して参照する必要があります。例: apiVersion: addons.gke.io/v1alpha1  ## instead of `addons.sigs.k8s.io/v1alpha1`
kind: Stackdriver 次に、resourceAttrOverrideとstorageSizeOverrideの仕様の値が文字列型であることを確認します。例: spec:
  resourceAttrOverride:
    stackdriver-log-forwarder/stackdriver-log-forwarder
      limits:
        cpu: 1000m # or "1"
        # cpu: 1 # integer value like this would not work
        memory: 3000Miそうしないと、適用と編集が有効にならないため、ロギングとモニタリングのコンポーネントで予期しないステータスが発生する可能性があります。症状としては、次のものがあります。 
        onprem-user-cluster-controllerの調整エラーログ。例:potential reconciliation error: Apply bundle components failed, requeue after 10s, error: failed to apply addon components: failed to apply bundle objects from stackdriver-operator-addon 1.11.2-gke.53 to cluster my-cluster: failed to create typed live object: .spec.resourceAttrOverride.stackdriver-log-forwarder/stackdriver-log-forwarder.limits.cpu: expected string, got &value.valueUnstructured{Value:1}kubectl edit stackdriver stackdriverの失敗。例:Error from server (NotFound): stackdrivers.addons.gke.io "stackdriver" not found アップグレード前に Stackdriver CR 仕様でサポートされていないタイプが存在していた場合、このエラーが発生します。回避策として、古いグループ名 kubectl edit stackdrivers.addons.sigs.k8s.io stackdriverの Stackdriver CR を手動で編集して、次の操作を行います。 
        その後、アップグレード プロセスを再開または再起動します。リソース リクエストと上限を文字列型に変更します。addons.gke.io/migrated-and-deprecated: trueアノテーションが存在する場合は削除します。 | 
  
  
    | オペレーティング システム | 1.7 以降 | ホストの正常でないシャットダウンで VM が移行された場合、COS VM の IP が表示されないESXi サーバーに障害が発生したときに、サーバーで vCenter HA 機能が有効になっていると、障害のある ESXi サーバー内のすべての VM が vMotion をトリガーし、別の正常な ESXi サーバーに移行されます。移行された COS VM の IP は失われます。 回避策: VM を再起動する | 
  
  
    | ネットワーキング | 1.14.7 より前のすべてのバージョン、1.15.0~1.15.3、1.16.0 | Seesaw から送信された GARP 応答でターゲット IP が設定されていないSeesaw が 20 秒ごとに送信する定期的な GARP(Gratuitous ARP)で、ARP ヘッダーにターゲット IP が設定されません。一部のネットワークは、このようなパケットを受け入れない場合があります(Cisco ACI など)。(VRRP パケットのドロップによる)スプリット ブレインが復元された後、サービスが長く停止する可能性があります。 回避策: いずれかの Seesaw VM で sudo seesaw -c failoverを実行して、Seesaw フェイルオーバーをトリガーします。これによってトラフィックが復元されます。 | 
  
  
    | オペレーティング システム | 1.16、1.28.0~1.28.200 | Kubelet に、「/etc/kubernetes/manifests」がワーカーノードに存在しないことを示すログが大量に表示されるワーカーノードに staticPodPath が誤って設定されています。 回避策: /etc/kubernetes/manifests フォルダを手動で作成します。 |