한 클러스터에서 다른 클러스터로 컨테이너 이미지 푸시

시스템 아티팩트는 관리자 클러스터의 Artifact Registry에 있습니다. 새 아티팩트를 패치하여 수정할 수 있는 버그나 서비스 중단이 시스템에 표시되면 새 시스템 아티팩트를 푸시합니다.

이 문서에서는 한 클러스터에서 다른 클러스터로 개별 아티팩트를 푸시하는 방법을 설명합니다.

시작하기 전에

관리자로서 시스템 Artifact Registry 프로젝트의 리소스에 액세스하는 데 필요한 권한을 얻으려면 보안 관리자에게 컨테이너 이미지를 푸시할 클러스터에 따라 다음 역할을 부여해 달라고 요청하세요.

  • 조직 관리자 클러스터: 컨테이너 이미지를 조직 관리자 클러스터의 시스템 Artifact Registry에 푸시하려면 조직 시스템 아티팩트 관리 관리자 (organization-system-artifact-management-admin) 역할이 필요합니다.
  • 루트 관리자 클러스터: 컨테이너 이미지를 루트 관리자 클러스터의 시스템 Artifact Registry에 푸시하려면 시스템 Artifact 관리 관리자 (system-artifact-management-admin) 역할이 필요합니다.

필요한 권한을 얻은 후 루트 관리자 클러스터 또는 조직 관리자 클러스터의 시스템 Artifact Registry에 이미지를 푸시하기 전에 다음 단계를 따르세요.

  1. gdcloud 명령줄 인터페이스 (CLI)의 안내에 따라 Distributed Cloud CLI를 다운로드하고 설치합니다.

  2. 구성요소 설치 안내에 따라 docker-credential-gdcloud 구성요소를 설치합니다.

    gdcloud components install docker-credential-gdcloud
    
  3. 구성된 ID 공급업체로 로그인합니다.

    gdcloud auth login
    
  4. kubeconfig 파일을 내보냅니다.

    gdcloud clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

  5. Docker를 구성합니다.

    gdcloud auth configure-docker
    

S3 버킷에서 컨테이너 이미지 다운로드

S3 버킷에서 컨테이너 이미지를 다운로드하는 데 필요한 권한을 얻으려면 보안 관리자에게 프로젝트 네임스페이스에 대한 프로젝트 버킷 객체 뷰어(project-bucket-object-viewer) 역할을 부여해 달라고 요청하세요.

보안 관리자는 역할 바인딩을 만들어 액세스 권한을 부여합니다.

kubectl create rolebinding IO_USER-bor-rb \
  --role=project-bucket-object-viewer \
  --user=USER \
  -n PROJECT_NAMESPACE

다음을 바꿉니다.

  • USER: 역할 바인딩이 필요한 사용자의 계정 이름입니다.
  • PROJECT_NAMESPACE: S3 버킷이 있는 프로젝트의 네임스페이스입니다.

프로젝트 내 버킷과 해당 버킷의 객체에 대한 읽기 전용 액세스 권한이 부여됩니다.

필요한 권한을 획득한 후 다음 단계에 따라 프로젝트 네임스페이스의 S3 버킷에서 컨테이너 이미지를 다운로드합니다.

  1. 버킷의 보안 비밀 이름을 가져옵니다. 보안 비밀 이름은 다음 예와 같습니다.

    object-storage-key-std-user-ID
    

    보안 비밀 이름에는 버킷에 액세스하기 위한 고유한 ID 값이 포함됩니다.

  2. 버킷의 보안 비밀 이름을 복사합니다.

  3. 버킷 액세스 사용자 인증 정보를 가져오고 s3cmd CLI 도구를 구성합니다.

    SECRET_NAME=SECRET_NAME
    ACCESS_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.access-key-id}' | base64 -d)
    SECRET_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.secret-access-key}' | base64 -d)
    S3_ENDPOINT=objectstorage.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
    echo "Access Key: ${ACCESS_KEY}" \
    && echo "Secret Key: ${SECRET_KEY}" \
    && echo "S3 Endpoint: ${S3_ENDPOINT}"
    
    s3cmd --configure
    

    SECRET_NAME를 이전 단계에서 복사한 값으로 바꿉니다.

  4. S3 버킷에서 워크스테이션으로 컨테이너 이미지를 다운로드합니다.

    s3cmd get s3://BUCKET_NAME /g/CONTAINER_IMAGE_NAME
    

    다음을 바꿉니다.

    • BUCKET_NAME: 컨테이너 이미지가 있는 S3 버킷의 이름입니다.
    • CONTAINER_IMAGE_NAME: S3 버킷에서 다운로드할 컨테이너 이미지 파일의 이름입니다.

이미지를 시스템 Artifact Registry로 푸시

다음 단계에 따라 워크스테이션에 있는 컨테이너 이미지 파일을 관리자 클러스터의 시스템 Artifact Registry에 푸시합니다.

  1. Console을 엽니다.

  2. 컨테이너 이미지를 푸시하려는 클러스터의 시스템 Artifact Registry 엔드포인트 경로를 가져옵니다.

    export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  3. 컨테이너 이미지를 클러스터의 시스템 Artifact Registry 엔드포인트에 로드하고 태그를 지정하고 푸시합니다.

    docker load --input CONTAINER_IMAGE_PATH
    
    docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    
    docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    

    CONTAINER_IMAGE_PATH을 로컬 파일 시스템의 컨테이너 이미지 파일 경로로 바꿉니다. 이 경로의 유효한 값은 oracle_db.tar입니다.