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