Satellite クラスターでグローバル・プル・シークレットを更新する

Satellite クラスタをセットアップした後、 quay.io または icr.io 以外のプライベートコンテナレジストリからプルするように、クラスタのグローバルプルシークレットを更新できます。 例えば、 Cloud Pak Entitled Registry (cp.icr.io)や、あなた自身のプライベートレジストリから画像を取り出したいかもしれません。

Satellite ・クラスターでグローバル・プル・シークレットを更新するには、2 つの方法があります。

グローバル・プル・シークレットの更新
保守するクラスターが 1 つまたは少数の場合は、この方法を使用します。 シークレットを適用するクラスターごとに、これらの手順を繰り返す必要があります。
Satellite config を使用してグローバル・プル・シークレットを更新します
複数の Satellite クラスターおよびクラスター・グループを保守する場合は、この方法を使用します。 Satellite 構成を使用して、 Satellite クラスターおよびクラスター・グループ全体にシークレットの変更を適用できます。

グローバルプルシークレットの更新

Satellite クラスター内のグローバル・プル・シークレットを更新するには、以下の手順を実行します。

  1. 使用するレジストリーの資格情報を持つシークレットを作成します。
    oc create secret docker-registry docker-auth-secret \
    --docker-server=REGISTRY \
    --docker-username=USERNAME \
    --docker-password=PASSWORD \
    --namespace kube-system
    
    Cloud Pak Entitled Registry を使用するための create secret コマンドの例。
    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  2. DaemonSet を作成して、すべてのワーカー・ノードにシークレットを適用します。
    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. ポッドが動作していることを確認する。
    oc get daemonset -n kube-system update-docker-config
    

Satellite 構成を使用してグローバル・プル・シークレットを更新する

Satellite 構成を使用して、 Satellite クラスターおよびクラスター・グループ全体にグローバル・プル・シークレットを適用するには、以下の手順を実行します。

  1. Satellite を有効にしてください

  2. クラスターをクラスター・グループに追加します

  3. Satellite クラスターのいずれかにシークレットを作成します。 このシークレットは後で削除されることに注意してください。

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

    Cloud Pak Entitled Registry を使用するための create secret コマンドの例。

    oc create secret docker-registry docker-auth-secret \
    --docker-server=cp.icr.io \
    --docker-username=cp \
    --docker-password=ENTITLEMENT-KEY \
    --namespace kube-system
    
  4. 秘密の詳細を知る base64 エンコード dockerconfigjson ・セクションをコピーして保存します。

    oc get secret docker-auth-secret -o yaml
    
  5. シークレットを削除します。

    oc delete secret docker-auth-secret -n kube-system
    
  6. レジストリー資格情報を持つ secret.yaml という構成ファイルを作成します。 前のステップで保存した base64 エンコード dockerconfigjson ・セクションを貼り付けます。

    kind: Secret
    apiVersion: v1
    metadata:
      name: docker-auth-secret
      namespace: kube-system
    data:
      .dockerconfigjson: >-
        BASE64-ENCODED-SECRET
    type: kubernetes.io/dockerconfigjson
    
  7. Satellite コンフィグを作成する。 --data-location オプションで、ロケーションの 「管理元」 地域を指定します。

    ibmcloud sat config create --data-location wdc --name my-config
    
  8. 構成にバージョンを追加します。 前に作成した secret.yaml へのファイル・パスを指定します。

    ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
    
  9. DaemonSet をクラスター・グループに適用するサブスクリプションを作成します。

    ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
    
  10. 以下の DaemonSet を 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. Satellite コンフィグを作成する。 --data-location オプションで、ロケーションの 「管理元」 地域を指定します (例: wdc)。

    ibmcloud sat config create --data-location wdc --name my-ds
    
  12. 構成にバージョンを追加します。 前に作成した ds.yaml へのファイル・パスを指定します。

    ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
    
  13. DaemonSet をクラスター・グループに適用するサブスクリプションを作成します。

    ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
    
  14. シークレットと DaemonSet がクラスター全体にデプロイされていることを確認します。

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

また、 Satellite コンソールからコンフィギュレーションとサブスクリプションを表示および管理することもできます。