التكامل مع نشر Kubernetes باستخدام Helm

يمكن للتطبيقات المستضافة في Kubernetes الوصول إلى البيانات في App Configuration باستخدام مكتبة موفر App Configuration. يمتلك موفر App Configuration إمكانات تخزين مؤقت وتحديث مدمجة بحيث يمكن أن يكون للتطبيقات تكوين ديناميكي دون إعادة التوزيع. إذا كنت تفضل عدم تحديث تطبيقك، فإن هذا البرنامج التعليمي يوضح كيفية إحضار البيانات من App Configuration إلى Kubernetes باستخدام Helm عبر التوزيع. بهذه الطريقة، يمكن لتطبيقك متابعة الوصول إلى التكوين من متغيرات وبيانات سرية Kubernetes. تقوم بتشغيل ترقية Helm عندما تريد أن يلتقط تطبيقك تغييرات التكوين الجديدة.

تلميح

راجع خيارات أحمال العمل المستضافة في Kubernetes للوصول إلى تكوين تطبيق Azure.

يوفر Helm طريقة لتحديد التطبيقات التي تعمل في Kubernetes وتثبيتها وترقيتها. يحتوي مخطط Helm على المعلومات اللازمة لإنشاء مثيل لتطبيق Kubernetes. يتم تخزين التكوين خارج المخطط نفسه، في ملف يسمى values.yaml.

في أثناء عملية الإصدار، يدمج Helm المخطط مع التكوين المناسب لتشغيل التطبيق. على سبيل المثال، يمكن الإشارة إلى المتغيرات المعرفة في values.yaml كمتغيرات البيئة داخل الحاويات قيد التشغيل. يدعم Helm أيضًا إنشاء Kubernetes Secrets، والتي يمكن تركيبها كأحجام بيانات أو عرضها كمتغيرات بيئة.

يمكنك تجاوز القيم المخزنة في القيم. values.yaml من خلال توفير ملفات تكوين إضافية تستند إلى YAML في سطر الأوامر عند تشغيل Helm. يدعم تكوين تطبيق Azure تصدير قيم التكوين إلى ملفات YAML. يتيح دمج إمكانية التصدير هذه في عملية النشر لتطبيقات Kubernetes الاستفادة من قيم التكوين المخزنة في تكوين التطبيق.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • استخدام القيم من تكوين التطبيق عند نشر تطبيق على Kubernetes باستخدام Helm.
  • إنشاء Kubernetes Secret استنادًا إلى مرجع Key Vault في تكوين التطبيق.

يفترض هذا البرنامج التعليمي الفهم الأساسي لإدارة Kubernetes باستخدام Helm. تعرف على المزيد حول تثبيت التطبيقات باستخدام Helm في خدمة Azure Kubernetes Service.

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

إضافة قيم المفاتيح

أضف قيم المفاتيح التالية إلى متجر App Configuration واترك Label و Content Type بقيمهما الافتراضية. لمزيد من المعلومات حول كيفية إضافة قيم المفاتيح إلى مخزن باستخدام مدخل Microsoft Azure أو CLI، انتقل إلى إنشاء قيمة مفتاح.

مفتاح القيمة
settings.color أبيض
settings.message البيانات من Azure App Configuration

أضف مرجع Key Vault إلى تكوين التطبيق

  1. تسجيل الدخول إلى مدخل Microsoft Azure وإضافة بيانات سرية إلى Key Vault بالاسم Password والقيمة myPassword.

  2. حدد مثيل متجر تكوين التطبيق الذي قمت بإنشائه في القسم السابق.

  3. حدد Configuration Explorer.

  4. حدد + Create>Key vault reference، ثم حدد القيم التالية:

    • Key: حدد secrets.password.
    • Label: اترك هذه القيمة فارغة.
    • Subscription وResource group وKey vault: أدخل القيم المطابقة للقيم الموجودة في خزنة المفاتيح التي أنشأتها في الخطوة السابقة.
    • Secret: حدد المفتاح السري باسم Password الذي قمت بإنشائه في القسم السابق.

إنشاء مخطط Helm

أولاً، قم بإنشاء نموذج مخطط Helm باستخدام الأمر التالي:

helm create mychart

يقوم Helm بإنشاء دليل جديد يسمى mychart بالبنية الموضحة أدناه.

تلميح

اتبع دليل الرسوم البيانية هذا لمعرفة المزيد.

mychart
|-- Chart.yaml
|-- charts
|-- templates
|   |-- NOTES.txt
|   |-- _helpers.tpl
|   |-- deployment.yaml
|   |-- ingress.yaml
|   `-- service.yaml
`-- values.yaml

بعد ذلك، قم بتحديث spec:template:spec:containers من ملف deployment.yaml. يضيف المقتطف التالي متغيري بيئة إلى الحاوية. ستقوم بتعيين قيمهم ديناميكيًا في وقت النشر.

env:
- name: Color
    value: {{ .Values.settings.color }}
- name: Message
    value: {{ .Values.settings.message }}

يجب أن يبدو ملف deployment.yaml الكامل بعد التحديث كما هو موضح أدناه.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "mychart.name" . }}
    helm.sh/chart: {{ include "mychart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "mychart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "mychart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: Color
              value: {{ .Values.settings.color }}
            - name: Message
              value: {{ .Values.settings.message }}
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
{{ toYaml .Values.resources | indent 12 }}
    {{- with .Values.nodeSelector }}
      nodeSelector:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.affinity }}
      affinity:
{{ toYaml . | indent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
{{ toYaml . | indent 8 }}
    {{- end }}

لتخزين البيانات الحساسة كبيانات سرية في Kubernetes Secrets، أضف ملف secrets.yaml ضمن مجلد القوالب.

تلميح

تعرف على المزيد حول كيفية استخدام Kubernetes Secrets.

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: {{ .Values.secrets.password | b64enc }}

أخيرًا، قم بتحديث ملف القيم values.yaml بالمحتوى التالي لتوفير القيم الافتراضية لإعدادات التكوين والمفاتيح السرية التي تشير إليها في ملف deployment.yaml وsecrets.yaml اختياريًا. ستتم الكتابة فوق قيمها الفعلية من خلال التكوين الذي تم سحبه من تكوين التطبيق.

# settings will be overwritten by App Configuration
settings:
  color: red
  message: myMessage

تمرير التكوين من App Configuration في تثبيت Helm

أولاً، قم بتنزيل التكوين من «App Configuration» إلى ملف myConfig.yaml. استخدم عامل تصفية المفاتيح لتنزيل المفاتيح التي تبدأ بقيمة settings فقط. إذا كان عامل تصفية المفتاح في حالتك غير كاف لاستبعاد مفاتيح مراجع Key Vault، فإنه يمكنك استخدام الوسيطة --skip-keyvault لاستبعادها.

تلميح

تعرّف على المزيد حول أمر التصدير export command.

az appconfig kv export -n myAppConfiguration -d file --path myConfig.yaml --key "settings.*"  --separator "." --format yaml

بعد ذلك، قم بتنزيل المفاتيح السرية إلى ملف يسمى mySecrets.yaml. تحل وسيطة سطر الأوامر --resolve-keyvault مراجع Key Vault عن طريق استرداد القيم الفعلية في Key Vault. ستحتاج إلى تشغيل هذا الأمر باستخدام بيانات الاعتماد التي لها أذونات الوصول إلى Key Vault المقابل.

تحذير

نظرًا إلى أن هذا الملف يحتوي على معلومات حساسة، احتفظ بالملف بعناية ونظفه عند عدم الحاجة إليه بعد الآن.

az appconfig kv export -n myAppConfiguration -d file --path mySecrets.yaml --key "secrets.*" --separator "." --resolve-keyvault --format yaml

استخدم وسيطة -f لترقية helm لتمرير ملفي التكوين اللذين قمت بإنشائهما. سيتجاوزان قيم التكوين المحددة في values.yaml بالقيم المصدرة من تكوين التطبيق App Configuration.

helm upgrade --install -f myConfig.yaml -f mySecrets.yaml "example" ./mychart

يمكنك أيضا استخدام الوسيطة --set لترقية helm لتمرير قيم المفاتيح الحرفية. يعد استخدام الوسيطة --set طريقة جيدة لتجنب الاحتفاظ بالبيانات الحساسة على القرص.

$secrets = az appconfig kv list -n myAppConfiguration --key "secrets.*" --resolve-keyvault --query "[*].{name:key, value:value}" | ConvertFrom-Json

foreach ($secret in $secrets) {
  $keyvalues += $secret.name + "=" + $secret.value + ","
}

if ($keyvalues){
  $keyvalues = $keyvalues.TrimEnd(',')
  helm upgrade --install --set $keyvalues "example" ./mychart
}
else{
  helm upgrade --install "example" ./mychart
}

تحقق من تعيين التكوينات والمفاتيح السرية بنجاح من خلال الدخول إلى لوحة Kubernetes Dashboard. سترى أنه تم ملء القيمتين color وmessage من تكوين التطبيق في متغيرات بيئة الحاوية.

Quickstart app launch local

تمت إضافة مخازن سرية واحدة، وكلمة مرور، كمرجع Key Vault في تكوين التطبيق إلى Kubernetes Secrets.

Screenshot that highlights the password in the Data section.

تنظيف الموارد

إذا كنت لا تريد مواصلة استخدام الموارد التي تم إنشاؤها في هذه المقالة، يوصى بحذف مجموعة الموارد التي أنشأتها هنا لتجنب الرسوم.

هام

حذف مجموعة الموارد لا يمكن التراجع عنه. يتم حذف مجموعة الموارد وجميع الموارد المضمنة فيها نهائيًا. تأكد من عدم حذفك للموارد أو مجموعة المورد الخاطئة عن غير قصد. في حالة إنشاء الموارد لهذه المقالة داخل مجموعة موارد تشتمل على موارد أخرى تريد الاحتفاظ بها، احذف كل مورد على حدة من الجزء الخاص به بدلًا من حذف مجموعة الموارد.

  1. سجل الدخول إلى مدخل Microsoft Azure، وحدد Resource groups.
  2. في المربع تصفية حسب الاسم ، أدخل اسم مجموعة الموارد الخاصة بك.
  3. في قائمة النتائج، حدد اسم مجموعة الموارد لاستعراض نظرة عامة.
  4. حدد Delete resource group.
  5. يُطلب منك تأكيد حذف مجموعة الموارد. أدخل اسم مجموعة الموارد للتأكيد وحدد "Delete".

بعد بضع لحظات، يتم حذف مجموعة الموارد وكافة مواردها.

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

في هذا البرنامج التعليمي، قمت بتصدير بيانات تكوين تطبيق Azure لاستخدامها في نشر Kubernetes باستخدام Helm. لمعرفة المزيد بشأن كيفية استخدام تكوين التطبيق، تابع إلى نماذج Azure CLI.