Gambaran umum persyaratan Helm
Helm adalah manajer paket untuk Kubernetes yang membantu menyederhanakan manajemen siklus hidup aplikasi. Paket Helm disebut bagan dan terdiri dari konfigurasi YAML dan file templat. Setelah eksekusi operasi Helm, bagan dirender ke dalam file manifes Kubernetes untuk memicu tindakan siklus hidup aplikasi yang sesuai. Untuk integrasi paling efisien dengan Azure Operator Service Manager (AOSM), penerbit harus mempertimbangkan pertimbangan praktik terbaik tertentu saat mengembangkan bagan Helm.
Pertimbangan untuk registryUrl dan imagePullSecrets
Setiap bagan Helm umumnya memerlukan registriUrl dan imagePullSecrets. Paling umum, penerbit mengekspos parameter ini dalam values.yaml. Pada awalnya, AOSM bergantung pada penerbit yang mengekspos nilai-nilai ini secara ketat, sehingga dapat diganti dengan nilai Azure yang tepat selama penyebaran. Lembur, tidak semua penerbit dapat dengan mudah mematuhi penanganan ketat nilai-nilai ini yang diperlukan oleh AOSM.
- Beberapa bagan menyembunyikan registriUrl dan/atau imagePullSecrets di belakang kondisional, atau pembatasan nilai lainnya, yang tidak selalu terpenuhi.
- Beberapa bagan tidak mendeklarasikan registryUrl dan/atau imagePullSecrets sebagai string bernama yang diharapkan, sebagai array.
Untuk mengurangi persyaratan kepatuhan yang ketat pada penerbit, AOSM kemudian memperkenalkan dua metode yang ditingkatkan untuk menangani nilai-nilai ini. Pertama injectArtifactStoreDetail dan akhirnya Cluster Registry. Kedua metode yang lebih baru ini tidak bergantung pada registriUrl atau imagePullSecrets yang valid muncul dalam paket Helm. Sebagai gantinya, metode ini menyuntikkan nilai-nilai ini langsung ke dalam operasi pod, atas nama fungsi jaringan.
Ringkasan metode untuk registryUrl dan imagePullSecrets
Ketiga metode didukung dan dijelaskan dalam artikel ini. Penerbit harus memilih opsi terbaik untuk Fungsi Jaringan dan kasus penggunaannya.
Warisan.
- Mengharuskan penerbit untuk secara patuh membuat parameter registriUrl & imagePullSecrets dalam nilai helm dan templat penyebaran untuk penggantian.
- Gambar dihosting di penerbit Azure Container Registry (ACR).
InjectArtifactStoreDetail.
- Menggunakan webhook untuk menyuntikkan registryUrl & imagePullSecrets langsung ke operasi pod, dengan dependensi minimal pada helm.
- Gambar masih dihosting di ACR penerbit.
Registri Kluster.
- Menggunakan webhook untuk menyuntikkan registryUrl & imagePullSecrets langsung ke dalam operasi pod, tanpa dependensi pada helm.
- Gambar dihosting di registri kluster ekstensi NFO lokal.
Catatan
Dalam ketiga kasus, AOSM menggantikan nilai AOSM untuk nilai apa pun yang diekspos penerbit dalam templat. Satu-satunya perbedaan adalah metode untuk penggantian.
Persyaratan warisan untuk registriUrl dan imagePullSecrets
Azure Operator Service Manager (AOSM) menggunakan layanan Network Function Manager (NFM) untuk menyebarkan Containerized Network Functions (CNF). Dengan metode warisan, NFM menggantikan nilai registri kontainer AOSMUrl dan imagePullSecrets ke dalam operasi helm selama penyebaran Fungsi Jaringan (NF).
Menggunakan metode warisan
Templat penyebaran helm berikut menunjukkan contoh bagaimana penerbit harus mengekspos registriPath dan imagePullSecrets untuk kompatibilitas dengan pendekatan warisan AOSM.
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
File berikut values.schema.json
menunjukkan contoh bagaimana penerbit dapat dengan mudah mengatur persyaratan registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.
{
"$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" ],
}
}
}
Berikut ini NFDVersion request payload
menunjukkan contoh bagaimana penerbit dapat menyediakan nilai registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Berikut ini values.yaml
menunjukkan contoh bagaimana penerbit dapat menyediakan nilai registriPath dan imagePullSecretsvalue untuk kompatibilitas dengan pendekatan warisan AOSM.
global:
imagePullSecrets: []
registryPath: “”
Catatan
- RegistryPath diatur tanpa awalan apa pun seperti
https://
atauoci://
. Jika diperlukan, penerbit harus menentukan awalan dalam paket helm. - imagePullSecrets dan registryPath harus disediakan dalam langkah membuat onboarding NFDVersion.
Pertimbangan lain dengan metode Warisan
Publisher harus mempertimbangkan rekomendasi berikut saat menggunakan metode warisan:
- Hindari referensi ke registri eksternal
- Melakukan validasi manual
- Memastikan repositori dan tag gambar statis
Hindari referensi ke registri eksternal
Pengguna harus menghindari penggunaan referensi ke registri eksternal. Misalnya, jika deployment.yaml menggunakan jalur registri hardcoded atau referensi registri eksternal, itu gagal validasi.
Melakukan validasi manual
Tinjau gambar dan spesifikasi kontainer yang dibuat untuk memastikan gambar memiliki awalan registriURL dan imagePullSecrets diisi dengan secretName.
helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
ATAU
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>
Memastikan repositori dan tag gambar statis
Setiap bagan helm harus berisi repositori dan tag gambar statis. Nilai statis diatur sebagai berikut:
- Mengaturnya di baris gambar atau,
- Mengaturnya dalam values.yaml dan tidak mengekspos nilai-nilai ini dalam Versi Desain Fungsi Jaringan (NFDV).
Versi Desain Fungsi Jaringan (NFDV) harus memetakan ke sekumpulan bagan dan gambar helm statis. Bagan dan gambar hanya diperbarui dengan menerbitkan Versi Desain Fungsi Jaringan (NFDV) baru.
image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“
Atau
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}}
persyaratan injectArtifactStoreDetails untuk registriUrl dan imagePullSecrets
Dalam beberapa kasus, bagan helm pihak ketiga mungkin tidak sepenuhnya sesuai dengan persyaratan AOSM untuk registriURL. Dalam hal ini, fitur injectArtifactStoreDetails dapat digunakan untuk menghindari perubahan kepatuhan pada paket helm. Dengan diaktifkannya injectArtifactStoreDetails, metode webhook digunakan untuk menyuntikkan registryUrl dan imagePullSecrets yang tepat secara dinamis selama operasi pod. Ini mengambil alih nilai yang dikonfigurasi dalam paket helm.
Menggunakan metode injectArtifactStoreDetails
Untuk mengaktifkan injectArtifactStoreDetails, atur parameter installOptions di bagian roleOverrides sumber daya NF ke true, seperti yang ditunjukkan dalam contoh berikut.
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"}}}}}'
]
}
}
Catatan
Paket bagan helm masih harus mengekspos nilai registriurl dan imagePullSecrets yang diformat dengan benar.
Persyaratan registri kluster untuk registriUrl dan imagePullSecrets
Untuk informasi tentang menggunakan registri kluster, silakan lihat dokumentasi konsep.
Pembatasan kekekalan bagan
Pembatasan kekekalan mencegah perubahan pada file atau direktori. Misalnya, file yang tidak dapat diubah tidak dapat diubah atau diganti namanya. Pengguna harus menghindari penggunaan tag yang dapat diubah seperti terbaru, dev, atau stabil. Misalnya, jika deployment.yaml menggunakan 'terbaru' untuk . Values.image.tag penyebaran akan gagal.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
Deklarasi CRD bagan dan pemisahan penggunaan
Sebaiknya bagi deklarasi dan penggunaan definisi sumber daya pelanggan (CRD) menjadi bagan helm terpisah untuk mendukung pembaruan. Untuk informasi terperinci lihat: method-2-separate-charts