在 Satellite 集群中更新全局拉取私钥
设置 Satellite 集群后,您可以更新集群中的全局拉取私钥以从除 quay.io
或 icr.io
以外的专用容器注册表拉取。 例如,您可能希望从 Cloud Pak Entitled Registry (cp.icr.io
) 或您自己的专用注册表中提取映像。
有两种方法可更新 Satellite 集群中的全局拉取私钥。
- 更新全局拉取私钥。
- 如果要维护一个或多个集群,请使用此方法。 必须对要应用私钥的每个集群重复这些步骤。
- 使用 Satellite 配置更新全局拉取私钥。
- 如果您维护多个 Satellite 集群和集群组,请使用此方法。 通过使用 Satellite 配置,可以在 Satellite 集群和集群组中应用私钥更改。
更新全局拉动秘钥
完成以下步骤以更新 Satellite 集群中的全局拉取私钥。
- 创建包含要使用的注册表凭证的私钥。
用于使用 Cloud Pak 授权注册表的示例oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system
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
- 创建 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
- 验证 pod 是否正在运行。
oc get daemonset -n kube-system update-docker-config
使用 Satellite 配置更新全局拉取私钥
完成以下步骤以使用 Satellite 配置在 Satellite 集群和集群组中应用全局拉取私钥。
-
在其中一个 Satellite 集群中创建私钥。 请注意,稍后将删除此私钥。
oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system
用于使用 Cloud Pak 授权注册表的示例
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
-
获取私钥的详细信息。 复制并保存 base64 编码的
dockerconfigjson
部分。oc get secret docker-auth-secret -o yaml
-
删除私钥。
oc delete secret docker-auth-secret -n kube-system
-
创建具有注册表凭证的名为
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
-
创建Satellite配置。 在
--data-location
选项中,指定位置的 受管源 区域。ibmcloud sat config create --data-location wdc --name my-config
-
向配置添加版本。 指定先前创建的
secret.yaml
的文件路径。ibmcloud sat config version create --name 1 --config my-config --file-format yaml --read-config /Users/username/Desktop/secret.yaml
-
创建预订以将 DaemonSet 应用于集群组。
ibmcloud sat subscription create --name my-subscription --config my-config --group GROUP
-
将以下 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
-
创建Satellite配置。 在
--data-location
选项中,指定位置的 Managed from 区域,例如wdc
。ibmcloud sat config create --data-location wdc --name my-ds
-
向配置添加版本。 指定先前创建的
ds.yaml
的文件路径。ibmcloud sat config version create --name 1 --config my-ds --file-format yaml --read-config /Users/username/Desktop/ds.yaml
-
创建预订以将 DaemonSet 应用于集群组。
ibmcloud sat subscription create --name my-subscription --config my-ds --group GROUP
-
验证是否在集群中部署了私钥和 DaemonSet。
oc get secret docker-auth-secret -n kube-system
oc get ds update-docker-config -n kube-system
您还可以从 Satellite 控制台查看和管理配置和预订。