مقدمه
چرا مدیریت منابع و مقیاسبندی مهم است؟
فایلهای YAML را کجا بنویسیم و اجرا کنیم؟
مثلاً:
چگونه یک فایل YAML ایجاد کنیم؟
با هر ادیتور متنی مثل VS Code, Notepad++, یا حتی nano/vim در لینوکس میتوانید فایل YAML بسازید.
مثال:
nano pod.yaml
kubectl apply -f pod.yaml
اگر فایل در مسیر دیگری است، مسیر کامل را میدهیم:
kubectl apply -f /path/to/your/file.yaml
تنظیم درخواستها و محدودیتهای منابع
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx-container
image: nginx
resources:
requests:
cpu: "100m" # 0.1 واحد CPU
memory: "128Mi" # 128 مگابایت
limits:
cpu: "500m" # 0.5 واحد CPU
memory: "512Mi" # 512 مگابایت
CPU:
100m به معنی ۰.۱ هسته CPU است (۱ هسته کامل = 1000m).
اگر مقدار 1 باشد، یعنی یک هسته کامل CPU درخواست شده است.
Memory:
128Mi = ۱۲۸ مگابایت.
1Gi = ۱ گیگابایت.
۲. مثال با Deployment
در یک Deployment، میتوانید منابع را برای تمام رپلیکاها تعریف کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1"
memory: "1Gi"
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
spec:
hard:
requests.cpu: "2" # مجموع درخواستهای CPU در Namespace
requests.memory: "4Gi" # مجموع درخواستهای Memory
limits.cpu: "4" # مجموع محدودیتهای CPU
limits.memory: "8Gi" # مجموع محدودیتهای Memory
مقیاسبندی خودکار پادها
-
نصب Metrics Server برای جمعآوری معیارهای منابع:
-
دیپلوی یا ReplicaSet با درخواستها و محدودیتهای منابع تعریفشده.
```yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
مقیاسبندی خودکار خوشه
- خوشهای که از ارائهدهندگان ابری (مثل AWS، GCP، یا Azure) پشتیبانی میکند.
- نصب Cluster Autoscaler متناسب با ارائهدهنده ابر.
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-autoscaler
namespace: kube-system
data:
config: |
cloudProvider: aws
awsRegion: us-west-2
minNodes: 1
maxNodes: 10
مدیریت سیاستهای پیشرفته
```yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
```
مانیتورینگ و بهینهسازی منابع
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
ports:
- containerPort: 9090
```
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
ports:
- containerPort: 3000
-
از داشبوردهای آماده Grafana برای کوبرنتیز (مثل داشبورد ID 3119) استفاده کنید.
-
معیارهای کلیدی مثل استفاده CPU، حافظه، و تعداد درخواستهای شبکه را مانیتور کنید.
-
برای معیارهای سفارشی، از Prometheus Adapter برای ادغام با HPA استفاده کنید.
-
همیشه تنظیمات جدید (مثل HPA یا محدودیتها) را در محیطهای تستی مثل Minikube امتحان کنید.
-
به صورت مداوم از ابزارهای مانیتورینگ برای شناسایی گلوگاهها و تنظیم دقیق منابع استفاده کنید.
-
ظرفیت خوشه را بر اساس پیشبینی بار کاری تنظیم و مدیریت کنید و از Cluster Autoscaler برای مقیاسبندی خودکار استفاده کنید.
-
اطمینان حاصل کنید که دسترسی به ابزارهای مانیتورینگ (مثل Prometheus) محدود شده و امنیت برقرار است.
-
همیشه از فایلهای YAML برای تعریف منابع استفاده کنید تا مدیریت و نسخهبندی آسانتر شود.
جمعبندی
در این مقاله، به جنبههای پیشرفته مدیریت منابع و مقیاسبندی در کوبرنتیز پرداختیم. با تنظیم درخواستها و محدودیتهای منابع، میتوانید مصرف CPU و حافظه را بهینه کنید. مقیاسبندی خودکار پادها (HPA) و خوشه (Cluster Autoscaler) به شما امکان میدهد تا با بارهای کاری متغیر سازگار شوید. سیاستهای پیشرفته مثل Taints و Tolerations کنترل دقیقتری بر زمانبندی پادها فراهم میکنند و ابزارهای مانیتورینگ مثل Prometheus و Grafana به شما کمک میکنند تا عملکرد خوشه را بهطور مداوم بررسی کنید.
سوالات متداول
-
چگونه میتوانم مصرف منابع خوشه را بهینه کنم؟
- تفاوت HPA و Cluster Autoscaler چیست؟
-
آیا یادگیری کوبرنتیز برای DevOps ضروری است؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
ثبت نظر