|
| 1 | +:_mod-docs-content-type: PROCEDURE |
| 2 | +[id="updating-shiftstack-credentials_{context}"] |
| 3 | + |
| 4 | += Updating {OpenShiftShort} on {OpenStackShort} credentials and recovering the image-registry operator |
| 5 | + |
| 6 | +[role="_abstract"] |
| 7 | +After {rhos_long} adoption, any {rhocp_long} clusters that were deployed on {rhos_prev_long} ({OpenStackShort}) 17.1 with installer-provisioned infrastructure still reference the {OpenStackPreviousInstaller} keystone endpoint in their cloud credentials. To authenticate with keystone and avoid timeouts, update the credentials and image-registry operator. |
| 8 | + |
| 9 | +[IMPORTANT] |
| 10 | +Run all commands against the guest {OpenShiftShort} cluster that is running on {OpenStackShort} VMs, not the underlying {rhos_acro} host cluster. |
| 11 | + |
| 12 | +.Procedure |
| 13 | + |
| 14 | +. Verify the stale secret on the {OpenShiftShort} on {OpenStackShort} cluster: |
| 15 | ++ |
| 16 | +---- |
| 17 | +$ oc get secret openstack-credentials -n kube-system \ |
| 18 | + -o jsonpath='{.data.clouds\.yaml}' | base64 -d | grep auth_url |
| 19 | +---- |
| 20 | ++ |
| 21 | +The output shows the {OpenStackPreviousInstaller} endpoint that can no longer be used after adoption. For example, https://overcloud.redhat.local:13000 or http://<tripleo-vip>:5000. |
| 22 | + |
| 23 | +. Check if the new {rhos_acro} keystone is reachable from the {OpenShiftShort} on {OpenStackShort} cluster nodes: |
| 24 | ++ |
| 25 | +---- |
| 26 | +$ RHOSO_AUTH_URL="http://keystone-public-openstack.apps.<host-cluster-domain>" |
| 27 | +$ oc debug node/$(oc get nodes -o jsonpath='{.items[0].metadata.name}') \ |
| 28 | + -- chroot /host curl -sk -m 10 "${RHOSO_AUTH_URL}/v3/" |
| 29 | +---- |
| 30 | ++ |
| 31 | +[IMPORTANT] |
| 32 | +If the command returns a JSON response with keystone version information, proceed to step 3. If the command times out, the {rhos_acro} endpoint is not reachable from the {OpenShiftShort} on {OpenStackShort} cluster's network. You can still proceed with steps 3-5 because the credential update and image-registry fix will work regardless of {OpenStackShort} reachability. However, operators such as OCCM and CSI will continue logging timeout errors until the {rhos_acro} endpoint becomes reachable from the guest nodes. |
| 33 | + |
| 34 | +. Update the source secret with the {rhos_acro} endpoint: |
| 35 | ++ |
| 36 | +[NOTE] |
| 37 | +The {OpenShiftShort} on {OpenStackShort} user, password, and project are preserved after adoption. Adoption uses the same keystone database as the one used in {rhos_prev_long} ({OpenStackShort}) 17.1. Only the `auth_url` needs to change. If {rhos_acro} uses HTTPS with a different certificate authority, update the `cacert` path too. |
| 38 | ++ |
| 39 | +---- |
| 40 | +$ oc get secret openstack-credentials -n kube-system \ |
| 41 | + -o jsonpath='{.data.clouds\.yaml}' | base64 -d > /tmp/clouds.yaml |
| 42 | +# Edit /tmp/clouds.yaml: change auth_url to the RHOSO keystone endpoint |
| 43 | +$ B64=$(base64 < /tmp/clouds.yaml | tr -d '\n') |
| 44 | +$ oc patch secret openstack-credentials -n kube-system \ |
| 45 | + -p "{\"data\":{\"clouds.yaml\":\"${B64}\"}}" |
| 46 | +---- |
| 47 | + |
| 48 | +. Wait for Cloud Credential Operator (CCO) to propagate the source secret to all namespace-specific secrets, and then verify that the new {rhos_acro} endpoint is reachable: |
| 49 | ++ |
| 50 | +---- |
| 51 | +$ oc get secret installer-cloud-credentials -n openshift-image-registry \ |
| 52 | + -o jsonpath='{.data.clouds\.yaml}' | base64 -d | grep auth_url |
| 53 | +---- |
| 54 | ++ |
| 55 | +[NOTE] |
| 56 | +The output should show the new {rhos_acro} endpoint in the `auth_url` field. If the output still shows the previous endpoint after a few minutes, check that the CCO pod is running and that the CCO mode is Passthrough: |
| 57 | ++ |
| 58 | +---- |
| 59 | +$ oc get pods -n openshift-cloud-credential-operator |
| 60 | +$ oc get cloudcredential cluster -o jsonpath='{.spec.credentialsMode}' |
| 61 | +---- |
| 62 | ++ |
| 63 | +If the CCO is healthy but not propagating, patch each namespace secret directly by using the following command: |
| 64 | ++ |
| 65 | +---- |
| 66 | +$ oc patch secret openstack-credentials -n kube-system \ |
| 67 | + -p "{\"data\":{\"clouds.yaml\":\"${B64}\"}}" |
| 68 | +---- |
| 69 | + |
| 70 | +. Switch the image-registry storage from Swift to emptyDir: |
| 71 | ++ |
| 72 | +---- |
| 73 | +$ oc patch configs.imageregistry.operator.openshift.io cluster \ |
| 74 | + --type json -p '[{"op":"replace","path":"/spec/storage","value":{"emptyDir":{}}}]' |
| 75 | +---- |
| 76 | ++ |
| 77 | +[WARNING] |
| 78 | +emptyDir is non-persistent. Registry images are lost when the pod restarts. For production, configure PVC-backed storage instead. |
| 79 | ++ |
| 80 | +emptyDir does not require working {OpenStackShort} credentials. The image-registry operator only calls the {OpenStackShort} API when Swift is the configured back end. This step works regardless of whether the new {rhos_acro} keystone is reachable from the {OpenShiftShort} on {OpenStackShort} cluster node. |
| 81 | + |
| 82 | +.Verification |
| 83 | + |
| 84 | +* Verify that the credentials are pointing to the new {rhos_acro} endpoint: |
| 85 | ++ |
| 86 | +---- |
| 87 | +$ oc get co image-registry cloud-controller-manager storage machine-api |
| 88 | +---- |
| 89 | ++ |
| 90 | +Wait about 5 minutes. |
| 91 | ++ |
| 92 | +The following example shows the output if the new {rhos_acro} keystone was not reachable from the {OpenShiftShort} on {OpenStackShort} cluster nodes in step 2: |
| 93 | ++ |
| 94 | +---- |
| 95 | +NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE |
| 96 | +image-registry 4.22.0-rc.0 True False True 14m ImagePrunerDegraded: Job has reached the specified backoff limit |
| 97 | +cloud-controller-manager 4.22.0-rc.0 True False False 3d10h |
| 98 | +storage 4.22.0-rc.0 True False False 3d10h |
| 99 | +machine-api 4.22.0-rc.0 True False False 3d9h |
| 100 | +---- |
| 101 | ++ |
| 102 | +[NOTE] |
| 103 | +==== |
| 104 | +* If you completed steps 2-4 with a reachable {rhos_acro} endpoint, the timeout errors should be resolved. |
| 105 | +* The output displays an environment that is running {rhocp_long} 4.22. If you are using an earlier version of {rhocp_long}, you might see different operator states. |
| 106 | +==== |
0 commit comments