이벤트
3월 17일 오후 9시 - 3월 21일 오전 10시
모임 시리즈에 참여하여 동료 개발자 및 전문가와 함께 실제 사용 사례를 기반으로 확장 가능한 AI 솔루션을 빌드합니다.
지금 등록Kubernetes용 애플리케이션을 빠르게 관리하고 배포하려는 경우 오픈 소스 Helm 패키지 관리자를 사용할 수 있습니다. Helm 사용 시 애플리케이션 패키지는 Helm 차트 리포지토리에 수집되고 저장되는 차트로 정의됩니다.
이 문서에서는 Helm 3 명령을 사용하고 차트를 OCI 아티팩트로 저장하여 Azure Container Registry에서 Helm 차트 리포지토리를 호스트하는 방법을 보여 줍니다. 대부분의 시나리오에서는 개발하는 애플리케이션용으로 차트를 직접 작성하여 업로드합니다. 사용자 고유의 Helm 차트를 작성하는 방법에 대한 자세한 내용은 차트 템플릿 개발자 가이드를 참조하세요. 다른 Helm 리포지토리의 기존 Helm 차트를 저장할 수도 있습니다.
참고
이 문서는 Helm 3 명령으로 업데이트되었습니다. Helm 3.7에는 Helm CLI 명령에 대한 변경 내용과 이전 버전의 Helm 3에서 도입된 OCI 지원이 포함됩니다. helm
은 버전 업데이트와 함께 설계되었습니다. 3.7.2 이상을 사용하는 것이 좋습니다.
중요
Helm 차트를 저장, 관리 및 설치하려면 Helm CLI에서 명령을 사용합니다. 주요 Helm 릴리스에는 Helm 3 및 Helm 2가 포함됩니다. 버전 차이점에 대한 자세한 내용은 버전 FAQ를 참조하세요.
Helm 3은 Azure Container Registry에서 Helm 차트를 호스트하는 데 사용해야 합니다. Helm 3을 사용하여 다음을 수행합니다.
helm registry login
또는 az acr login
명령을 사용하여 레지스트리로 인증합니다.helm
명령을 사용하여 레지스트리에서 Helm 차트 푸시, 풀 및 관리helm install
을 사용하여 레지스트리에서 Kubernetes 클러스터에 차트를 설치합니다.Azure Container Registry는 Helm 3(현재) 또는 Helm 2(더 이상 사용되지 않음)를 사용하는지 여부에 따라 특정 Helm 차트 관리 기능을 지원합니다.
기능 | Helm 2 | Helm 3 |
---|---|---|
az acr helm 명령을 사용하여 차트 관리 |
✔️ | |
차트를 OCI 아티팩트로 저장 | ✔️ | |
Azure Portal에서 az acr repository 명령과 리포지토리 블레이드를 사용하여 차트 관리 |
✔️ |
다음 Helm 차트 버전은 Azure Container Registry에 저장할 수 있으며 Helm 2 및 Helm 3 클라이언트에서 설치할 수 있습니다.
버전 | Helm 2 | Helm 3 |
---|---|---|
apiVersion v1 | ✔️ | ✔️ |
apiVersion v2 | ✔️ |
이전에 Helm 2 및 Azure Container Registry를 사용하여 차트를 저장하고 배포한 경우 Helm 3으로 마이그레이션하는 것이 좋습니다. 참조
이 문서의 시나리오에는 다음 리소스가 필요합니다.
helm version
을 실행하여 현재 버전을 찾습니다. Helm을 설치하고 업그레이드하는 방법에 대한 자세한 내용은 Helm 설치를 참조하세요. 이전 버전의 Helm 3에서 업그레이드하는 경우 릴리스 정보를 검토합니다.az --version
을 실행하여 버전을 확인합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.helm version
명령을 사용하여 Helm 3을 설치했는지 확인합니다.
helm version
참고
이전 버전의 OCI 지원이 실험적이었기 때문에 표시된 버전은 3.8.0 이상이어야 합니다.
대상 레지스트리에 대해 다음 환경 변수를 설정합니다. ACR_NAME은 레지스트리 리소스 이름입니다. ACR 레지스트리 URL이 myregistry.azurecr.io인 경우 ACR_NAME을 myregistry로 설정합니다.
ACR_NAME=<container-registry-name>
다음 명령을 사용하여 테스트 차트를 만듭니다.
mkdir helmtest
cd helmtest
helm create hello-world
기본 예제로 디렉터리를 templates
폴더로 변경하고 해당 콘텐츠를 먼저 삭제합니다.
cd hello-world/templates
rm -rf *
templates
폴더에서 다음 명령을 실행하여 configmap.yaml
이라는 파일을 만듭니다.
cat <<EOF > configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-world-configmap
data:
myvalue: "Hello World"
EOF
이 예제를 만들고 실행하는 방법에 대한 자세한 내용은 Helm 문서에서 시작을 참조하세요.
디렉터리를 hello-world
하위 디렉터리로 변경합니다. 그런 다음 helm package
를 실행하여 차트를 로컬 보관 파일에 저장합니다.
다음 예제에서 차트는 Chart.yaml
의 이름 및 버전을 사용하여 저장됩니다.
cd ..
helm package .
출력은 다음과 비슷합니다.
Successfully packaged chart and saved it to: /my/path/hello-world-0.1.0.tgz
helm registry login
을 실행하여 레지스트리로 인증합니다. 서비스 주체 자격 증명, 사용자 ID 또는 리포지토리 범위 토큰과 같은 시나리오에 적합한 레지스트리 자격 증명을 전달할 수 있습니다.
SERVICE_PRINCIPAL_NAME=<acr-helm-sp>
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role acrpush \
--query "password" --output tsv)
USER_NAME=$(az identity show -n $SERVICE_PRINCIPAL_NAME -g $RESOURCE_GROUP_NAME --subscription $SUBSCRIPTION_ID --query "clientId" -o tsv)
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
USER_NAME="helmtoken"
PASSWORD=$(az acr token create -n $USER_NAME \
-r $ACR_NAME \
--scope-map _repositories_admin \
--only-show-errors \
--query "credentials.passwords[0].value" -o tsv)
helm registry login
에 제공합니다.
helm registry login $ACR_NAME.azurecr.io \
--username $USER_NAME \
--password $PASSWORD
Helm 3 CLI에서 helm push
명령을 실행하여 차트 보관 파일을 정규화된 대상 리포지토리로 푸시합니다. 차트 이름에서 단어를 구분하고 소문자와 숫자만 사용합니다. 다음 예제에서 대상 리포지토리 네임스페이스는 helm/hello-world
이고 차트는 0.1.0
으로 태그가 지정됩니다.
helm push hello-world-0.1.0.tgz oci://$ACR_NAME.azurecr.io/helm
푸시가 성공적으로 완료되면 출력은 다음과 유사합니다.
Pushed: <registry>.azurecr.io/helm/hello-world:0.1.0
digest: sha256:5899db028dcf96aeaabdadfa5899db02589b2899b025899b059db02
Azure 컨테이너 레지스트리에 저장된 이미지와 마찬가지로 az acr repository 명령을 사용하여 차트를 호스팅하는 리포지토리와 차트 태그 및 매니페스트를 표시할 수 있습니다.
예를 들어 az acr repository show를 실행하여 이전 단계에서 만든 리포지토리의 속성을 볼 수 있습니다.
az acr repository show \
--name $ACR_NAME \
--repository helm/hello-world
출력은 다음과 비슷합니다.
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"writeEnabled": true
},
"createdTime": "2021-10-05T12:11:37.6701689Z",
"imageName": "helm/hello-world",
"lastUpdateTime": "2021-10-05T12:11:37.7637082Z",
"manifestCount": 1,
"registry": "mycontainerregistry.azurecr.io",
"tagCount": 1
}
az acr manifest list-metadata 명령을 실행하여 리포지토리에 저장된 차트의 세부 정보를 확인합니다. 예시:
az acr manifest list-metadata \
--registry $ACR_NAME \
--name helm/hello-world
이 예제의 축약된 출력에는 application/vnd.cncf.helm.config.v1+json
의 configMediaType
이 표시됩니다.
[
{
[...]
"configMediaType": "application/vnd.cncf.helm.config.v1+json",
"createdTime": "2021-10-05T12:11:37.7167893Z",
"digest": "sha256:0c03b71c225c3ddff53660258ea16ca7412b53b1f6811bf769d8c85a1f0663ee",
"imageSize": 3301,
"lastUpdateTime": "2021-10-05T12:11:37.7167893Z",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"tags": [
"0.1.0"
]
helm install
을 실행하여 레지스트리에 푸시한 Helm 차트를 설치합니다. 차트 태그는 --version
매개 변수를 사용하여 전달됩니다. myhelmtest와 같은 릴리스 이름을 지정하거나 --generate-name
매개 변수를 전달합니다. 예시:
helm install myhelmtest oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
성공적인 차트 설치 후의 출력은 다음과 유사합니다.
NAME: myhelmtest
LAST DEPLOYED: Tue Oct 4 16:59:51 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
설치를 확인하려면 helm get manifest
명령을 실행합니다.
helm get manifest myhelmtest
명령은 configmap.yaml
템플릿 파일의 YAML 데이터를 반환합니다.
helm uninstall
을 실행하여 클러스터에서 차트 릴리스를 제거합니다.
helm uninstall myhelmtest
필요에 따라 helm pull
을 사용하여 컨테이너 레지스트리에서 로컬 보관 파일로 차트를 끌어올 수 있습니다. 차트 태그는 --version
매개 변수를 사용하여 전달됩니다. 로컬 보관 파일이 현재 경로에 있는 경우 이 명령은 파일을 덮어씁니다.
helm pull oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
컨테이너 레지스트리에서 차트를 삭제하려면 az acr repository delete 명령을 사용합니다. 다음 명령을 실행하고 메시지가 표시되면 작업을 확인합니다.
az acr repository delete --name $ACR_NAME --image helm/hello-world:0.1.0
이전에 Helm 2 및 az acr helm
명령을 사용하여 Azure Container Registry를 차트 리포지토리로 설정한 경우 Helm 3 클라이언트로 업그레이드하는 것이 좋습니다. 그런 후 다음 단계에 따라 차트를 레지스트리에 OCI 아티팩트로 저장합니다.
중요
az acr repository
명령을 사용하여 차트를 관리합니다. 이 문서의 이전 섹션을 참조하세요.helm search
및 helm repo list
와 같은 Helm 명령을 사용하여 검색할 수 없습니다. 차트를 OCI 아티팩트로 저장하는 데 사용되는 Helm 명령에 대한 자세한 내용은 Helm 문서를 참조하세요.Helm 3 클라이언트를 사용 중인지 확인합니다.
helm version
Helm v3.8.0 이상을 사용하는 경우 기본적으로 사용하도록 설정됩니다. 더 낮은 버전을 사용하는 경우 환경 변수를 설정하여 OCI 지원을 사용하도록 설정할 수 있습니다.
export HELM_EXPERIMENTAL_OCI=1
현재 myregistry라는 이름의 레지스트리에 저장된 차트를 나열합니다.
helm search repo myregistry
출력에 차트 및 차트 버전이 표시됩니다.
NAME CHART VERSION APP VERSION DESCRIPTION
myregistry/ingress-nginx 3.20.1 0.43.0 Ingress controller for Kubernetes...
myregistry/wordpress 9.0.3 5.3.2 Web publishing platform for building...
[...]
리포지토리의 각 차트에 대해 차트 보관 파일을 로컬로 끌어오고 파일 이름을 기록해 둡니다.
helm pull myregisry/ingress-nginx
ls *.tgz
로컬 차트 보관 파일(예: ingress-nginx-3.20.1.tgz
)이 만들어집니다.
레지스트리에 로그인:
az acr login --name $ACR_NAME
각 차트 보관 파일을 레지스트리에 푸시합니다. 예시:
helm push ingress-nginx-3.20.1.tgz oci://$ACR_NAME.azurecr.io/helm
차트를 푸시한 후 레지스트리에 저장되었는지 확인합니다.
az acr repository list --name $ACR_NAME
모든 차트를 푸시한 후 선택적으로 레지스트리에서 Helm 2 스타일 차트 리포지토리를 제거합니다. 이렇게 하면 레지스트리의 스토리지가 줄어듭니다.
helm repo remove $ACR_NAME
이벤트
3월 17일 오후 9시 - 3월 21일 오전 10시
모임 시리즈에 참여하여 동료 개발자 및 전문가와 함께 실제 사용 사례를 기반으로 확장 가능한 AI 솔루션을 빌드합니다.
지금 등록