Actualización del secreto de extracción global en clústeres de Satellite

Después de configurar un clúster Satellite, puede actualizar el secreto de extracción global en su clúster para extraer desde un registro de contenedor privado que no sea quay.io o icr.io. Por ejemplo, puede que desee extraer imágenes del Cloud Pak Entitled Registry (cp.icr.io) o de su propio registro privado.

Hay dos formas de actualizar el secreto de extracción global en los clústeres de Satellite.

Actualización del secreto de extracción global.
Utilice este enfoque si tiene uno o varios clústeres para mantener. Debe repetir estos pasos para cada clúster donde desee aplicar el secreto.
Actualización del secreto de extracción global utilizando la configuración de Satellite.
Utilice este enfoque si mantiene varios clústeres y grupos de clústeres de Satellite. Utilizando la configuración de Satellite, puede aplicar los cambios secretos en los clústeres y grupos de clústeres de Satellite.

Actualización del pull secret global

Realice los pasos siguientes para actualizar el secreto de extracción global en el clúster Satellite.

  1. Cree un secreto que tenga las credenciales para el registro que desea utilizar.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    Mandato create secret de ejemplo para utilizar el registro autorizado de Cloud Pak.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. Cree un DaemonSet para aplicar el secreto en todos los nodos de trabajador.
    cat << EOF | oc create -f -
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-docker-config
      namespace: kube-system
      labels:
        app: update-docker-config
    spec:
      selector:
        matchLabels:
          name: update-docker-config
      template:
        metadata:
          labels:
            name: update-docker-config
        spec:
          initContainers:
            - command: ["/bin/sh", "-c"]
              args:
                - >
                  echo "Checking if RHEL or RHCOS host";
                  [[ -s /docker-config/.docker/config.json  ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker;
                  echo "Backing up or restoring config.json";
                  [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json;
                  echo "Merging secret with config.json";
                  /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp;
                  mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json;
                  echo "Sending signal to reload crio config";
                  pidof crio;
                  kill -1 \$(pidof crio)
              image: icr.io/ibm/alpine:latest
              imagePullPolicy: IfNotPresent
              name: updater
              resources: {}
              securityContext:
                privileged: true
              volumeMounts:
                - name: docker-auth-secret
                  mountPath: /auth
                - name: docker
                  mountPath: /docker-config
                - name: bin
                  mountPath: /host/usr/bin
                - name: lib64
                  mountPath: /lib64
          containers:
            - resources:
                requests:
                  cpu: 0.01
              image: icr.io/ibm/alpine:latest
              name: sleepforever
              command: ["/bin/sh", "-c"]
              args:
                - >
                  while true; do
                    sleep 100000;
                  done
          hostPID: true
          volumes:
            - name: docker-auth-secret
              secret:
                secretName: docker-auth-secret
            - name: docker
              hostPath:
                path: /
            - name: bin
              hostPath:
                path: /usr/bin
            - name: lib64
              hostPath:
                path: /lib64
                hostPathType: Directory
    EOF
    
  3. Compruebe que los pods se están ejecutando.
    oc get daemonset -n kube-system update-docker-config
    

Actualización del secreto de extracción global utilizando la configuración de Satellite

Realice los pasos siguientes para utilizar la configuración de Satellite para aplicar el secreto de extracción global en los clústeres y grupos de clústeres de Satellite.

  1. Asegúrese de activar Satellite config.

  2. Añada los clústeres a grupos de clústeres.

  3. Cree un secreto en uno de los clústeres de Satellite. Tenga en cuenta que este secreto se suprimirá más adelante.

    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    

    Mandato create secret de ejemplo para utilizar el registro autorizado de Cloud Pak.

    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  4. Consigue los detalles de tu secreto. Copie y guarde la sección base64 codificada dockerconfigjson.

    oc get secret docker-auth-secret -o yaml
    
  5. Suprima el secreto.

    oc delete secret docker-auth-secret -n kube-system
    
  6. Cree un archivo de configuración denominado secret.yaml que tenga sus credenciales de registro. Pegue la sección base64 codificada dockerconfigjson que ha guardado en el paso anterior.

    kind: Secret
    apiVersion: v1
    metadata:
      name: docker-auth-secret
      namespace: kube-system
    data:
      .dockerconfigjson: >-
        BASE64-ENCODED-SECRET
    type: kubernetes.io/dockerconfigjson
    
  7. Cree una configuración en Satellite. En la opción --data-location, especifique la región Gestionado desde de la ubicación.

    ibmcloud sat config create --data-location wdc --name my-config
    
  8. Añada una versión a la configuración. Especifique la vía de acceso al archivo secret.yaml que ha creado anteriormente.

    ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
    
  9. Cree una suscripción para aplicar el DaemonSet a un grupo de clústeres.

    ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
    
  10. Guarde el siguiente DaemonSet en un archivo denominado ds.yaml.

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: update-docker-config
      namespace: kube-system
      labels:
        app: update-docker-config
    spec:
      selector:
        matchLabels:
          name: update-docker-config
      template:
        metadata:
          labels:
            name: update-docker-config
        spec:
          initContainers:
            - command: ["/bin/sh", "-c"]
              args:
                - >
                  echo "Checking if RHEL or RHCOS host";
                  [[ -s /docker-config/.docker/config.json  ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker;
                  echo "Backing up or restoring config.json";
                  [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json;
                  echo "Merging secret with config.json";
                  /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp;
                  mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json;
                  echo "Sending signal to reload crio config";
                  pidof crio;
                  kill -1 \$(pidof crio)
              image: icr.io/ibm/alpine:latest
              imagePullPolicy: IfNotPresent
              name: updater
              resources: {}
              securityContext:
                privileged: true
              volumeMounts:
                - name: docker-auth-secret
                  mountPath: /auth
                - name: docker
                  mountPath: /docker-config
                - name: bin
                  mountPath: /host/usr/bin
                - name: lib64
                  mountPath: /lib64
          containers:
            - resources:
                requests:
                  cpu: 0.01
              image: icr.io/ibm/alpine:latest
              name: sleepforever
              command: ["/bin/sh", "-c"]
              args:
                - >
                  while true; do
                    sleep 100000;
                  done
          hostPID: true
          volumes:
            - name: docker-auth-secret
              secret:
                secretName: docker-auth-secret
            - name: docker
              hostPath:
                path: /
            - name: bin
              hostPath:
                path: /usr/bin
            - name: lib64
              hostPath:
                path: /lib64
                hostPathType: Directory
    
  11. Cree una configuración en Satellite. En la opción --data-location, especifique la región Gestionado desde de la ubicación, por ejemplo, wdc.

    ibmcloud sat config create --data-location wdc --name my-ds
    
  12. Añada una versión a la configuración. Especifique la vía de acceso al archivo ds.yaml que ha creado anteriormente.

    ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
    
  13. Cree una suscripción para aplicar el DaemonSet a un grupo de clústeres.

    ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
    
  14. Verifique que el secreto y DaemonSet se despliegan en los clústeres.

    oc get secret docker-auth-secret -n kube-system
    
    oc get ds update-docker-config -n kube-system
    

También puedes ver y gestionar tus configuraciones y suscripciones desde la consola Satellite.