دفع وسحب مخططات Helm إلى سجل حاوية Azure

لإدارة التطبيقات ونشرها بسرعة ل Kubernetes، يمكنك استخدام "open-source Helm package manager". تعرف حزم التطبيقات في Helmكمخططات بيانية، والتي تجمع وتخزن في مستودع مخططات Helm البيانية.

توضح هذه المقالة كيفية استضافة مستودعات مخططات Helm البيانية في Azure container registry باستخدام أوامرHelm 3 وتخزين المخططات "OCI artifacts". في كثير من السيناريوهات، يمكنك تحويل وتحميل المخططات للتطبيقات التي تقوم بتطويرها. لمزيد من المعلومات حول كيفية تحويل مخططات Helm البيانية، راجع "Chart Template Developer"s Guide". يمكن أيضاً تخزين مخطط Helm البياني الحالي من مستودع Helm آخر.

هام

تم تحديث هذه المقالة بأوامر Helm 3. يتضمن Helm 3.7 تغييرات على أوامر Helm CLI ودعم OCI المقدم في الإصدارات السابقة من Helm 3. حسب التصميم يتحرك helm إلى الأمام مع الإصدار. نوصي باستخدام الإصدار 3.7.2 أو أحدث.

Helm 3 أو Helm 2؟

لتخزين مخططات Helm البيانية وإدارتها وتثبيتها، يمكنك استخدام الأوامر في Helm CLI. وتشمل الإصدارات الرئيسية Helm 3 وHelm 2. للحصول على تفاصيل حول اختلافات الإصدار، راجع الأسئلة المتداولةحول الإصدار.

يجب استخدام Helm 3 لاستضافة مخططات Helm البيانية في Azure Container Registry. يمكن بـ Helm 3:

  • تخزين وإدارة مخططات Helm البيانية في Azure Container Registry.
  • تخزين مخططات Helm البيانية في السجل الخاص بك OCI artifacts. يوفر Azure Container Registry دعم التوفر العام لـOCI artifacts، بما في ذلك مخططات Helm البيانية.
  • المصادقة بالتسجيل باستخدام الأمر helm registry login"أو"az acr login
  • استخدام helm الأوامر لدفع مخططات Helm البيانية وسحبها وإدارتها في السجل
  • استخدام helm install لتثبيت المخططات إلى مقطع تخزين Kubernetes من السجل.

دعم الميزة

يدعم Azure Container Registry ميزات إدارة محددة لمخطط Helm اعتماداً على ما إذا كنت تستخدم Helm 3 (الحالي) أو Helm 2 (المهمل).

الميزة Helm 2 Helm 3
إدارة المخططات باستخدام أوامر az acr helm ✔️
تخزين المخططات كـ OCI artifacts ✔️
إدارة المخططات باستخدام az acr repository الأوامر وشفرة المستودعات في مدخل Azure ✔️

إشعار

اعتبارا من Helm 3, az acr helm تُهمل أوامر الاستخدام مع عميل Helm 2. يُقدم إشعار لا تقل مدته عن 3 أشهر قبل إزالة الأمر.

توافق إصدار المخطط

يمكن تخزين إصدارات مخططات Helm البيانية التالية في Azure Container Registry وتكون قابلة للتثبيت بواسطة عملاء Helm 2 وHelm 3.

‏‏الإصدار‬ Helm 2 Helm 3
apiVersion v1 ✔️ ✔️
apiVersion v2 ✔️

الترحيل من Helm 2 إلى Helm 3

إذا قمت بتخزين المخططات ونشرها مسبقاً باستخدام Helm 2 وAzure Container Registry،فنوصي بترحيلها إلى Helm 3. راجع:

المتطلبات الأساسية

الموارد التالية مطلوبة للسيناريو في هذه المقالة:

  • An Azure container registry في اشتراك Azure. إذا لزم الأمر، إنشاء سجل باستخدام مدخل Azure أو CLI Azure.
  • إصدار عميل Helm 3.7 أو أحدث - قم بتشغيل helm version للعثور على الإصدار الحالي الخاص بك. لمزيد من المعلومات حول كيفية تثبيت Helm وترقيته، راجع تثبيت Helm. إذا قمت بالترقية من إصدار سابق من Helm 3، راجع ملاحظات حول الإصدار.
  • كتلة Kubernetes حيث سيتم تثبيت مخطط هيلم. إذا لزم الأمر، قم بإنشاء نظام مجموعة AKS باستخدام Azure CLI، باستخدام Azure PowerShell، أو باستخدام مدخل Microsoft Azure.
  • Azure CLI إصدار 2.0.71 أو أحدث - تشغيل az --version للبحث عن الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

إعداد عميل Helm

استخدم helm version الأمر للتحقق من تثبيت Helm 3:

helm version

إشعار

ينبغي أن يكون الإصدار المشار إليه 3.8.0 على الأقل، حيث كان دعم OCI في الإصدارات السابقة تجريبيًا.

قم بتعيين متغيرات البيئة التالية للسجل الهدف. ACR_NAME هو اسم مورد التسجيل. إذا كان عنوان URL لسجل ACR هو 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

لمزيد من الاطلاع على إنشاء هذا المثال وتشغيله، راجع "Getting Started" في وثائق 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 للتحقق من الصحة مع السجل. يمكنك تمرير بيانات اعتماد السجل المناسبة للسيناريو الخاص بك، مثل بيانات اعتماد الخدمة الأساسية أو هوية المستخدم أو رمز مميز لنطاق المستودع.

  • المصادقة باستخدام كيان خدمة Microsoft Entra مع أذونات السحب والدفع (دور AcrPush) إلى السجل.
    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)
    
  • قم بالمصادقة باستخدام هوية Microsoft Entra الفردية لدفع مخططات Helm وسحبها باستخدام رمز AD المميز.
    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
    

دفع المخطط إلى السجل كـ OCI artifact

تشغيل helm push الأمر في Helm 3 CLI لدفع أرشيف المخطط إلى مستودع الهدف المؤهل بالكامل. افصل الكلمات في أسماء المخططات واستخدم الأحرف الصغيرة والأرقام فقط. في المثال التالي، مساحة اسم المستودع الهدف هو 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 container registry، يمكن استخدام أوامر مستودع az acr لإظهار المستودعات التي تستضيف المخططات، وعلامات المخططات وبيانات التجميع.

على سبيل المثال، تشغيل az acr مستودع إظهار لمشاهدة خصائص المستودع الذي قمت بإنشائه في الخطوة السابقة:

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

يُظهر الإخراج، المختصر في هذا المثال، configMediaType من application/vnd.cncf.helm.config.v1+json:

[
  {
    [...]
    "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

تشغيل 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

إرجاع الأمر بيانات YAML في configmap.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. تشغيل الأمر التالي وتأكيد العملية عند المطالبة:

az acr repository delete --name $ACR_NAME --image helm/hello-world:0.1.0

ترحيل السجل الخاص بك لتخزينHelm OCI artifacts

إذا قمت مسبقا بإعداد Azure container registry كمستودع تخطيط باستخدام Helm 2 az acr helm والأوامر، نوصي بالترقية إلى عميل Helm 3. ثم اتبع هذه الخطوات لتخزين المخططات OCI artifacts في السجل.

هام

  • بعد إكمال الترحيل من مستودع مخطط Helm 2 نمط (index.yaml المستندة إلى) إلى مستودعات ARTIFACT OCI استخدامCLI Helm az acr repository والأوامر لإدارة المخططات. راجع المقاطع السابقة في هذه المقالة.
  • مستودعات Artifact OCI Helm غير قابلة للاكتشاف باستخدام أوامر Helm مثل helm search وhelm repo list . لمزيد من المعلومات حول أوامر Helm المستخدمة لتخزين المخططات OCI artifacts راجع وثائق Helm.

تمكين دعم OCI (ممكن افتراضيا في Helm v3.8.0)

تأكد من استخدام عميل 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 مثل.

دفع المخططات OCI artifacts للسجل

تسجيل الدخول إلى السجل:

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

بعد دفع جميع المخططات، قم بإزالة مستودع المخطط ذي النمطين 2Helm اختيارياً من السجل. يؤدي القيام بذلك إلى تقليل التخزين في السجل:

helm repo remove $ACR_NAME

الخطوات التالية