Aracılığıyla paylaş


Helm gereksinimlerine genel bakış

Helm, Kubernetes için uygulama yaşam döngüsü yönetimini basitleştirmeye yardımcı olan bir paket yöneticisidir. Helm paketleri grafik olarak adlandırılır ve YAML yapılandırması ve şablon dosyalarından oluşur. Helm işleminin yürütülmesinin ardından grafikler, uygun uygulama yaşam döngüsü eylemlerini tetikleme amacıyla Kubernetes bildirim dosyalarına işlenir. Azure Operatör Hizmeti Yöneticisi (AOSM) ile en verimli tümleştirme için yayımcıların Helm grafikleri geliştirirken en iyi yöntemleri dikkate alması gerekir.

registryPath ve imagePullSecrets ile ilgili dikkat edilmesi gerekenler

Her Helm grafiği genellikle bir registryPath ve imagePullSecrets gerektirir. En yaygın olarak, yayımcı bu parametreleri values.yaml dosyasında kullanıma sunar. İlk başta AOSM, yayımcının bu değerleri kesin bir şekilde (eski yaklaşım) yönetmesine ve dağıtım sırasında uygun Azure değerleriyle değiştirilmelerine bağımlıdır. Zamanla, tüm yayıncıların bu değerlerin katı yönetimine kolayca uyamayacağı anlaşıldı. Bazı grafikler, her zaman karşılanmayan registryPath ve/veya imagePullSecrets'i koşullu değerlerin veya diğer değer kısıtlamalarının arkasında gizler. Bazı grafikler, registryPath ve/veya imagePullSecrets değerlerini dizi yerine beklenen adlandırılmış dize olarak bildirmez. Yayımcılardaki katı uyumluluk gereksinimlerini azaltmak için AOSM, injectArtifactStoreDetail ve küme kayıt defteri olmak üzere iki geliştirilmiş yöntem kullanıma sunulmuştur. Bu yeni yöntemler Helm paketinde görünen registryPath veya imagePullSecrets'e bağlı değildir. Bunun yerine, bu yöntemler düzgün Azure değerlerini doğrudan pod işlemlerine eklemek için bir web kancası kullanır.

registryPath ve imagePullSecrets için yöntem özeti

Üç yöntem de şu anda bu makalede açıklandığı gibi desteklenmektedir. Yayımcı, (ağ işlevi) NF ve kullanım örneği için en iyi seçeneği belirlemelidir.

Eski

  • Yayımcının değiştirme için helm değerlerinde ve dağıtım şablonlarında registryPath ve imagePullSecrets parametrelerini parametreleştirmesini gerektirir.
  • Görüntüler yayımcı Azure Container Registry'de (ACR) barındırılır.

InjectArtifactStoreDetail

  • registryPath ve imagePullSecrets'i helm'e en az bağımlılık ile pod işlemlerine doğrudan eklemek için bir web kancası kullanır.
  • Görüntüler hala yayımcı ACR'de barındırılıyor.

Küme Kayıt Defteri

  • Helm bağımlılığı olmadan registryPath ve imagePullSecrets'i doğrudan pod işlemlerine eklemek için bir web kancası kullanır.
  • Görüntüler yerel ağ fonksiyonu işleci (NFO) kümesi uzantısı kayıt defterinde barındırılır.

Not

Her üç durumda da AOSM, bir yayımcının şablonlarda hangi değerleri kullanıma sunarsa o değerler için Azure değerlerini değiştirmektedir. Tek fark değiştirme yöntemidir.

registryPath ve imagePullSecrets için eski gereksinimler

Azure Operatör Hizmet Yöneticisi (AOSM), Kapsayıcılı Ağ İşlevleri (CNF) dağıtmak için Ağ İşlev Yöneticisi (NFM) hizmetini kullanır. NFM, eski yöntemiyle Ağ İşlevi (NF) dağıtımı sırasında AOSM kapsayıcı registryPath ve imagePullSecrets değerlerini helm işlemiyle değiştirir.

Eski yöntemi kullanma

Aşağıdaki helm deployment şablonda bir yayımcının registryPath ve imagePullSecrets'ı nasıl kullanıma sunması gerektiğine ilişkin bir örnek gösterilmektedir.

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 

Aşağıdaki values.yaml şablonda, yayımcının registryPath ve imagePullSecretsvalue değerlerini nasıl sağlayabileceklerine ilişkin bir örnek gösterilmektedir.

global: 
   imagePullSecrets: [] 
   registryPath: “” 

Aşağıdaki values.schema.json dosya, bir yayımcının registryPath ve imagePullSecretsvalue değerlerini nasıl kolayca tanımlayabileceğini gösteren bir örnek gösterir.

{ 
  "$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" ], 
      } 
   } 
} 

Aşağıda NFDV request payload , bir yayımcının dağıtımda registryPath ve imagePullSecretsvalue değerlerini nasıl sağlayabileceklerine ilişkin bir örnek gösterilmektedir.

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

Not

  • registryPath herhangi bir ön ek, örneğin https:// veya oci://, olmadan ayarlanır. Gerekirse, yayımcının helm paketinde bir ön ek tanımlaması gerekir.
  • imagePullSecrets ve registryPath, NFDVersion oluşturma giriş adımında sağlanmalıdır.

Miras yöntemiyle ilgili diğer önemli noktalar

Publisher, eski yöntemi kullanırken aşağıdaki önerileri dikkate almalıdır:

  • Dış kayıt defteri başvurularından kaçının
  • El ile doğrulama gerçekleştirme
  • Statik görüntü deposunun ve etiketlerin olduğundan emin olun

Harici kayıt defteri referanslarından kaçının

Kullanıcılar harici bir kayıt defterine referans yapmaktan 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.

El ile doğrulama gerçekleştirme

Görüntülerin registryPath ö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=<registryPath>" <release-name> <chart-name> --dry-run

VEYA

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

Statik görüntü deposunun ve etiketlerin olduğundan emin olun

Her helm grafiği statik görüntü deposu ve etiketler içermelidir. Statik değerler aşağıdaki gibi ayarlanır:

  • Bunları görüntü satırında ayarlama veya
  • Bunları values.yaml içinde 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
 image: http://myUrl/{{ .Values.image.repository }}:{{ .Values.image.tag}}

registryPath ve imagePullSecrets için injectArtifactStoreDetails gereksinimleri

Bazı durumlarda, üçüncü taraf helm grafikleri registryPath için AOSM gereksinimleriyle tam olarak uyumlu olmayabilir. Bu durumda, helm paketlerinde uyumluluk değişiklikleri yapmaktan kaçınmak için injectArtifactStoreDetails özelliği kullanılabilir. injectArtifactStoreDetails etkinleştirildiğinde, pod işlemleri sırasında uygun registryPath ve imagePullSecrets değerlerini dinamik olarak eklemek için bir web kancası yöntemi kullanılır. Bu, Helm paketinde yapılandırılan değerleri geçersiz kılar. Yayımcının, genellikle values.yaml dosyasının genel bölümünde registryPath ve imagePullSecrets'e başvurulduğu durumlarda hala yasal sahte değerler kullanması gerekir.

Aşağıda values.yaml , bir yayımcının injectArtifactStoreDetails yaklaşımıyla uyumluluk için registryPath ve imagePullSecretsvalue değerlerini nasıl sağlayabileceklerine ilişkin bir örnek gösterilmektedir.

global: 
   registryPath: “azure.io”
   imagePullSecrets: ["abc123"] 

Not

Altta yatan Helm paketinde registryPath boş bırakılırsa, resim indirilmeye çalışılırken site ağ hizmeti (SNS) dağıtımı başarısız olur.

injectArtifactStoreDetails yöntemini kullanma

injectArtifactStoreDetails'i etkinleştirmek için, aşağıdaki örnekte gösterildiği gibi NF kaynak rolüOverrides bölümündeki installOptions parametresini true olarak ayarlayın.

resource networkFunction 'Microsoft.HybridNetwork/networkFunctions@2023-09-01' = {
  name: nfName
  location: location
  properties: {
    nfviType: 'AzureArcKubernetes'
    networkFunctionDefinitionVersionResourceReference: {
      id: nfdvId
      idType: 'Open'
    }
    allowSoftwareUpdate: true
    nfviId: nfviId
    deploymentValues: deploymentValues
    configurationType: 'Open'
    roleOverrideValues: [
      // Use inject artifact store details feature on test app 1
      '{"name":"testapp1", "deployParametersMappingRuleProfile":{"helmMappingRuleProfile":{"options":{"installOptions":{"atomic":"false","wait":"false","timeout":"60","injectArtifactStoreDetails":"true"},"upgradeOptions": {"atomic": "false", "wait": "true", "timeout": "100", "injectArtifactStoreDetails": "true"}}}}}'
    ]
  }
}

Not

Helm grafiği paketi yine de düzgün biçimlendirilmiş registryPath ve imagePullSecrets değerlerini kullanıma sunmalıdır.

registryPath ve imagePullSecrets için küme kayıt defteri gereksinimleri

Küme kayıt defteriyle, görüntüler yayımcı ACR'den nexus AKS (NAKS) kümesindeki yerel bir docker deposuna kopyalanır. Etkinleştirildiğinde, pod işlemleri sırasında uygun registryPath ve imagePullSecrets değerlerini dinamik olarak eklemek için bir webhook yöntemi kullanılır. Bu, helm paketinde yapılandırılan değerleri geçersiz kılar. Yayımcı yine de genellikle values.yaml dosyasının genel bölümünde registryPath ve imagePullSecrets'e başvurulduğu yasal kukla değerleri kullanmalıdır.

Aşağıda values.yaml , bir yayımcının küme kayıt defteri yaklaşımıyla uyumluluk için registryPath ve imagePullSecretsvalue değerlerini nasıl sağlayabileceklerine ilişkin bir örnek gösterilmektedir.

global: 
   registryPath: “azure.io”
   imagePullSecrets: ["abc123"] 

Not

Altta yatan helm paketinde registryPath boş bırakılırsa, bu durumda SNS dağıtımı, görüntü indirilmeye çalışılırken başarısız olur.

Küme kayıt defterini kullanma hakkında bilgi için kavram belgelerine bakın.

Grafikte 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. Kullanıcılar en son, geliştirme veya kararlı gibi değiştirilebilir etiketleri kullanmaktan kaçınmalıdır. Örneğin, deployment.yaml dosyasında .Values.image.tag için 'latest' kullanılırsa, dağıtım başarısız olur.

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

Grafik CRD bildirimi ve kullanım dağılımı

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