Upgrade to OpenShift 4.9 / Administrator Acknowledgment

OpenShift Container Platform 4.9 uses Kubernetes 1.22, which removed a significant number of deprecated v1beta1 APIs. A manual acknowledgment must be provided before the cluster can be upgraded to 4.9.

More information can be found in access.redhat.com/articles/6329921.

Upgrade to 4.9

  1. Check requests to removed APIs

    kubectl get apirequestcounts \
      --as=cluster-admin \
      -o jsonpath='{range .items[?(@.status.removedInRelease!="")]}{.status.removedInRelease}{"\t"}{.metadata.name}{"\t"}{.status.requestCount}{"\n"}{end}'

    Should print a report like the sample below. The last column is requests in the last 24 hours.

    1.22	customresourcedefinitions.v1beta1.apiextensions.k8s.io	15
    1.22	ingresses.v1beta1.extensions	619
    1.22	ingresses.v1beta1.networking.k8s.io	0

    If you see counts > 0 you can check from whom the API calls are originating.

    kubectl get apirequestcounts customresourcedefinitions.v1beta1.apiextensions.k8s.io \
      --as=cluster-admin \
      -o jsonpath='{range ..username}{$}{"\n"}{end}' \
      | sort | uniq

    Some services autodiscover supported APIs, notably kube-controller-manager (system:kube-controller-manager) and ArgoCD (system:serviceaccount:syn:argocd-application-controller). These services will show up as using deprecated APIs.

    More advanced query: Show only resources with create and update requests.

    kubectl --as=cluster-admin get apirequestcount -ojson | jq '
        .items[] |
            select(
                .status.removedInRelease == "1.22" and .status.requestCount > 0
            ) |
            {
                resource: .metadata.name,
                requests: (
                    reduce .status.last24h[] as $hour ({"requests": 0}; .requests += (
                        reduce $hour.byNode[]? as $node ({"requests": 0}; .requests += (
                            reduce $node.byUser[]? as $user ({"requests": 0}; .requests += (
                                reduce $user.byVerb[]? as $verb (0; . + (
                                    if $verb.verb == "watch" or $verb.verb == "list" or $verb.verb == "get" then
                                        0
                                    else
                                        $verb.requestCount
                                    end
                                ))
                            ))
                        ).requests)
                    ).requests)
                ).requests
            }
    '
  2. Provide the Acknowledgment

    kubectl patch cm admin-acks \
      --as=cluster-admin \
      -n openshift-config \
      --patch '{"data":{"ack-4.8-kube-1.22-api-removals-in-4.9":"true"}}' \
      --type=merge
  3. Upgrade the cluster

    Follow the steps in Update/Maintenance.