Deployment
در Kubernetes برای مدیریت و استقرار خودکار پادها (Pods
) استفاده میشود. این شیء به شما امکان میدهد مقیاسپذیری، بهروزرسانی، بازگشت به نسخه قبلی (Rollback) و در دسترس بودن سرویس را بهصورت خودکار مدیریت کنید.
اجرای خودکار چندین نمونه از یک برنامه (ReplicaSets).
مقیاسپذیری افقی (افزایش یا کاهش تعداد پادها بر اساس نیاز).
بهروزرسانی Rolling Update بدون قطع شدن سرویس.
امکان بازگشت به نسخه قبلی (Rollback) در صورت بروز مشکل.
* مشخص کردن API و نوع Kubernetes Resource
apiVersion: apps/v1
→ نسخه API که این Deployment
از آن استفاده میکند.
-kind: Deployment
→ نشان میدهد که این فایل مربوط به یک استقرار (Deployment) است.
***
* تنظیمات metadata (شناسهیابی و نامگذاری)
-
name: php
→ نام این Deployment که در Kubernetes قابل شناسایی است.
-
labels: app: php
→ یک برچسب (Label) برای دستهبندی این سرویس در Kubernetes.
***
* تعریف مشخصات استقرار (spec)
-
replicas: 1
→ تعداد نسخههای این برنامه که اجرا خواهد شد (در اینجا فقط یک عدد).
-
selector
→ این قسمت مشخص میکند که Deployment به دنبال Pods
ی است که دارای labels: app: php
باشند.
-
template
→ این قسمت مشخصات پادهایی که قرار است توسط Deployment اجرا شود را تعریف میکند.
-
labels: app: php
→ هر Pod که از این Deployment
ساخته شود، این برچسب را خواهد داشت.
-
containers
→ این قسمت لیست کانتینرهای داخل Pod را مشخص میکند.
-
name: php
→ نام این کانتینر (میتوان از آن برای logs
و exec
استفاده کرد).
-
image: php:8.0-apache
→ ایمیج Docker که استفاده میشود (PHP 8.0
همراه با Apache).
-
ports: - containerPort: 80
→ این کانتینر روی پورت ۸۰ درون Pod اجرا خواهد شد (که معمولاً برای وبسرور استفاده میشود).
***
روش اول دستور:
command → دستور
command: ["sh", "-c"]
args:
- |
PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \
&& mkdir -p /tmp/sourceguardian \
&& apache2-foreground
روش دوم دستور:
command → دستور
command:
- sh
- -c
- |
while true; do sleep 3600; done
***
سیاست راهاندازی (Restart Policy)
-
restartPolicy: Never → هرگز به این معنی است که پاد پس از خروج (Crash) مجدداً راهاندازی نخواهد شد.در صورتی که قصد داشته باشیم پس از کرش دوباره راهاندازی شود، باید مقدار Always یا OnFailure را استفاده نمود.
***
* منابع تخصیصیافته (Resource Limits)
resources:
limits:
memory: "512Mi"
cpu: "500m"
512Mi → حداکثر 512 مگابایت RAM.
500m → حداکثر نصف یک پردازنده (0.5 CPU core).
-
*** متغیرهای محیطی (Environment Variables)
env:
- name: DB_HOST
value: 20.20.20.20
- name: DB_NAME
value: WordPress
-
*** ذخیرهسازی دائمی (Volumes)
-
از PersistentVolumeClaim با نام php-pvc برای ذخیرهسازی دائمی استفاده میشود.
-
claimName: php-pvc نام ادعا
-
*** اتصال دایرکتوری به کانتینر (hostPath)
-
hostPath → اتصال دایرکتوری به کانتینر
-
path: /var/www/html/ → مسیر
-
type: DirectoryOrCreate → اگر دایرکتوری وجود نداشته باشد، آن را ایجاد میکند.
-
initContainer برای بررسی اجرای کانتینر
-
initContainer ایجاد شده که قبل از اجرای کانتینر اصلی اجرا میشود. یعنی باعث میشود پاد اصلی فقط زمانی اجرا شود که پایگاه داده آماده باشد.
-
readinessProbe بررسی میکند که آیا کانتینر آماده سرویسدهی است یا نه.
-
initialDelaySeconds: 5 → پس از ۵ ثانیه اولین بررسی انجام میشود.
-
periodSeconds: 10 → هر ۱۰ ثانیه یکبار این بررسی انجام میشود.
Service
در Kubernetes یک IP پایدار و یک نقطه دسترسی ثابت برای ارتباط بین پادها و سایر سرویسها ارائه میدهد. چون پادها ممکن است به دلایل مختلف حذف یا جایگزین شوند، Service
بهعنوان یک لایه مجازیسازی شبکهای برای آنها عمل میکند.
امکان ارتباط پایدار بین پادها، حتی اگر پادها تغییر کنند.
تعادل بار (Load Balancing
) بین چندین پاد.
در دسترس قرار دادن برنامه از بیرون خوشه (NodePort, LoadBalancer).
---
Ingress
در Kubernetes برای مدیریت ورود درخواستهای HTTP/HTTPS از بیرون خوشه به سرویسهای داخلی استفاده میشود. این شیء برخلاف Service
که فقط IP و پورت را مدیریت میکند، میتواند مسیرها و دامنههای مختلف را مدیریت کند.
هدایت درخواستهای HTTP/HTTPS به سرویسهای مناسب.
مدیریت دامنههای مختلف (مثلاً api.example.com
و web.example.com
).
افزودن گواهینامه SSL/TLS برای امنیت بیشتر.
کنترل و مسیریابی پیشرفتهی Load Balancing.
صادرکننده خوشه (ClusterIssuer) یکی از مؤلفههای Cert-Manager است که برای صدور گواهینامههای SSL/TLS در سطح کل خوشه استفاده میشود.
صدور خودکار گواهینامههای Let's Encrypt برای دامنهها.
رمزگذاری ارتباطات HTTPS بین کلاینتها و سرویسهای داخلی.
تمدید خودکار گواهینامهها بدون نیاز به مداخله دستی.
نقشه پیکربندی (ConfigMap) در Kubernetes برای ذخیره و مدیریت تنظیمات متنی (Config Files, Environment Variables) برنامهها به کار میرود. این قابلیت به شما امکان میدهد بدون نیاز به تغییر تصویر (Image) برنامه، تنظیمات آن را مدیریت کنید.
جدا کردن تنظیمات از کد برنامه برای انعطافپذیری بیشتر.
ذخیره و مدیریت متغیرهای محیطی (Environment Variables
).
بهروزرسانی تنظیمات بدون نیاز به بازسازی Image برنامه.
استفاده در Deployment
برای تنظیم مقداردهی متغیرها.
کامپوننت | کاربرد |
---|---|
Deployment | مدیریت استقرار، مقیاسپذیری و بهروزرسانی برنامهها |
Service | ارائه آدرس پایدار و امکان ارتباط بین پادها |
Ingress | مسیردهی درخواستهای خارجی به سرویسها و مدیریت دامنهها |
ClusterIssuer | صدور و مدیریت خودکار گواهینامههای SSL/TLS |
ConfigMap | ذخیرهسازی و مدیریت تنظیمات برنامه بدون تغییر Image |
acme.cert-manager.io/v1
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
cert-manager.io/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta3
helm.cattle.io/v1
k3s.cattle.io/v1
metrics.k8s.io/v1beta1
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
traefik.containo.us/v1alpha1
traefik.io/v1alpha1
v1
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
podtemplates v1 true PodTemplate
replicationcontrollers rc v1 true ReplicationController
resourcequotas quota v1 true ResourceQuota
secrets v1 true Secret
serviceaccounts sa v1 true ServiceAccount
services svc v1 true Service
challenges acme.cert-manager.io/v1 true Challenge
orders acme.cert-manager.io/v1 true Order
mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
validatingadmissionpolicies admissionregistration.k8s.io/v1 false ValidatingAdmissionPolicy
validatingadmissionpolicybindings admissionregistration.k8s.io/v1 false ValidatingAdmissionPolicyBinding
validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
apiservices apiregistration.k8s.io/v1 false APIService
controllerrevisions apps/v1 true ControllerRevision
daemonsets ds apps/v1 true DaemonSet
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
statefulsets sts apps/v1 true StatefulSet
selfsubjectreviews authentication.k8s.io/v1 false SelfSubjectReview
tokenreviews authentication.k8s.io/v1 false TokenReview
localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler
cronjobs cj batch/v1 true CronJob
jobs batch/v1 true Job
certificaterequests cr,crs cert-manager.io/v1 true CertificateRequest
certificates cert,certs cert-manager.io/v1 true Certificate
clusterissuers cert-manager.io/v1 false ClusterIssuer
issuers cert-manager.io/v1 true Issuer
certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
leases coordination.k8s.io/v1 true Lease
endpointslices discovery.k8s.io/v1 true EndpointSlice
events ev events.k8s.io/v1 true Event
flowschemas flowcontrol.apiserver.k8s.io/v1 false FlowSchema
prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1 false PriorityLevelConfiguration
helmchartconfigs helm.cattle.io/v1 true HelmChartConfig
helmcharts helm.cattle.io/v1 true HelmChart
addons k3s.cattle.io/v1 true Addon
etcdsnapshotfiles k3s.cattle.io/v1 false ETCDSnapshotFile
nodes metrics.k8s.io/v1beta1 false NodeMetrics
pods metrics.k8s.io/v1beta1 true PodMetrics
ingressclasses networking.k8s.io/v1 false IngressClass
ingresses ing networking.k8s.io/v1 true Ingress
networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
runtimeclasses node.k8s.io/v1 false RuntimeClass
poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
roles rbac.authorization.k8s.io/v1 true Role
priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
csidrivers storage.k8s.io/v1 false CSIDriver
csinodes storage.k8s.io/v1 false CSINode
csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity
storageclasses sc storage.k8s.io/v1 false StorageClass
volumeattachments storage.k8s.io/v1 false VolumeAttachment
ingressroutes traefik.containo.us/v1alpha1 true IngressRoute
ingressroutetcps traefik.containo.us/v1alpha1 true IngressRouteTCP
ingressrouteudps traefik.containo.us/v1alpha1 true IngressRouteUDP
middlewares traefik.containo.us/v1alpha1 true Middleware
middlewaretcps traefik.containo.us/v1alpha1 true MiddlewareTCP
serverstransports traefik.containo.us/v1alpha1 true ServersTransport
tlsoptions traefik.containo.us/v1alpha1 true TLSOption
tlsstores traefik.containo.us/v1alpha1 true TLSStore
traefikservices traefik.containo.us/v1alpha1 true TraefikService
ingressroutes traefik.io/v1alpha1 true IngressRoute
ingressroutetcps traefik.io/v1alpha1 true IngressRouteTCP
ingressrouteudps traefik.io/v1alpha1 true IngressRouteUDP
middlewares traefik.io/v1alpha1 true Middleware
middlewaretcps traefik.io/v1alpha1 true MiddlewareTCP
serverstransports traefik.io/v1alpha1 true ServersTransport
serverstransporttcps traefik.io/v1alpha1 true ServersTransportTCP
tlsoptions traefik.io/v1alpha1 true TLSOption
tlsstores traefik.io/v1alpha1 true TLSStore
traefikservices traefik.io/v1alpha1 true TraefikService