OCI
OCI
Argo CD는 OCI(Open Container Initiative) 이미지를 애플리케이션 소스로 사용하는 것을 지원합니다. 선언적 구문으로 OCI 이미지, OCI Helm 차트를 설치하고, OCI 저장소 특수 사례, 사용 지침, 메타데이터 어노테이션을 다룹니다.
출처: 문서
본문
OCI
선언적(Declarative)
Argo CD는 OCI(Open Container Initiative) 이미지를 애플리케이션 소스로 사용하는 것을 지원합니다. UI 또는 선언적 GitOps 방식으로 OCI 이미지를 사용해 애플리케이션을 설치할 수 있습니다. 예시:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-custom-image
namespace: argocd
spec:
project: default
source:
path: .
repoURL: oci://registry-1.docker.io/some-user/my-custom-image
targetRevision: 1.16.1
destination:
server: "https://kubernetes.default.svc"
namespace: my-namespace
공개 OCI helm 차트를 사용하는 또 다른 예시:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
project: default
source:
path: .
repoURL: oci://registry-1.docker.io/bitnamicharts/nginx
targetRevision: 15.9.0
helm:
valuesObject:
some-value: foo
destination:
name: "in-cluster"
namespace: nginx
OCI 이미지 사용을 시작하는 핵심은 애플리케이션 스펙의 다음 컴포넌트입니다:
repoURL:oci://체계를 사용해 OCI 이미지 저장소 URL을 지정한 다음 레지스트리와 이미지 이름을 명시합니다.targetRevision: 이 필드를 사용해 원하는 이미지 태그 또는 다이제스트를 지정합니다.path: 이 필드를 사용해 확장된 이미지에서 상대 경로를 선택합니다. 하위 경로를 선택하지 않으려면.을 사용합니다. OCI Helm 차트(mediaType이application/vnd.cncf.helm.chart.content.v1.tar+gzip으로 설정된 OCI 아티팩트)의 경우 path는 항상.으로 설정해야 합니다.
OCI 저장소 특수 사례
OCI 저장소에 대한 자격 증명이 필요하다면 *oci 유형의 저장소 자격 증명을 생성해야 합니다.
# Add a private HTTPS OCI repository named 'stable'
argocd repo add oci://registry-1.docker.io/bitnamicharts/nginx --type oci --name stable --username test --password test
Helm 저장소의 경우 Helm으로 OCI 자격 증명을 사용하는 또 다른 방법이 있습니다:
# Add a private HTTPS OCI Helm repository named 'stable'
argocd repo add registry-1.docker.io/bitnamicharts/nginx --type helm --name stable --username test --password test --enable-oci
참고: 저장소 URL에는 OCI 체계 접두사인 oci:// 가 포함되어서는 안 됩니다. 또한 path는 저장소 URL에서 제거되어 path 속성에 대신 정의해야 합니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-custom-image
namespace: argocd
spec:
project: default
source:
path: bitnamicharts/nginx
repoURL: registry-1.docker.io
targetRevision: 1.16.1
destination:
server: "https://kubernetes.default.svc"
namespace: my-namespace
참고: 이것은 Helm 저장소 자격 증명을 사용할 때만 적용된다는 점을 유의하세요.
사용 지침
먼저 OCI를 준수하는 저장소가 필요합니다. 예를 들어 DockerHub, ECR, GHCR, GCR 모두 조건을 충족합니다.
둘째, Argo CD는 OCI 이미지가 단일 레이어를 포함하길 기대합니다. 또한 Argo CD 저장소 서버가 수락하는 미디어 유형을 가진 OCI 이미지여야 합니다. 기본적으로 Argo CD는 이미지 레이어에 대해 다음 미디어 유형 중 하나를 수락합니다:
application/vnd.oci.image.layer.v1.tar+gzipapplication/vnd.cncf.helm.chart.content.v1.tar+gzip
커스텀 미디어 유형은 repo-server 디플로이먼트에서 ARGOCD_REPO_SERVER_OCI_LAYER_MEDIA_TYPES 환경 변수를 설정해 구성할 수 있습니다.
Argo CD와 호환되는 OCI 아티팩트를 만들려면 선택할 수 있는 도구가 많습니다. 이 예시에서는 ORAS를 사용합니다. 매니페스트가 있는 디렉터리로 이동해 oras push를 실행하세요.
oras push <registry-url>/guestbook:latest .
ORAS는 디렉터리를 단일 레이어로 패키징하고 mediaType을 application/vnd.oci.image.layer.v1.tar+gzip으로 설정합니다.
압축 아카이브를 사용해 OCI 이미지를 패키징할 수도 있습니다.
# Create a tarball of the directory containing your manifests. If you are not in the current directory, please ensure
# that you are setting the correct parent of the directory (that is what the `-C` flag does).
tar -czvf archive.tar.gz -C manifests .
그런 다음 ORAS를 사용해 아카이브를 OCI 레지스트리에 푸시할 수 있습니다:
# In the case of tarballs, you currently need to set the media type manually.
oras push <registry-url>/guestbook:latest archive.tar.gz:application/vnd.oci.image.layer.v1.tar+gzip
OCI 메타데이터 어노테이션
Argo CD는 표준 OCI 메타데이터 어노테이션을 표시할 수 있어 Argo CD UI에서 OCI 이미지에 대한 추가 컨텍스트와 정보를 직접 제공합니다.
지원되는 어노테이션
Argo CD는 다음 표준 OCI 어노테이션을 인식하고 표시합니다:
org.opencontainers.image.titleorg.opencontainers.image.descriptionorg.opencontainers.image.versionorg.opencontainers.image.revisionorg.opencontainers.image.urlorg.opencontainers.image.sourceorg.opencontainers.image.authorsorg.opencontainers.image.created
ORAS와 함께 이전 예시를 사용해 Argo CD가 활용할 수 있는 어노테이션을 설정할 수 있습니다:
oras push -a "org.opencontainers.image.authors=some author" \
-a "org.opencontainers.image.url=http://some-url" \
-a "org.opencontainers.image.version=some-version" \
-a "org.opencontainers.image.source=http://some-source" \
-a "org.opencontainers.image.description=some description" \
<registry-url>/guestbook:latest .