Helm paketi gereksinimleri

Helm, Kubernetes uygulamalarını yönetmenize yardımcı olan bir Kubernetes paket yöneticisidir. Helm paketleri grafik olarak adlandırılır ve birkaç YAML yapılandırma dosyasından ve Kubernetes bildirim dosyalarında işlenen bazı şablonlardan oluşur. Grafikler herhangi bir ortam için herkes tarafından yeniden kullanılabilir ve bu da karmaşıklığı ve yinelemeleri azaltır.

Kayıt defteri URL yolu ve imagepullsecrets gereksinimleri

Helm paketi geliştirirken kapsayıcı kayıt defteri sunucusu URL'sini değerlerde tutmak yaygın bir durum olur. Kapsayıcı kayıt defteri sunucusu URL'sini değerlerde tutmak, yapıtları her ortam kapsayıcı kayıt defteri arasında taşımak için yararlıdır. Azure Operatör Hizmet Yöneticisi (AOSM), Kapsayıcılı Ağ İşlevi (CNF) dağıtmak için Ağ İşlev Yöneticisi (NFM) hizmetini kullanır. Ağ İşlev Yöneticisi (NFM), Ağ İşlevi (NF) dağıtımı sırasında helm değerlerine kapsayıcı kayıt defteri sunucusu konumunu ve imagepullsecrets eklemeye yönelik özellikler içerir. imagePullSecret, bir kayıt defterine erişmek için kullanılan Docker kimlik bilgilerini depolayan ve gizli dizi olarak da bilinen bir yetkilendirme belirtecidir. Örneğin, Kubernetes dağıtımı aracılığıyla bir uygulama dağıtmanız gerekiyorsa, aşağıdaki örneğe benzer bir dağıtım tanımlayabilirsiniz:

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: nginx-deployment 
  labels: 
    app: nginx 
spec: 
  replicas: 3 
  selector: 
    matchLabels: 
      app: nginx 
  template: 
    metadata: 
      labels: 
        app: nginx 
    spec: 
      {{- if .Values.global.imagePullSecrets }} 
      imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }} 
      {{- end }} 
      containers: 
      - name: contosoapp 
        image:{{ .Values.global.registryPath }}/contosoapp:1.14.2 
        ports: 
        - containerPort: 80 

values.schema.json , Helm grafikleri için değer gereksinimlerini ve kısıtlamalarını tek bir konumda kolayca ayarlamanıza olanak tanıyan bir dosyadır. Bu dosyada registryPath ve imagePullSecrets değerlerini gerekli özellikler olarak tanımlayın.

{ 
  "$schema": "http://json-schema.org/draft-07/schema#", 
  "title": "StarterSchema", 
  "type": "object", 
  "required": ["global"], 
  "properties": { 
      "global" : {
          "type": "object",
          "properties": {
              “registryPath”: {“type”: “string”}, 
              “imagePullSecrets”: {“type”: “string”}, 
          }
          "required": [ "registryPath", "imagePullSecrets" ], 
      } 
   } 
} 

NFDVersion istek yükü, registryValuesPaths içinde aşağıdaki değerleri sağlar:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

NF dağıtımı sırasında Ağ İşlevi İşleci (NFO), registryPath'i doğru Azure Container Registry (ACR) sunucu konumuna ayarlar. Örneğin, NFO aşağıdaki eşdeğer komutu çalıştırır:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

Dekont

registryPath, https:// veya oci:// gibi herhangi bir ön ek olmadan ayarlanır. Helm paketinde bir ön ek gerekiyorsa, yayımcıların bunu pakette tanımlaması gerekir.

values.yaml Helm grafiği için varsayılan değerleri içeren bir dosyadır. Grafik için varsayılan değerleri tanımlayan bir YAML dosyasıdır. values.yaml dosyasında iki tür değişken bulunmalıdır; imagePullSecrets ve registryPath. Her biri tabloda açıklanmıştır.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Veri Akışı Adı Tür Tanım
imagePullSecrets String imagePullSecrets kapsayıcı görüntülerini çekmek için kullanılan bir dizi gizli dizidir
registryPath String registryPath, sunucu konumudur AzureContainerRegistry

imagePullSecrets ve registryPath, NFDVersion oluşturma adımında sağlanmalıdır.

Kümede çalışan bir NFO, helm install –set komutunu kullanarak helm sürümü sırasında bu iki değişkeni (imagePullSecrets ve registryPath) doldurur.

Daha fazla bilgi için bkz. pull-image-private-registry

Değişmezlik kısıtlamaları

Değişmezlik kısıtlamaları bir dosya veya dizinde değişiklik yapılmasını engeller. Örneğin, sabit bir dosya değiştirilemez veya yeniden adlandırılamaz ve ekleme işlemlerine izin veren bir dosya silinemez, değiştirilemez veya yeniden adlandırılamaz.

Değiştirilebilir etiketleri kullanmaktan kaçının

Kullanıcılar en son, geliştirme veya kararlı gibi değiştirilebilir etiketleri kullanmaktan kaçınmalıdır. Örneğin, deployment.yaml için 'en son' kullandıysa. Values.image.tag dağıtımı başarısız olur.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

Dış kayıt defteri başvurularından kaçının

Kullanıcılar dış kayıt defteri başvurularını kullanmaktan kaçınmalıdır. Örneğin deployment.yaml sabit kodlanmış bir kayıt defteri yolu veya dış kayıt defteri başvurusu kullanıyorsa doğrulama başarısız olur.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

Öneriler

Özel Kaynak Tanımları (CRD) bildiriminin ve kullanımın yanı sıra el ile doğrulamaları kullanarak bölmek önerilen uygulamalardır. Her biri aşağıdaki bölümlerde açıklanmıştır.

BÖLÜNMÜŞ CRD bildirimi ve kullanımı

Güncelleştirmeleri desteklemek için CRD'lerin bildirimini ve kullanımını ayrı helm grafiklerine bölmenizi öneririz. Ayrıntılı bilgi için bkz. method-2-separate-charts

El ile doğrulamalar

Görüntülerin registryURL ön ekine sahip olduğundan ve imagePullSecrets öğesinin secretName ile dolduruldığından emin olmak için oluşturulan görüntüleri ve kapsayıcı belirtimlerini gözden geçirin.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

VEYA

 helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
 kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>

Statik görüntü deposu ve etiketler

Her helm grafiği statik görüntü deposu ve etiketler içermelidir. Kullanıcıların görüntü deposunu ve etiketini statik değerlere ayarlaması gerekir. Statik değerler şu şekilde ayarlanabilir:

  • Bunları görüntü satırında sabit olarak kodlayarak veya
  • Values.yaml dosyasındaki Değerleri ayarlama ve bu değerleri Ağ İşlevi Tasarım Sürümü'nde (NFDV) ortaya çıkarmama.

Ağ İşlevi Tasarım Sürümü (NFDV), statik bir helm grafik ve görüntü kümesiyle eşlenmelidir. Grafikler ve görüntüler yalnızca yeni bir Ağ İşlevi Tasarım Sürümü (NFDV) yayımlanarak güncelleştirilir.

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

veya

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2