DevOps و امنیت پیشرفته

استقرار و مدیریت Kubernetes برای اپلیکیشن های سازمانی

استقرار و مدیریت Kubernetes برای محیط عملیاتی یعنی کلاستر از روز اول Ingress، ذخیره‌سازی پایدار، مانیتورینگ، بکاپ و برنامه به‌روزرسانی داشته باشد. کانفیگ سرور کلاستر کوبرنتیز را روی سرورهای شما یا ابر اختصاصی با kubeadm، k3s یا RKE2 راه‌اندازی و نگهداری می‌کند.

kubeadm، k3s و RKE2 Gateway API، Storage و مانیتورینگ رجیستری داخلی و نصب Air-gapped
چه زمانی به این خدمت نیاز دارید؟

نشانه‌هایی که وقت کوبرنتیز رسیده یا کلاستر فعلی بازبینی می‌خواهد

Docker Compose روی یک سرور دیگر جواب نمی‌دهد

هر دیپلوی قطعی کوتاه دارد، سرویس‌ها به یک سرور گره خورده‌اند و افزایش ظرفیت دستی است. Kubernetes با Rolling Update، Replica و زمان‌بندی خودکار روی چند نود این مشکل را حل می‌کند.

در نصب کوبرنتیز روی سرور ایران، ایمیج‌ها دانلود نمی‌شوند

دسترسی به registry.k8s.io و برخی رجیستری‌های دیگر از IPهای ایران ممکن است محدود یا ناپایدار باشد. با رجیستری داخلی، Mirror و نصب Air-gapped، کلاستر به دسترسی مستقیم به این مخازن وابسته نمی‌ماند.

کلاستر راه افتاده، اما کسی جرئت ارتقای آن را ندارد

نسخه‌های قدیمی وصله امنیتی نمی‌گیرند، گواهی‌های kubeadm به‌صورت پیش‌فرض یک‌ساله‌اند و پروژه ingress-nginx از فروردین ۱۴۰۵ بازنشسته شده است. ارتقا و مهاجرت را مرحله‌ای و با امکان بازگشت انجام می‌دهیم.

Kubernetes سازمانی

خدمات استقرار و مدیریت کلاستر Kubernetes

از طراحی کلاستر تا عملیات روزمره، بخش‌هایی را پوشش می‌دهیم که در آموزش‌های نصب کوبرنتیز معمولاً نادیده گرفته می‌شوند.

راه‌اندازی کلاستر کوبرنتیز

توزیع مناسب را بر اساس اندازه محیط، مهارت تیم و نیاز امنیتی انتخاب می‌کنیم و روی لینوکس نصب می‌کنیم.

  • kubeadm، k3s یا RKE2 روی Ubuntu، Debian یا Rocky Linux
  • Control Plane سه‌نودی با etcd برای High Availability
  • شبکه CNI مانند Calico یا Cilium

Ingress، Gateway API و Load Balancer

سرویس‌ها را روی سرورهای bare-metal که Load Balancer ابری ندارند، امن منتشر می‌کنیم.

  • Gateway API یا Ingress Controller پشتیبانی‌شده
  • MetalLB یا HAProxy بیرونی برای IP سرویس‌ها
  • صدور و تمدید خودکار گواهی TLS با cert-manager

ذخیره‌سازی پایدار

داده دیتابیس و فایل‌های کاربران نباید با جابه‌جایی یک Pod از بین برود.

  • Longhorn برای کلاسترهای کوچک و متوسط
  • Rook-Ceph یا اتصال به Ceph ابر اختصاصی
  • StorageClass، Snapshot و پایش ظرفیت

رجیستری داخلی و نصب آفلاین

در ایران، دسترسی پایدار به ایمیج‌ها را از مرحله طراحی کلاستر در نظر می‌گیریم. جزئیات رجیستری در خدمات Docker آمده است.

  • Harbor به‌عنوان رجیستری داخلی و Proxy Cache
  • تنظیم Mirror رجیستری در containerd
  • نصب Air-gapped برای RKE2 و k3s

استقرار اپلیکیشن و GitOps

دیپلوی باید از Git شروع شود و قابل بازگشت باشد. ساخت Pipeline در پیاده‌سازی CI/CD انجام می‌شود.

  • بسته‌بندی سرویس‌ها با Helm
  • GitOps با Argo CD یا Flux
  • Rolling Update، Health Check و Rollback

عملیات روز دوم: پایش، بکاپ و امنیت

پایش و بکاپ را هم‌زمان با خود کلاستر راه‌اندازی می‌کنیم. پایش پیشرفته در مانیتورینگ و Observability آمده است.

  • Prometheus، Grafana، Alertmanager و Loki
  • بکاپ etcd و بکاپ منابع و Volumeها با Velero
  • RBAC، NetworkPolicy و Pod Security Standards
راهنمای کامل

راهنمای استقرار و مدیریت Kubernetes در سازمان

Kubernetes کانتینرها را روی چند سرور زمان‌بندی می‌کند، Podهای خراب را جایگزین می‌کند و نسخه جدید را با Rolling Update و بدون قطعی منتشر می‌کند. خود کلاستر هم سرویسی است که نگهداری می‌خواهد: etcd، گواهی‌ها، شبکه CNI، ذخیره‌سازی و ارتقای منظم نسخه‌ها. بیشتر کلاسترهایی که ماه‌ها بعد از نصب متوقف می‌شوند، به دیسک پر، گواهی منقضی یا نسخه قدیمی می‌خورند. نکته‌های زیر به تصمیم درباره Kubernetes، طراحی کلاستر و نگهداری آن کمک می‌کند.

آیا به Kubernetes نیاز دارید؟

Kubernetes وقتی ارزش پیچیدگی‌اش را دارد که چند سرویس کانتینری روی چند سرور اجرا می‌شوند، قطعی هنگام دیپلوی پرهزینه است یا ظرفیت سرویس‌ها باید با افزایش Replica تغییر کند. برای یک یا دو سرویس ساده روی یک سرور، Docker Compose ساده‌تر و کم‌هزینه‌تر است. سرویس‌ها پیش از Kubernetes باید کانتینری شده باشند و Dockerfile و ایمیج قابل تکرار داشته باشند؛ این مرحله در خدمات Docker انجام می‌شود. Kubernetes مدیریت‌شده هم نگهداری Control Plane را به ارائه‌دهنده می‌سپارد، اما محل داده، نسخه‌ها و تنظیمات را به او وابسته می‌کند.

طراحی کلاستر: توزیع، نودها، شبکه و ذخیره‌سازی

kubeadm ابزار رسمی پروژه است و کنترل کامل می‌دهد، ولی CNI، Ingress و ارتقا را خودتان جداگانه مدیریت می‌کنید. k3s سبک است و به کار محیط‌های کوچک، تست و Edge می‌آید و RKE2 با سخت‌سازی پیش‌فرض برای محیط سازمانی و نصب آفلاین انتخاب رایجی است. در production، Control Plane روی سه نود اجرا می‌شود، چون etcd برای ادامه کار به اکثریت نودها نیاز دارد و با سه نود خرابی یکی را تحمل می‌کند. CNI را از روز اول با پشتیبانی NetworkPolicy انتخاب کنید؛ Calico و Cilium هر دو این قابلیت را دارند.

روی سرورهای bare-metal، Service از نوع LoadBalancer بدون MetalLB یا HAProxy بیرونی IP نمی‌گیرد. داده دیتابیس و فایل‌های کاربران به StorageClass و Volume پایدار نیاز دارد: Longhorn برای کلاسترهای کوچک و متوسط مناسب است و در محیط بزرگ‌تر Rook-Ceph یا اتصال به Ceph ابر اختصاصی به کار می‌رود. اجرای نودها به‌صورت ماشین مجازی روی Proxmox، بکاپ و جایگزینی نود را برای بیشتر سازمان‌ها ساده‌تر می‌کند.

نصب کوبرنتیز روی سرور ایران

دسترسی به registry.k8s.io و بعضی رجیستری‌های دیگر از IPهای ایران ممکن است محدود یا ناپایدار باشد. نصب یا افزودن نودی که به دریافت مستقیم ایمیج از این مخازن وابسته باشد، ممکن است وسط کار متوقف شود. به همین دلیل Harbor را به‌عنوان رجیستری داخلی و Proxy Cache راه‌اندازی می‌کنیم، Mirror را در containerd تنظیم می‌کنیم و برای RKE2 و k3s از نصب Air-gapped استفاده می‌کنیم. ترتیب کار این است:

  1. آماده‌سازی نودها: سیستم‌عامل، containerd و ساعت هماهنگ
  2. رجیستری داخلی Harbor و Mirror در containerd
  3. نصب Control Plane سه‌نودی و شبکه CNI
  4. Gateway API یا Ingress Controller، MetalLB و cert-manager
  5. StorageClass و آزمایش جابه‌جایی Pod همراه Volume
  6. مانیتورینگ، بکاپ etcd و Velero و آزمایش خاموشی یک نود

فهرست ایمیج‌های هر نسخه Kubernetes و افزونه‌ها را با تگ دقیق در رجیستری داخلی نگه دارید. نصب را یک بار بدون دسترسی به رجیستری‌های خارجی آزمایش کنید. اگر ایمیجی از قلم افتاده باشد، همین آزمایش آن را پیش از ارتقای بعدی نشان می‌دهد.

عملیات روز دوم: ارتقا، گواهی، امنیت و پایش

Kubernetes هر نسخه فرعی را مدت محدودی وصله می‌کند و kubeadm در هر مرحله فقط یک نسخه فرعی ارتقا می‌دهد، پس کلاستری که مدت‌ها ارتقا نگرفته چند ارتقای پشت‌سرهم لازم دارد. گواهی‌های kubeadm به‌صورت پیش‌فرض یک‌ساله‌اند و اگر در ارتقا یا دستی تمدید نشوند، ارتباط با API Server قطع می‌شود. پروژه ingress-nginx هم بازنشسته شده و کلاسترهایی که از آن استفاده می‌کنند باید به Gateway API یا Ingress Controller پشتیبانی‌شده مهاجرت کنند. پیش از هر ارتقا از etcd بکاپ بگیرید و منابع و Volumeها را با Velero نگه دارید.

در امنیت، دسترسی‌ها را با RBAC محدود کنید، ترافیک بین سرویس‌ها را با NetworkPolicy ببندید و Pod Security Standards را برای Namespaceها فعال کنید. دیپلوی از Git شروع می‌شود: سرویس‌ها با Helm بسته‌بندی می‌شوند و Argo CD یا Flux وضعیت کلاستر را با مخزن هماهنگ نگه می‌دارند؛ ساخت ایمیج و Pipeline در پیاده‌سازی CI/CD طراحی می‌شود. Prometheus، Grafana، Alertmanager و Loki پایه پایش کلاستر هستند و پایش گسترده‌تر در مانیتورینگ و Observability انجام می‌شود.

زمان و هزینه استقرار Kubernetes به چه بستگی دارد؟

تعداد نودها و محیط‌ها، نیاز به ذخیره‌سازی پایدار، نصب آفلاین، تعداد سرویس‌هایی که منتقل می‌شوند و مدیریت مستمر پس از تحویل پایه برآورد هستند. اگر سرویس‌ها هنوز کانتینری نشده‌اند، آن مرحله هم پیش از کلاستر انجام می‌شود. مهاجرت از ingress-nginx یا ارتقای کلاستری که چند نسخه عقب است، کار جداگانه‌ای است و زمان خودش را دارد. برای برآورد، فهرست سرویس‌ها، سرورهای موجود، وضعیت فعلی کانتینرها و نسخه کلاستر فعلی را اگر دارید بفرستید تا پس از بررسی اولیه قیمت اعلام شود.

بکاپ etcd را بیرون از نودهای Control Plane نگه دارید و بازگرداندن آن را یک بار روی کلاستر آزمایشی امتحان کنید. Velero منابع و Volumeها را برمی‌گرداند، اما برای بازسازی Control Plane کلاستر kubeadm به بکاپ etcd نیاز دارید.

انتخاب توزیع

kubeadm، k3s، RKE2 یا Kubernetes مدیریت‌شده؟

هر چهار گزینه Kubernetes استاندارد اجرا می‌کنند و تفاوتشان در سادگی نصب، سخت‌سازی پیش‌فرض و میزان کنترل شماست.

مقایسه کلی روش‌های استقرار Kubernetes
گزینهویژگی اصلیمناسب براینکته مهم
kubeadmابزار رسمی پروژه با کمترین لایه اضافهتیم‌هایی که کنترل کامل روی اجزا می‌خواهندCNI، Ingress و ارتقا جداگانه مدیریت می‌شوند
k3sتوزیع سبک با اجزای پیش‌فرض آمادهمحیط‌های کوچک، Edge، تست و سرورهای کم‌منابعبرای کلاستر بزرگ، datastore و HA باید درست طراحی شود
RKE2توزیع سخت‌شده با تمرکز بر امنیتمحیط‌های سازمانی و نصب آفلاینمنابع بیشتری از k3s مصرف می‌کند
Kubernetes مدیریت‌شدهControl Plane در اختیار ارائه‌دهنده استتیم‌هایی که نمی‌خواهند Control Plane نگهداری کنندمحل داده و تنظیمات به ارائه‌دهنده وابسته است
فرآیند اجرای کار

مراحل استقرار Kubernetes، از طراحی کلاستر تا تحویل عملیات

۱. بررسی اپلیکیشن و زیرساخت

سرویس‌ها، وابستگی‌ها، داده‌های پایدار، سرورهای موجود و نیاز به دسترسی خارجی را بررسی می‌کنیم و آمادگی کانتینری شدن را می‌سنجیم.

۲. طراحی کلاستر

توزیع، تعداد نودها، شبکه، استوریج، رجیستری، مدل دسترسی و روش دیپلوی را مکتوب می‌کنیم.

۳. استقرار و انتقال سرویس‌ها

کلاستر را می‌سازیم، سرویس‌ها را اول در محیط تست و بعد مرحله‌ای در production مستقر می‌کنیم و خاموشی نود را آزمایش می‌کنیم.

۴. تحویل و مدیریت

مستندات، داشبوردها و روش بکاپ و ارتقا را تحویل می‌دهیم و در صورت نیاز، مدیریت مستمر کلاستر را ادامه می‌دهیم.

محدوده خدمت استقرار و مدیریت Kubernetes

شامل این خدمت

  • نصب و پیکربندی کلاستر با kubeadm، k3s یا RKE2
  • شبکه، Gateway API یا Ingress و ذخیره‌سازی پایدار
  • رجیستری داخلی، Mirror و نصب آفلاین
  • مانیتورینگ، بکاپ و سیاست‌های دسترسی
  • ارتقای نسخه و مهاجرت از ingress-nginx

خارج از این خدمت

چرا کانفیگ سرور؟

کوبرنتیزی که بعد از نصب هم قابل نگهداری باشد

بسیاری از کلاسترهایی که فقط از روی آموزش راه‌اندازی می‌شوند، در ماه‌های بعد با دیسک پر، گواهی منقضی یا نسخه قدیمی متوقف می‌شوند. طراحی را با در نظر گرفتن عملیات روزمره انجام می‌دهیم و بررسی اولیه از طریق تلگرام رایگان است.

01

زنجیره کامل DevOps

Docker، CI/CD، Infrastructure as Code و مانیتورینگ هم بخشی از خدمات DevOps و امنیت ماست و کلاستر را همراه بقیه این زنجیره طراحی می‌کنیم.

02

راه‌حل عملی برای محدودیت‌های ایران

رجیستری داخلی و نصب آفلاین را از ابتدا در طراحی لحاظ می‌کنیم تا ارتقای بعدی به دسترسی خارجی گره نخورد.

03

راهنماهای فنی منتشرشده

پایش را در آموزش Prometheus و Grafana و توزیع بار را در راهنمای HAProxy توضیح داده‌ایم.

سوالات متداول

پرسش‌های رایج درباره Kubernetes

کوبرنتیز چیست و چه زمانی به آن نیاز داریم؟

Kubernetes پلتفرمی متن‌باز برای مدیریت کانتینرهاست که اجرای سرویس‌ها روی چند سرور، مقیاس‌پذیری، جایگزینی Podهای خراب و دیپلوی بدون قطعی را خودکار می‌کند. اگر چند سرویس کانتینری روی چند سرور دارید و قطعی هنگام دیپلوی برایتان پرهزینه است، زمان بررسی آن رسیده؛ برای یک یا دو سرویس ساده، Docker Compose اغلب کافی است.

تفاوت داکر و کوبرنتیز چیست؟

Docker ایمیج می‌سازد و کانتینر را روی یک سرور اجرا می‌کند، اما Kubernetes تصمیم می‌گیرد کانتینرها روی کدام نودها اجرا شوند، چند نسخه از هر کدام فعال باشد و در خرابی جایگزین شوند. کوبرنتیز از نسخه 1.24 با runtimeهای CRI مانند containerd کار می‌کند و ایمیج‌های ساخته‌شده با Docker بدون تغییر روی آن اجرا می‌شوند.

برای کلاستر کوبرنتیز حداقل چند سرور لازم است؟

برای production سه نود Control Plane پیشنهاد می‌شود تا etcd با خرابی یک نود از کار نیفتد و در کلاسترهای کوچک همین سه نود بار Worker را هم اجرا می‌کنند. برای محیط تست یک نود k3s کافی است.

نصب کوبرنتیز روی سرور ایران ممکن است؟

بله، به شرط آنکه برای دسترسی به ایمیج‌ها برنامه داشته باشید. ایمیج‌ها را در رجیستری داخلی مانند Harbor نگهداری می‌کنیم، Mirror را در containerd تنظیم می‌کنیم یا از نصب Air-gapped استفاده می‌کنیم تا نصب و ارتقا به دسترسی مستقیم به رجیستری‌های خارجی وابسته نباشد.

Kubernetes را روی Proxmox اجرا کنیم یا مستقیم روی سرور فیزیکی؟

برای بیشتر سازمان‌ها اجرای نودها به‌صورت ماشین مجازی روی Proxmox، بکاپ و جایگزینی نودها را ساده‌تر می‌کند. اجرای bare-metal برای بارهای بسیار حساس به کارایی یا نیاز به GPU و شبکه خاص منطقی‌تر است.

کوبرنتیز مدیریت‌شده بهتر است یا کلاستر اختصاصی؟

کوبرنتیز مدیریت‌شده نگهداری Control Plane را از دوش شما برمی‌دارد، اما محل داده، نسخه‌ها و تنظیمات به ارائه‌دهنده وابسته می‌شود. کلاستر اختصاصی کنترل کامل می‌دهد و نگهداری آن را می‌توانیم برعهده بگیریم.

هزینه راه‌اندازی کلاستر Kubernetes چطور محاسبه می‌شود؟

هزینه بر اساس تعداد نودها و محیط‌ها، نیاز به ذخیره‌سازی پایدار و نصب آفلاین، تعداد سرویس‌هایی که منتقل می‌شوند و نیاز به مدیریت مستمر محاسبه می‌شود. پس از بررسی رایگان اولیه، قیمت به‌صورت استعلامی اعلام می‌شود.

می‌خواهید سرویس‌هایتان روی Kubernetes پایدار اجرا شوند؟

سرویس‌ها، سرورهای موجود و وضعیت فعلی کانتینرها را در تلگرام بنویسید تا کارشناس ما معماری مناسب کلاستر را پیشنهاد دهد.