Skip to main content
Version: 3.7.0

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

  1. Copy the content of kubernetes.yaml or kubernetes-webhook-only.yaml, kubernetes-csi.yaml.

  2. Modify kubernetes.yaml or kubernetes-webhook-only.yaml, kubernetes-csi.yaml files, replacing <original_image_uri> with <private_registry>.


If Private Registry Requires Authentication

  1. For all ServiceAccounts in kubernetes-webhook-only.yaml, kubernetes.yaml, kubernetes-csi.yaml, you need to add imagePullSecrets.

    For details: Add ImagePullSecrets to a ServiceAccount

    Example
    kubectl create secret docker-registry mydockerhub     --docker-server=https://index.docker.io/v1/     --docker-username=xxxxx     --docker-password=xxxxx     --docker-email=xxxxx

  1. 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