تخطَّ إلى المحتوى

Charts و values.yaml

ستتعلم بنية Helm chart، كيف تستخدم values.yaml، وكيف تنفذ install و upgrade و rollback بطريقة عملية.

Helm لا يستبدل Kubernetes. Helm يضيف templating و packaging فوق YAML حتى لا تكرر نفس manifests لكل بيئة.

web-chart/
Chart.yaml
values.yaml
templates/
deployment.yaml
service.yaml
apiVersion: v2
name: web-chart
description: Simple Nginx chart for the Arabic Kubernetes course
type: application
version: 0.1.0
appVersion: "1.27"
replicaCount: 2
image:
repository: nginx
tag: "1.27"
service:
type: ClusterIP
port: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-web
labels:
app.kubernetes.io/name: web
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: web
app.kubernetes.io/instance: {{ .Release.Name }}
template:
metadata:
labels:
app.kubernetes.io/name: web
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
containers:
- name: web
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- name: http
containerPort: 80
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-web
labels:
app.kubernetes.io/name: web
app.kubernetes.io/instance: {{ .Release.Name }}
spec:
type: {{ .Values.service.type }}
selector:
app.kubernetes.io/name: web
app.kubernetes.io/instance: {{ .Release.Name }}
ports:
- name: http
port: {{ .Values.service.port }}
targetPort: http
Terminal window
helm lint ./web-chart
helm template demo ./web-chart
helm install demo ./web-chart
helm upgrade demo ./web-chart --set image.tag=1.28
helm history demo
helm rollback demo 1
helm uninstall demo

Expected output:

==> Linting ./web-chart
1 chart(s) linted, 0 chart(s) failed
NAME: demo
STATUS: deployed
REVISION: 1

values-prod.yaml:

replicaCount: 3
image:
tag: "1.27"
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1"
memory: "512Mi"

تطبيقها:

Terminal window
helm upgrade --install web-prod ./web-chart -f values-prod.yaml
المشكلةالتشخيصالحل
template لا يرندرhelm templateراجع الأقواس والمسافات
resources غير صحيحةhelm lint و helm templateاستخدم toYaml و nindent
upgrade كسر التطبيقhelm historyنفذ helm rollback
values كثيرة ومربكةمراجعة chartقسم values حسب domain ولا تبالغ في templating

Lab: إنشاء Helm chart لتطبيق Nginx

المستوى: مبتدئ الوقت: 50 دقيقة الأدوات: helm, kubectl

الهدف: بناء chart بسيط، رندر manifests، تنفيذ upgrade، ثم rollback.

  • Helm مثبت.
  • Cluster محلي يعمل.
  1. أنشئ chart:
Terminal window
helm create web-chart
  1. استبدل الملفات بالمحتوى الموجود في الدرس.
  2. افحص chart:
Terminal window
helm lint ./web-chart
helm template demo ./web-chart
  1. ثبته:
Terminal window
helm install demo ./web-chart
kubectl get deploy,svc -l app.kubernetes.io/instance=demo
  1. نفذ upgrade:
Terminal window
helm upgrade demo ./web-chart --set image.tag=1.28
helm history demo
  1. نفذ rollback:
Terminal window
helm rollback demo 1
REVISION UPDATED STATUS CHART APP VERSION
1 Fri May 8 10:00:00 2026 superseded web-chart-0.1.0 1.27
2 Fri May 8 10:05:00 2026 deployed web-chart-0.1.0 1.27
Terminal window
helm uninstall demo

الربط بالمشروع النهائي

Section titled “الربط بالمشروع النهائي”

Project 5 سيحول مشروع full-stack إلى Helm chart. في Project 6 سيستهلك Argo CD هذا chart من Git.