أساسيات Kubernetes: دليل شامل لتنسيق حاوياتك
اكتشف كيف تُحدث Kubernetes ثورة في نشر التطبيقات المعبأة في حاويات وإدارتها. دليل عملي مع أمثلة واقعية.
InSkillCoach
أساسيات Kubernetes: دليل شامل لتنسيق حاوياتك
أصبحت Kubernetes (K8s) المنصة المعيارية لتنسيق الحاويات (Orchestration) على نطاق واسع. يعرض لك هذا الدليل المفاهيم الأساسية في Kubernetes وكيفية استخدامها بفعالية لإدارة تطبيقاتك المعبأة في حاويات.
ما هي Kubernetes؟
Kubernetes منصة مفتوحة المصدر أنشأتها Google لأتمتة نشر التطبيقات المعبأة في حاويات وتغيير حجمها وإدارتها. وهي توفر إطارًا لتشغيل الأنظمة الموزعة بشكل مرن وقادر على التعافي.
لماذا Kubernetes؟
- النشر الآلي: نشر وتحديثات دون توقف عن الخدمة
- الإصلاح الذاتي: إعادة تشغيل الحاويات المعطلة تلقائيًا
- التوسع الأفقي: ضبط السعة تلقائيًا بحسب الحمل
- موازنة الحمل: توزيع حركة المرور بين النسخ
- تنسيق التخزين: إدارة التخزين الدائم
- إدارة الإعدادات: فصل الشيفرة عن الإعدادات
- دعم السحابات المتعددة: تعمل على جميع مزودي الخدمات السحابية الرئيسيين
معمارية Kubernetes
تتكون معمارية Kubernetes من عدة مكونات أساسية:
مستوى التحكم (Control Plane)
- API Server: نقطة الدخول لجميع أوامر REST
- etcd: قاعدة بيانات من نوع مفتاح-قيمة لتخزين حالة العنقود
- Scheduler: يسند الـ pods إلى العُقد
- Controller Manager: يحافظ على الحالة المطلوبة للعنقود
- Cloud Controller Manager: واجهة التعامل مع واجهات برمجة التطبيقات (APIs) الخاصة بمزودي الخدمات السحابية
العُقد (Nodes)
- Kubelet: وكيل يعمل على كل عقدة ويتأكد من أن الحاويات تعمل
- Kube-proxy: يحافظ على قواعد الشبكة على العُقد
- Container Runtime: البرنامج المسؤول عن تشغيل الحاويات (Docker وcontainerd وغيرهما)
تثبيت Kubernetes
Minikube (للتطوير المحلي)
# Installation sur Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Démarrer un cluster Kubernetes local
minikube start
# Vérifier l'état
minikube status
kubeadm (لعناقيد الإنتاج)
# Installation des prérequis
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# Ajouter la clé GPG et le dépôt Kubernetes
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Installer kubeadm, kubelet et kubectl
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# Initialiser le cluster (sur le nœud maître)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
# Configurer kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl (أداة سطر الأوامر)
# Installation sur Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Vérifier l'installation
kubectl version --client
المفاهيم الأساسية في Kubernetes
Pods
الـ pod هو الوحدة الأساسية في Kubernetes، ويمثل حاوية واحدة أو أكثر تتشارك التخزين والشبكة.
# pod.yaml - Exemple de pod simple
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
# Créer un pod
kubectl apply -f pod.yaml
# Lister les pods
kubectl get pods
# Décrire un pod
kubectl describe pod nginx-pod
# Supprimer un pod
kubectl delete pod nginx-pod
Deployments
تتيح الـ deployments إدارة دورة حياة الـ pods والـ ReplicaSets، مما يسهّل التحديثات وعمليات التراجع (rollbacks).
# deployment.yaml - Exemple de déploiement
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:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
# Créer un déploiement
kubectl apply -f deployment.yaml
# Lister les déploiements
kubectl get deployments
# Mettre à jour l'image d'un déploiement
kubectl set image deployment/nginx-deployment nginx=nginx:1.20
# Effectuer un rollback
kubectl rollout undo deployment/nginx-deployment
Services
تتيح الـ services إتاحة التطبيقات العاملة على مجموعة من الـ pods.
# service.yaml - Exemple de service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP # Autres types: NodePort, LoadBalancer, ExternalName
# Créer un service
kubectl apply -f service.yaml
# Lister les services
kubectl get services
# Décrire un service
kubectl describe service nginx-service
Namespaces
توفر الـ namespaces آلية لعزل مجموعات الموارد داخل العنقود.
# namespace.yaml - Exemple de namespace
apiVersion: v1
kind: Namespace
metadata:
name: development
# Créer un namespace
kubectl apply -f namespace.yaml
# Lister les namespaces
kubectl get namespaces
# Créer une ressource dans un namespace spécifique
kubectl apply -f pod.yaml -n development
ConfigMaps وSecrets
تتيح فصل الإعدادات عن الحاويات.
# configmap.yaml - Exemple de ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database.host: "db.example.com"
database.port: "5432"
# secret.yaml - Exemple de Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
# Les valeurs doivent être encodées en base64
database.password: cGFzc3dvcmQxMjM= # "password123" encodé en base64
# Créer un ConfigMap
kubectl apply -f configmap.yaml
# Créer un Secret
kubectl apply -f secret.yaml
# Utiliser un ConfigMap dans un pod
spec:
containers:
- name: app
image: app:1.0
envFrom:
- configMapRef:
name: app-config
استخدام الـ Volumes
تتيح الـ volumes تخزين البيانات بما يتجاوز عمر الـ pod.
# pvc.yaml - Exemple de PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
# pod-with-volume.yaml - Pod utilisant un volume
apiVersion: v1
kind: Pod
metadata:
name: data-pod
spec:
containers:
- name: data-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: data-volume
volumes:
- name: data-volume
persistentVolumeClaim:
claimName: data-pvc
إدارة الـ Ingress
يتيح الـ Ingress الوصول إلى خدمات HTTP وHTTPS من خارج العنقود.
# ingress.yaml - Exemple d'Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
# Installer un contrôleur Ingress (exemple avec NGINX)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml
# Créer un Ingress
kubectl apply -f ingress.yaml
تصحيح أخطاء التطبيقات
السجلات والصدفة التفاعلية
# Afficher les logs d'un pod
kubectl logs nginx-pod
# Exécuter une commande dans un pod
kubectl exec -it nginx-pod -- /bin/bash
# Suivre les logs en temps réel
kubectl logs -f nginx-pod
تشخيص المشكلات
# Vérifier l'état d'un pod
kubectl get pod nginx-pod -o wide
# Décrire un pod pour voir les événements
kubectl describe pod nginx-pod
# Vérifier les nœuds
kubectl get nodes
kubectl describe node <node-name>
إدارة الموارد
حدود الموارد
# resource-limits.yaml - Exemple de limites de ressources
apiVersion: v1
kind: Pod
metadata:
name: resource-pod
spec:
containers:
- name: app
image: app:1.0
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Horizontal Pod Autoscaler (HPA)
# hpa.yaml - Exemple d'autoscaling
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
# Créer un HPA
kubectl apply -f hpa.yaml
# Lister les HPAs
kubectl get hpa
الأمان في Kubernetes
RBAC (التحكم في الوصول القائم على الأدوار)
# role.yaml - Exemple de rôle
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
# rolebinding.yaml - Exemple de liaison de rôle
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
Network Policies
# network-policy.yaml - Exemple de politique réseau
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-network-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: app
ports:
- protocol: TCP
port: 5432
أفضل الممارسات في Kubernetes
- استخدم الـ deployments بدلًا من الـ pods المنفردة
- حدّد حدود الموارد لجميع الحاويات
- اضبط فحوص الجاهزية (liveness وreadiness probes)
- طبّق التوسع الأفقي للأحمال المتغيرة
- افصل البيئات باستخدام الـ namespaces
- استخدم الـ labels والـ annotations لتنظيم الموارد
- طبّق سياسات الشبكة لتأمين الاتصالات
- اضبط RBAC للحد من الوصول
- استخدم الـ Secrets للبيانات الحساسة
- ضع استراتيجية نسخ احتياطي لـ etcd
أدوات مكملة لـ Kubernetes
Helm (مدير الحزم)
# Installation de Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# Ajouter un dépôt
helm repo add bitnami https://charts.bitnami.com/bitnami
# Installer une application
helm install my-release bitnami/wordpress
Kustomize (إدارة الإعدادات)
# kustomization.yaml - Exemple de configuration Kustomize
resources:
- deployment.yaml
- service.yaml
namespace: my-namespace
commonLabels:
app: my-app
environment: production
# Appliquer une configuration Kustomize
kubectl apply -k ./
Prometheus وGrafana (المراقبة)
# Installation via Helm
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
الخاتمة
أصبحت Kubernetes الأداة المعيارية لتنسيق الحاويات بفضل مرونتها ومتانتها ونظامها البيئي الغني. ويُعد فهم مفاهيمها الأساسية أمرًا ضروريًا لإدارة التطبيقات الحديثة على نطاق واسع بكفاءة.
عند إتقانك Kubernetes ستتمكن من:
- نشر التطبيقات على نطاق واسع
- ضمان توافر عالٍ
- تحسين استخدام الموارد
- تبسيط العمليات
- توفير نموذج تصريحي لإدارة البنية التحتية
قد يكون منحنى التعلم في Kubernetes حادًا، لكن الاستثمار فيه يستحق العناء لأي فريق يعمل مع معماريات قائمة على الحاويات.
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش