Deploy Using Private Registry
Pull and Push Images to Private Registry
warning
The following script is provided for reference only
pull_and_push.sh
#!/bin/bash
set -e
if ! command -v docker &> /dev/null; then
echo "Error: docker command not found. Please install Docker first."
exit 1
fi
if ! docker manifest --help &> /dev/null; then
echo "Error: docker manifest command is not available."
exit 1
fi
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <source_image_uri> <target_image_uri>"
echo "ep: $0 docker.bonree.com/agent-test/smartagent-operator:1.1.1 <your private registry>/agent/smartagent-operator:1.1.1"
exit 1
fi
SOURCE_IMAGE=$1
TARGET_IMAGE=$2
echo "Pulling amd64 image from source..."
docker pull --platform linux/amd64 "${SOURCE_IMAGE}"
docker tag "${SOURCE_IMAGE}" "$TARGET_IMAGE-amd64"
docker rmi "${SOURCE_IMAGE}"
echo "Pulling arm64 image from source..."
docker pull --platform linux/arm64 "${SOURCE_IMAGE}"
docker tag "${SOURCE_IMAGE}" "$TARGET_IMAGE-arm64"
docker rmi "${SOURCE_IMAGE}"
echo "Deleting existing manifest if it exists..."
docker manifest rm "$TARGET_IMAGE" 2>/dev/null || true
docker push "$TARGET_IMAGE-arm64"
docker push "$TARGET_IMAGE-amd64"
echo "Creating manifest..."
docker manifest create "$TARGET_IMAGE" \
-a "$TARGET_IMAGE-amd64" \
-a "$TARGET_IMAGE-arm64"
echo "Pushing manifest to target registry..."
docker manifest push "$TARGET_IMAGE"
echo "Successfully pushed $SOURCE_IMAGE to $TARGET_IMAGE"
# Pull smartagent image and push to private registry
bash pull_and_push.sh docker.bonree.com/agent/smartagent:<image_version> <private_registry>/agent/smartagent:<image_version>
# Pull and push smartagent-operator image to private registry
bash pull_and_push.sh docker.bonree.com/agent/smartagent-operator:<image_version> <private_registry>/agent/smartagent-operator:<image_version>
# Pull and push smartagent-serverless image to private registry
bash pull_and_push.sh docker.bonree.com/agent/smartagent-serverless:<agent_version> <private_registry>/agent/smartagent-serverless:<agent_version>
Download and Modify Smart Operator Resource Definition Files
-
Copy the content of
kubernetes.yamlorkubernetes-webhook-only.yaml,kubernetes-csi.yaml. -
Modify
kubernetes.yamlorkubernetes-webhook-only.yaml,kubernetes-csi.yamlfiles, replacing<original_image_uri>with<private_registry>.
If Private Registry Requires Authentication
-
For all ServiceAccounts in
kubernetes-webhook-only.yaml,kubernetes.yaml,kubernetes-csi.yaml, you need to addimagePullSecrets.For details: Add ImagePullSecrets to a ServiceAccount
Examplekubectl create secret docker-registry mydockerhub --docker-server=https://index.docker.io/v1/ --docker-username=xxxxx --docker-password=xxxxx --docker-email=xxxxx
-
Apply Smart Operator Resource Objects
kubectl create namespace bonree-agent
# or kubectl apply -f kubernetes-webhook-only.yaml
kubectl apply -f kubernetes.yaml
kubectl apply -f kubernetes-csi.yaml
kubectl patch serviceaccount bonree-smartkube-smartagent -p '{"imagePullSecrets": [{"name": "mydockerhub"}]}' -n bonree-agent
kubectl patch serviceaccount bonree-smartagent-csi-driver -p '{"imagePullSecrets": [{"name": "mydockerhub"}]}' -n bonree-agent
kubectl patch serviceaccount bonree-smartkube-smartagent-unprivileged -p '{"imagePullSecrets": [{"name": "mydockerhub"}]}' -n bonree-agent
kubectl patch serviceaccount bonree-webhook -p '{"imagePullSecrets": [{"name": "mydockerhub"}]}' -n bonree-agent
kubectl patch serviceaccount smartagent-operator -p '{"imagePullSecrets": [{"name": "mydockerhub"}]}' -n bonree-agent