Atualizando o segredo de extração global em clusters do Satellite

Depois de configurar um cluster Satellite, você pode atualizar o segredo de extração global no seu cluster para extrair de um registro de contêiner privado que não seja quay.io ou icr.io. Por exemplo, talvez você queira extrair imagens do Cloud Pak Entitled Registry (cp.icr.io) ou do seu próprio registro particular.

Há duas maneiras de atualizar o segredo de pull global em clusters do Satellite.

Atualizando o segredo de pull global.
Use essa abordagem se você tiver um ou poucos clusters para manter.. Você deve repetir essas etapas para cada cluster no qual deseja aplicar o segredo.
Atualizando o segredo de extração global usando Satellite config.
Use essa abordagem se você manter vários clusters e grupos de clusters do Satellite. Usando a configuração do Satellite, é possível aplicar as mudanças secretas em seus clusters e grupos de clusters do Satellite.

Atualização do segredo global de pull

Conclua as etapas a seguir para atualizar o segredo de extração global em seu cluster do Satellite.

  1. Crie um segredo que tenha as credenciais para o registro que deseja usar.
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    Exemplo de comando create secret para usar o Cloud Pak Entitled Registry
    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. Crie um DaemonSet para aplicar o segredo em todos os nós do trabalhador
    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. Verifique se os pods estão em execução.
    oc get daemonset -n kube-system update-docker-config
    

Atualizando o segredo de extração global usando a configuração do Satellite

Conclua as etapas a seguir para usar a configuração do Satellite para aplicar o segredo de extração global em seus clusters e grupos de clusters do Satellite.

  1. Certifique-se de ativar a configuração Satellite.

  2. Inclua seus clusters em grupos de clusters..

  3. Crie um segredo em um dos clusters do Satellite. Observe que esse segredo será excluído mais tarde

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

    Exemplo de comando create secret para usar o Cloud Pak Entitled Registry

    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  4. Obtenha os detalhes de seu segredo. Copie e salve a seção base64 dockerconfigjson

    oc get secret docker-auth-secret -o yaml
    
  5. Excluir o segredo.

    oc delete secret docker-auth-secret -n kube-system
    
  6. Crie um arquivo de configuração chamado secret.yaml que tenha as suas credenciais de registro Cole a seção base64 codificada dockerconfigjson que você salvou na etapa anterior.

    kind: Secret
    apiVersion: v1
    metadata:
      name: docker-auth-secret
      namespace: kube-system
    data:
      .dockerconfigjson: >-
        BASE64-ENCODED-SECRET
    type: kubernetes.io/dockerconfigjson
    
  7. Crie uma configuração Satellite. Na opção --data-location, especifique a região Gerenciado de de seu Local.

    ibmcloud sat config create --data-location wdc --name my-config
    
  8. Inclua uma versão em sua configuração Especifique o caminho de arquivo para o secret.yaml criado anteriormente.

    ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
    
  9. Crie uma assinatura para aplicar o DaemonSet a um grupo de clusters

    ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
    
  10. Salve o seguinte DaemonSet em um arquivo chamado 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. Crie uma configuração Satellite. Na opção --data-location, especifique a região Gerenciado de de seu Local, por exemplo, wdc.

    ibmcloud sat config create --data-location wdc --name my-ds
    
  12. Inclua uma versão em sua configuração Especifique o caminho de arquivo para o ds.yaml criado anteriormente.

    ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
    
  13. Crie uma assinatura para aplicar o DaemonSet a um grupo de clusters

    ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
    
  14. Verifique o segredo e DaemonSet sejam implementados em seus clusters.

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

Você também pode visualizar e gerenciar suas configurações e assinaturas no console Satellite.