آموزش Kubernetes (K8s) از صفر تا صد
Kubernetes یکی از قدرتمندترین پلتفرمهای مدیریت کانتینر در جهان است که برای استقرار، مقیاسپذیری و مدیریت برنامههای مدرن مبتنی بر کانتینر استفاده میشود. امروزه بسیاری از شرکتهای بزرگ فناوری برای اجرای سرویسهای ابری، میکروسرویسها و زیرساختهای DevOps از Kubernetes استفاده میکنند.
در این مقاله آموزشی قصد داریم Kubernetes را از مفاهیم پایه تا مباحث پیشرفته مانند معماری کلاستر، Node، Pod، Deployment، Service، Storage، Networking و مدیریت عملیاتی Kubernetes بررسی کنیم.
توضیحات متا دیسکریپشن (Meta Description)
آموزش Kubernetes به صورت کامل و کاربردی؛ یادگیری مفاهیم Kubernetes، معماری K8s، نصب کلاستر، مدیریت کانتینرها، Docker، Pod، Deployment، Service و راهکارهای مدیریت زیرساخت ابری.
کلمات کلیدی مقاله
- آموزش Kubernetes
- Kubernetes چیست
- آموزش K8s
- نصب Kubernetes
- مدیریت کلاستر Kubernetes
- Docker Kubernetes
- Container Orchestration
- Kubernetes Administrator
- معماری Kubernetes
- راه اندازی Kubernetes Cluster
فهرست مطالب
- Kubernetes چیست؟
- چرا Kubernetes به وجود آمد؟
- تفاوت Docker و Kubernetes
- معماری Kubernetes
- معرفی Master Node و Worker Node
- مفهوم Pod در Kubernetes
- آشنایی با Deployment و ReplicaSet
- Kubernetes Service و ارتباط شبکهای
- نصب Kubernetes Cluster
- مدیریت Storage در Kubernetes
- Kubernetes Networking
- امنیت در Kubernetes
- مانیتورینگ Kubernetes
- کاربرد Kubernetes در سازمانها
Kubernetes چیست؟
Kubernetes که معمولا با نام کوتاه K8s شناخته میشود، یک سیستم متنباز برای مدیریت و هماهنگسازی کانتینرها (Container Orchestration Platform) است.
وظیفه اصلی Kubernetes این است که اجرای برنامههای کانتینری را در تعداد زیادی سرور مدیریت کند. به کمک Kubernetes میتوان برنامهها را بدون نیاز به مدیریت دستی هر سرور، اجرا، بروزرسانی، افزایش ظرفیت و بازیابی کرد.
برای مثال فرض کنید یک وبسایت فروشگاهی بزرگ دارید که روزانه میلیونها درخواست دریافت میکند. اگر تنها یک سرور داشته باشید، با افزایش کاربران ممکن است سرویس شما دچار اختلال شود. Kubernetes میتواند به صورت خودکار تعداد نمونههای برنامه را افزایش داده و بار کاری را بین سرورها تقسیم کند.
تاریخچه Kubernetes
Kubernetes ابتدا توسط شرکت Google طراحی شد و بر اساس تجربه چندین ساله این شرکت در مدیریت سیستمهای عظیم ابری ساخته شد. گوگل قبل از Kubernetes از سیستمی داخلی به نام Borg برای مدیریت سرویسهای خود استفاده میکرد.
در سال ۲۰۱۴ پروژه Kubernetes به صورت عمومی معرفی شد و بعدها توسط بنیاد Cloud Native Computing Foundation یا CNCF توسعه یافت و به یکی از مهمترین ابزارهای دنیای Cloud و DevOps تبدیل شد.
چرا Kubernetes اهمیت دارد؟
امروزه معماری نرمافزارها از برنامههای سنتی به سمت معماری Microservice حرکت کرده است. در این معماری هر بخش از برنامه به صورت یک سرویس مستقل اجرا میشود.
- مدیریت هزاران کانتینر به صورت خودکار
- افزایش یا کاهش منابع بر اساس میزان مصرف
- بازیابی خودکار سرویسهای خراب شده
- توزیع بار بین سرورها
- استقرار سریع نسخههای جدید نرمافزار
- ایجاد زیرساخت مناسب برای Cloud Computing
Kubernetes چه مشکلی را حل میکند؟
قبل از Kubernetes، مدیران سیستم برای اجرای برنامههای بزرگ مجبور بودند سرورها، منابع پردازشی، شبکه و فرآیندهای بروزرسانی را به صورت دستی مدیریت کنند.
با افزایش تعداد سرویسها، این روش بسیار پیچیده و زمانبر میشد. Kubernetes این فرآیندها را خودکار کرده و یک لایه مدیریتی هوشمند برای اجرای برنامهها فراهم میکند.
تفاوت Docker و Kubernetes چیست؟
یکی از سوالات رایج در مسیر یادگیری Kubernetes این است که تفاوت Docker و Kubernetes چیست و آیا این دو ابزار رقیب یکدیگر هستند؟
پاسخ این است که Docker و Kubernetes وظایف متفاوتی دارند. Docker یک فناوری برای ساخت و اجرای کانتینرها است، اما Kubernetes یک سیستم مدیریت و هماهنگکننده کانتینرها محسوب میشود.
| Docker | Kubernetes |
|---|---|
| ساخت و اجرای Container | مدیریت تعداد زیادی Container |
| مناسب برای توسعه و تست برنامهها | مناسب برای محیطهای Production و Cloud |
| مدیریت یک یا چند کانتینر | مدیریت هزاران کانتینر در چندین سرور |
به زبان ساده، Docker مانند موتور اجرای کانتینرها است و Kubernetes مانند مدیر هوشمندی است که مشخص میکند این کانتینرها کجا اجرا شوند، چه زمانی افزایش پیدا کنند و چگونه در صورت خرابی دوباره راهاندازی شوند.
معماری Kubernetes چگونه است؟
برای درک Kubernetes باید ابتدا معماری آن را بشناسیم. Kubernetes از مجموعهای از سرورها تشکیل شده است که به صورت یک Cluster با یکدیگر کار میکنند.
یک Kubernetes Cluster معمولا شامل دو بخش اصلی است:
- Control Plane:
بخش مدیریتی Kubernetes که وظیفه کنترل و تصمیمگیری را برعهده دارد. - Worker Node:
سرورهایی که برنامهها و کانتینرهای اصلی روی آنها اجرا میشوند.
Control Plane در Kubernetes چیست؟
Control Plane مغز Kubernetes محسوب میشود. تمام تصمیمات مربوط به وضعیت Cluster توسط این بخش انجام میشود.
وظایف اصلی Control Plane شامل موارد زیر است:
- مدیریت وضعیت Cluster
- زمانبندی اجرای Container ها
- تشخیص خطاها و بازیابی سرویسها
- مدیریت تنظیمات Kubernetes
- ارتباط با Node ها
اجزای اصلی Control Plane
1- Kubernetes API Server
API Server نقطه ارتباط اصلی Kubernetes است. تمام درخواستها مانند ایجاد Pod، تغییر تنظیمات یا دریافت اطلاعات Cluster از طریق API Server انجام میشود.
2- etcd Database
etcd یک دیتابیس Key-Value توزیعشده است که تمام اطلاعات مهم Kubernetes مانند تنظیمات، وضعیت Node ها و اطلاعات منابع را ذخیره میکند.
اطلاعاتی که در etcd ذخیره میشوند شامل:
- اطلاعات Cluster
- تنظیمات Network
- وضعیت Pod ها
- اطلاعات کاربران و دسترسیها
3- Scheduler
Scheduler وظیفه دارد تصمیم بگیرد هر Pod روی کدام Worker Node اجرا شود.
برای این تصمیمگیری مواردی مانند:
- میزان CPU آزاد
- حافظه RAM
- قوانین اختصاصی Node
- محدودیتهای منابع
بررسی میشوند.
4- Controller Manager
Controller Manager وظیفه بررسی وضعیت Cluster و هماهنگ کردن وضعیت واقعی با وضعیت مورد انتظار را برعهده دارد.
برای مثال اگر مشخص کرده باشید همیشه ۳ نسخه از یک برنامه اجرا شود و یکی از آنها خراب شود، Controller Manager دستور ایجاد نمونه جدید را صادر میکند.
Worker Node در Kubernetes چیست؟
Worker Node ها سرورهایی هستند که برنامههای واقعی روی آنها اجرا میشوند. هر Worker Node دارای سرویسهایی است که وظیفه اجرای Container ها را انجام میدهند.
اجزای مهم Worker Node عبارتند از:
- Kubelet:
عامل ارتباطی بین Node و Control Plane - Container Runtime:
نرمافزاری برای اجرای Container ها مانند Containerd - Kube Proxy:
مدیریت ارتباطات شبکهای بین سرویسها
ساختار ساده یک Kubernetes Cluster
Control Plane
API Server
|
----------------
| | |
etcd Scheduler Controller
|
|
---------------------
| | |
Worker1 Worker2 Worker3
Pod Pod Pod
Pod در Kubernetes چیست؟
Pod کوچکترین واحد قابل استقرار در Kubernetes است. در واقع Kubernetes به صورت مستقیم Container ها را مدیریت نمیکند، بلکه Container ها را داخل Pod قرار داده و Pod ها را مدیریت میکند.
هر Pod میتواند شامل یک یا چند Container باشد که معمولا برای اجرای یک سرویس یا یک بخش از برنامه استفاده میشوند.
برای مثال یک برنامه وب ممکن است شامل موارد زیر باشد:
- یک Container برای اجرای برنامه اصلی
- یک Container برای پردازش لاگها
- یک Container برای سرویسهای جانبی
تمام Container های داخل یک Pod منابع شبکه و Storage مشترک دارند و میتوانند با استفاده از localhost با یکدیگر ارتباط برقرار کنند.
ساختار یک Pod در Kubernetes
هر Pod دارای مشخصات مختلفی است که در فایل YAML تعریف میشود. این فایل به Kubernetes اعلام میکند که چه Container ای باید اجرا شود و چه منابعی نیاز دارد.
apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: nginx-container
image: nginx
در مثال بالا یک Pod با نام web-pod ایجاد میشود که یک Container مبتنی بر Image مربوط به Nginx اجرا میکند.
مراحل ایجاد یک Pod در Kubernetes
- کاربر فایل YAML را ایجاد میکند.
- دستور kubectl به API Server ارسال میشود.
- API Server اطلاعات را در etcd ذخیره میکند.
- Scheduler بهترین Node را انتخاب میکند.
- Kubelet روی Worker Node دستور اجرای Pod را دریافت میکند.
- Container Runtime، Container را اجرا میکند.
ReplicaSet در Kubernetes چیست؟
ReplicaSet یکی از منابع مهم Kubernetes است که وظیفه آن اطمینان از اجرای تعداد مشخصی Pod است.
فرض کنید یک وبسایت دارید و میخواهید همیشه سه نسخه از برنامه شما فعال باشد. ReplicaSet بررسی میکند که همیشه سه Pod در حال اجرا باشند.
مثال:
تعداد مورد انتظار:
3 Pod
وضعیت فعلی:
2 Pod فعال
ReplicaSet به صورت خودکار یک Pod جدید ایجاد میکند.
Deployment در Kubernetes چیست؟
Deployment یکی از پرکاربردترین منابع Kubernetes است که برای مدیریت چرخه عمر برنامهها استفاده میشود.
Deployment در واقع یک لایه مدیریتی بالاتر از ReplicaSet است و امکانات بیشتری مانند:
- ایجاد و مدیریت ReplicaSet
- بروزرسانی بدون توقف سرویس
- بازگشت به نسخه قبلی برنامه
- مدیریت نسخههای مختلف نرمافزار
را فراهم میکند.
ایجاد یک Deployment ساده در Kubernetes
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:latest
در این مثال Kubernetes سه نسخه از Nginx ایجاد میکند و در صورت خرابی یکی از آنها، نمونه جدیدی جایگزین خواهد شد.
دستورات مهم kubectl برای مدیریت Pod و Deployment
kubectl ابزار خط فرمان اصلی Kubernetes برای مدیریت Cluster است.
| دستور | کاربرد |
|---|---|
| kubectl get pods | نمایش Pod ها |
| kubectl get nodes | نمایش Node های Cluster |
| kubectl create -f app.yaml | ایجاد Resource از فایل YAML |
| kubectl delete pod name | حذف Pod |
جمعبندی بخش سوم
در این بخش با مفاهیم اصلی Pod، ReplicaSet و Deployment آشنا شدیم. Pod پایهایترین بخش Kubernetes است، ReplicaSet تضمین میکند تعداد مشخصی از Pod ها فعال باشند و Deployment امکان مدیریت حرفهای برنامهها و بروزرسانی آنها را فراهم میکند.
Kubernetes Service چیست؟
در Kubernetes، Pod ها موجودیتهایی هستند که به صورت موقت ایجاد و حذف میشوند. به همین دلیل IP Address یک Pod ممکن است بعد از Restart تغییر کند. برای حل این مشکل Kubernetes از مفهومی به نام Service استفاده میکند.
Service یک لایه ارتباطی دائمی برای دسترسی به Pod ها ایجاد میکند و باعث میشود برنامهها بتوانند بدون توجه به تغییرات داخلی Cluster با یکدیگر ارتباط داشته باشند.
وظایف اصلی Service در Kubernetes:
- ایجاد آدرس ثابت برای دسترسی به برنامهها
- توزیع درخواستها بین چند Pod
- ایجاد ارتباط داخلی بین سرویسها
- ارائه دسترسی خارجی به برنامهها
انواع Kubernetes Service
Kubernetes چند نوع Service برای سناریوهای مختلف ارائه میدهد که مهمترین آنها عبارتند از:
1- ClusterIP
ClusterIP نوع پیشفرض Service در Kubernetes است و فقط داخل Cluster قابل دسترسی است.
از این نوع معمولا برای ارتباط بین سرویسهای داخلی استفاده میشود.
apiVersion: v1 kind: Service metadata: name: database-service spec: type: ClusterIP
2- NodePort
NodePort امکان دسترسی کاربران خارج از Cluster به یک سرویس را فراهم میکند.
در این روش یک پورت مشخص روی تمام Node ها باز شده و درخواستها به Pod مربوطه ارسال میشوند.
3- LoadBalancer
این نوع Service بیشتر در محیطهای Cloud مانند AWS، Azure و Google Cloud استفاده میشود.
LoadBalancer یک IP عمومی ایجاد کرده و درخواست کاربران را بین Pod ها توزیع میکند.
Kubernetes Networking چیست؟
شبکه در Kubernetes یکی از مهمترین بخشهای معماری آن است. Kubernetes یک مدل شبکه ساده اما قدرتمند ارائه میدهد که در آن هر Pod دارای یک IP منحصر به فرد است.
قوانین اصلی Networking در Kubernetes:
- تمام Pod ها باید بتوانند بدون NAT با یکدیگر ارتباط برقرار کنند.
- تمام Node ها باید بتوانند با Pod ها ارتباط داشته باشند.
- IP یک Pod نباید توسط Node دیگری تغییر داده شود.
برای پیادهسازی شبکه Kubernetes معمولا از افزونههایی مانند CNI استفاده میشود.
برخی CNI های معروف:
- Calico
- Flannel
- Cilium
- Weave Net
Namespace در Kubernetes چیست؟
Namespace روشی برای تقسیمبندی منابع داخل Kubernetes Cluster است.
در محیطهای سازمانی معمولا چندین تیم یا پروژه از یک Cluster مشترک استفاده میکنند. Namespace کمک میکند منابع هر بخش جداگانه مدیریت شوند.
کاربردهای Namespace:
- جداسازی محیط توسعه و Production
- مدیریت دسترسی کاربران
- کنترل مصرف منابع
- سازماندهی بهتر Resource ها
kubectl create namespace development kubectl get namespaces
مدیریت دسترسی کاربران با RBAC در Kubernetes
RBAC یا Role Based Access Control یکی از قابلیتهای امنیتی Kubernetes است که برای مدیریت سطح دسترسی کاربران استفاده میشود.
با RBAC میتوان مشخص کرد:
- چه کسی به Cluster دسترسی داشته باشد
- چه منابعی قابل مشاهده باشند
- چه عملیاتی مانند ایجاد یا حذف Resource ها مجاز باشد
اجزای اصلی RBAC:
- Role: تعریف دسترسیها در یک Namespace
- ClusterRole: دسترسی در کل Cluster
- RoleBinding: اتصال کاربر به Role
- ServiceAccount: حساب کاربری برای برنامهها
ایجاد یک Service ساده در Kubernetes
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80
targetPort: 80
type: NodePort
در این مثال یک Service از نوع NodePort ایجاد شده که درخواستهای کاربران را به Pod هایی با Label برابر با web ارسال میکند.
بررسی وضعیت Service ها با kubectl
| دستور | کاربرد |
|---|---|
| kubectl get services | نمایش Service ها |
| kubectl describe service name | نمایش جزئیات Service |
| kubectl get endpoints | نمایش Pod های متصل به Service |
جمعبندی بخش چهارم
در این بخش با Service، شبکه Kubernetes، Namespace و RBAC آشنا شدیم. Service باعث ایجاد ارتباط پایدار بین سرویسها میشود، Namespace مدیریت منابع را سادهتر میکند و RBAC امنیت دسترسیها را کنترل میکند.
نصب Kubernetes Cluster به صورت عملی
پس از آشنایی با معماری Kubernetes و اجزای اصلی آن، مرحله بعدی راهاندازی یک Kubernetes Cluster است. برای محیطهای آزمایشی، آموزشی و حتی بسیاری از محیطهای سازمانی میتوان از ابزار kubeadm برای ایجاد Cluster استفاده کرد.
در این روش معمولا یک سرور به عنوان Control Plane و چند سرور به عنوان Worker Node استفاده میشوند.
نمونه معماری آزمایشی:
- Control Plane Server: مدیریت Cluster
- Worker Node 1: اجرای برنامهها
- Worker Node 2: اجرای برنامهها
- سیستم عامل پیشنهادی: Ubuntu Server 22.04 یا نسخههای جدیدتر
پیشنیازهای نصب Kubernetes
قبل از نصب Kubernetes باید سرورها آمادهسازی شوند. حداقل نیازمندیها شامل موارد زیر است:
- پردازنده حداقل 2 هسته برای Control Plane
- حداقل 2 گیگابایت RAM
- اتصال شبکه پایدار بین Node ها
- فعال بودن SSH
- غیرفعال بودن Swap در Linux
- تنظیم صحیح Hostname و DNS
مرحله اول: آمادهسازی سیستم عامل Linux
ابتدا باید سیستم عامل تمام Node ها بهروزرسانی شود.
sudo apt update sudo apt upgrade -y
در مرحله بعد باید Swap غیرفعال شود زیرا Kubernetes برای مدیریت بهتر Memory نیاز دارد که Swap فعال نباشد.
sudo swapoff -a
برای دائمی کردن این تنظیم، فایل fstab را ویرایش کرده و خط مربوط به Swap را حذف یا غیرفعال کنید.
تنظیم Kernel برای Kubernetes
Kubernetes برای عملکرد صحیح شبکه و ارتباط Container ها نیاز به فعال بودن برخی تنظیمات Kernel دارد.
cat <
سپس تنظیمات شبکه Kernel اعمال میشوند:
cat <
نصب Container Runtime
Kubernetes برای اجرای Container ها به یک Container Runtime نیاز دارد. امروزه معمولا از Containerd استفاده میشود.
Container Runtime وظیفه اجرای Image ها و مدیریت چرخه عمر Container ها را برعهده دارد.
sudo apt install containerd -y
پس از نصب باید تنظیمات Containerd ایجاد شود:
containerd config default | sudo tee /etc/containerd/config.toml
سپس سرویس Containerd را فعال میکنیم:
sudo systemctl restart containerd sudo systemctl enable containerd
نصب kubeadm، kubelet و kubectl
سه ابزار اصلی برای مدیریت Kubernetes عبارتند از:
- kubeadm:
ابزار ساخت و راهاندازی Cluster - kubelet:
Agent اجرا شده روی هر Node - kubectl:
ابزار خط فرمان مدیریت Kubernetes
نصب این ابزارها:
sudo apt install kubelet kubeadm kubectl -y
فعال کردن سرویس kubelet:
sudo systemctl enable kubelet
ایجاد اولین Kubernetes Cluster
روی سرور Control Plane دستور زیر اجرا میشود:
sudo kubeadm init
پس از اجرای موفق، Kubernetes یک دستور Join برای اضافه کردن Worker Node ها نمایش میدهد.
نمونه دستور اتصال Worker:
kubeadm join 192.168.1.10:6443 \ --token abcdef.123456789 \ --discovery-token-ca-cert-hash sha256:xxxxx
بررسی وضعیت Cluster
kubectl get nodes
خروجی باید وضعیت Node ها را به صورت Ready نمایش دهد.
kubectl get pods -A
این دستور تمام Pod های سیستمی Kubernetes را نمایش میدهد.
نصب و راهاندازی شبکه در Kubernetes با CNI
پس از ایجاد Kubernetes Cluster، یکی از مهمترین مراحل فعالسازی ارتباط شبکه بین Pod ها و Node ها است. Kubernetes به صورت پیشفرض یک شبکه آماده برای ارتباط Container ها ارائه نمیدهد و برای این کار به یک افزونه شبکهای به نام CNI یا Container Network Interface نیاز دارد.
CNI وظیفه ایجاد شبکه مجازی بین Pod ها، مدیریت IP Address ها و برقراری ارتباط بین بخشهای مختلف Cluster را بر عهده دارد.
CNI در Kubernetes چیست؟
CNI یک استاندارد برای اتصال Container ها به شبکه است. Kubernetes از طریق CNI به ابزارهای شبکهای اجازه میدهد که نحوه ارتباط Pod ها را مدیریت کنند.
مهمترین وظایف CNI:
- اختصاص IP به Pod ها
- ایجاد مسیر ارتباطی بین Node ها
- مدیریت Routing در Cluster
- اعمال سیاستهای امنیتی شبکه
- پشتیبانی از Network Policy
معرفی Calico در Kubernetes
Calico یکی از محبوبترین CNI Plugin های Kubernetes است که در بسیاری از محیطهای Production استفاده میشود.
Calico علاوه بر شبکهسازی، قابلیتهای امنیتی مانند Network Policy را نیز ارائه میدهد.
مزایای Calico:
- عملکرد بالا در Cluster های بزرگ
- پشتیبانی از BGP Routing
- امکان کنترل ترافیک بین Pod ها
- مناسب برای محیطهای سازمانی
نصب Calico با kubectl:
kubectl apply -f \ https://docs.projectcalico.org/manifests/calico.yaml
معرفی Flannel در Kubernetes
Flannel یک CNI ساده و سبک برای Kubernetes است که بیشتر در محیطهای آموزشی و Cluster های کوچک استفاده میشود.
ویژگیهای Flannel:
- راهاندازی آسان
- مصرف کم منابع
- مناسب برای آزمایشگاههای Kubernetes
- پشتیبانی از Overlay Network
kubectl apply -f \ https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
بررسی وضعیت شبکه Kubernetes
پس از نصب CNI باید وضعیت Pod های شبکه بررسی شود.
kubectl get pods -n kube-system
در صورت نصب صحیح، Pod مربوط به CNI باید در وضعیت Running قرار داشته باشد.
بررسی IP اختصاص داده شده به Pod ها:
kubectl get pods -o wide
Storage در Kubernetes چیست؟
یکی از چالشهای مهم در Kubernetes مدیریت اطلاعات و دادههای دائمی است. برخلاف Container ها که معمولا موقت هستند، اطلاعات برنامهها مانند دیتابیس، فایلها و لاگها باید در محلی امن ذخیره شوند.
Kubernetes برای حل این مشکل از سیستم Storage Abstraction استفاده میکند.
Persistent Volume چیست؟
Persistent Volume یا PV یک فضای ذخیرهسازی مستقل از Pod است که توسط مدیر سیستم ایجاد میشود.
PV میتواند از منابع مختلف تامین شود:
- Local Disk
- NFS Storage
- iSCSI Storage
- Ceph Storage
- Cloud Storage
- SAN Storage
در محیطهای سازمانی معمولا Kubernetes به Storage های قدرتمند مانند SAN متصل میشود تا اطلاعات برنامهها با امنیت بالا نگهداری شوند.
Persistent Volume Claim چیست؟
Persistent Volume Claim یا PVC درخواست یک برنامه برای دریافت فضای ذخیرهسازی است.
در واقع برنامهها مستقیما با PV کار نمیکنند، بلکه از طریق PVC فضای مورد نیاز خود را درخواست میکنند.
روند ارتباط Storage در Kubernetes:
Pod → PVC → PV → Storage
نمونه فایل PVC در Kubernetes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
جمعبندی بخش ششم
در این بخش با شبکه Kubernetes، مفهوم CNI، ابزارهای Calico و Flannel و همچنین مدیریت Storage با PV و PVC آشنا شدیم. این مفاهیم برای اجرای برنامههای واقعی و سازمانی در Kubernetes بسیار مهم هستند.
اتصال Kubernetes به Storage های سازمانی و SAN
در محیطهای Enterprise، استفاده از Storage محلی برای Kubernetes معمولا کافی نیست. سازمانها برای نگهداری اطلاعات مهم مانند دیتابیسها، فایلها و سرویسهای حیاتی از Storage های مرکزی مانند SAN استفاده میکنند.
Kubernetes میتواند از طریق Plugin ها و Driver های مختلف به Storage های سازمانی متصل شود و فضای ذخیرهسازی را به صورت Dynamic در اختیار برنامهها قرار دهد.
روشهای اتصال Kubernetes به Storage
Kubernetes برای اتصال به Storage از مفهومی به نام CSI یا Container Storage Interface استفاده میکند.
CSI یک استاندارد عمومی برای ارتباط Kubernetes با تجهیزات ذخیرهسازی مختلف است.
- VMware vSAN CSI
- HPE Storage CSI
- Dell EMC CSI
- NetApp CSI
- Ceph CSI
- NFS CSI
Container Storage Interface یا CSI چیست؟
CSI یک رابط استاندارد بین Kubernetes و سیستمهای ذخیرهسازی است. به کمک CSI، Kubernetes بدون نیاز به شناخت جزئیات سختافزار Storage میتواند Volume ایجاد و مدیریت کند.
فرآیند کار CSI:
- کاربر یک PVC ایجاد میکند.
- Kubernetes درخواست Storage را دریافت میکند.
- CSI Driver با Storage ارتباط برقرار میکند.
- Volume ایجاد شده و به Pod متصل میشود.
StatefulSet در Kubernetes چیست؟
Deployment برای برنامههایی که Stateless هستند مناسب است، اما بسیاری از سرویسهای مهم مانند دیتابیسها نیاز به ذخیره وضعیت دارند.
برای مدیریت برنامههای Stateful در Kubernetes از StatefulSet استفاده میشود.
برنامههای مناسب برای StatefulSet:
- MySQL
- PostgreSQL
- MongoDB
- Redis Cluster
- Elasticsearch
ویژگیهای StatefulSet:
- نام ثابت برای Pod ها
- اتصال دائمی به Storage
- راهاندازی ترتیبی Node ها
- مدیریت بهتر دیتابیسها
نمونه StatefulSet برای دیتابیس
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-db
spec:
serviceName: mysql
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:latest
ConfigMap در Kubernetes چیست؟
ConfigMap برای نگهداری تنظیمات برنامهها استفاده میشود. با استفاده از ConfigMap میتوان تنظیمات را از کد اصلی برنامه جدا کرد.
مثالهایی از اطلاعاتی که در ConfigMap ذخیره میشوند:
- تنظیمات Database Connection
- تنظیمات برنامه
- Environment Variable ها
- تنظیمات سرویسها
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: database_host: mysql-service database_port: "3306"
Secret در Kubernetes چیست؟
Secret برای ذخیره اطلاعات حساس استفاده میشود. اطلاعاتی مانند رمز عبور، Token ها و کلیدهای امنیتی نباید به صورت مستقیم در فایلهای برنامه قرار گیرند.
نمونه اطلاعات مناسب برای Secret:
- Password دیتابیس
- API Key
- Certificate
- SSH Key
apiVersion: v1 kind: Secret metadata: name: database-secret data: password: bXlwYXNzd29yZA==
امنیت در Kubernetes
امنیت Kubernetes یکی از مهمترین بخشهای مدیریت Cluster است. یک Kubernetes Cluster بدون تنظیمات امنیتی مناسب میتواند در معرض حملات مختلف قرار گیرد.
مهمترین اقدامات امنیتی:
- استفاده از RBAC برای کنترل دسترسی کاربران
- رمزنگاری اطلاعات حساس
- استفاده از Network Policy
- بهروزرسانی Kubernetes و Node ها
- محدود کردن دسترسی API Server
- مانیتورینگ فعالیت کاربران
جمعبندی بخش هفتم
در این بخش با اتصال Kubernetes به Storage های سازمانی، CSI، StatefulSet، ConfigMap، Secret و اصول امنیت Kubernetes آشنا شدیم. این موارد برای اجرای Kubernetes در محیطهای واقعی سازمانی و دیتاسنترها ضروری هستند.
Network Policy در Kubernetes چیست؟
در حالت پیشفرض، تمام Pod ها در Kubernetes میتوانند با یکدیگر ارتباط داشته باشند. در محیطهای سازمانی و Production این موضوع میتواند یک ریسک امنیتی ایجاد کند، زیرا یک سرویس آسیبپذیر ممکن است به سایر سرویسها دسترسی پیدا کند.
Network Policy قابلیتی در Kubernetes است که امکان کنترل ترافیک شبکه بین Pod ها را فراهم میکند.
با استفاده از Network Policy میتوان مشخص کرد:
- کدام Pod ها اجازه ارتباط با یکدیگر دارند.
- چه پورتهایی مجاز به استفاده هستند.
- کدام سرویسها اجازه دریافت یا ارسال ترافیک دارند.
- دسترسی شبکه بین Namespace ها چگونه باشد.
نمونه Network Policy در Kubernetes
در مثال زیر فقط Pod هایی با Label مشخص اجازه دسترسی به برنامه Web را خواهند داشت.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
spec:
podSelector:
matchLabels:
app: web
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
این Policy باعث میشود فقط Pod های مربوط به Frontend بتوانند به سرویس Web دسترسی داشته باشند.
احراز هویت کاربران در Kubernetes
Kubernetes سیستم User Management داخلی مانند Active Directory ندارد، اما امکان اتصال به سیستمهای احراز هویت مختلف را فراهم میکند.
روشهای رایج Authentication در Kubernetes:
- Certificate Authentication
- Token Authentication
- OpenID Connect
- LDAP Integration
- Active Directory Integration
در محیطهای سازمانی معمولا Kubernetes به سرویسهایی مانند Active Directory یا LDAP متصل میشود تا کاربران بتوانند با حساب سازمانی خود وارد Cluster شوند.
مانیتورینگ Kubernetes چیست؟
با افزایش تعداد Node ها و Container ها، مشاهده وضعیت Cluster اهمیت بسیار زیادی پیدا میکند.
مانیتورینگ Kubernetes کمک میکند مشکلاتی مانند:
- مصرف زیاد CPU
- کمبود RAM
- Crash شدن Pod ها
- خطاهای شبکه
- مشکلات Storage
سریعتر شناسایی شوند.
Prometheus در Kubernetes
Prometheus یکی از محبوبترین ابزارهای Monitoring در محیطهای Cloud Native است که برای جمعآوری Metric ها استفاده میشود.
Prometheus اطلاعاتی مانند موارد زیر را جمعآوری میکند:
- مصرف CPU و Memory
- تعداد درخواستهای سرویسها
- وضعیت Node ها
- وضعیت Pod ها
- خطاهای برنامهها
معمولا Prometheus همراه با Grafana برای نمایش گرافها و داشبوردهای مدیریتی استفاده میشود.
Grafana در Kubernetes
Grafana یک ابزار قدرتمند برای نمایش دادههای Monitoring به صورت Dashboard است.
نمونه داشبوردهای کاربردی Kubernetes:
- Cluster Overview
- Node Performance
- Pod Resource Usage
- Network Traffic
- Storage Monitoring
مدیر شبکه یا DevOps Engineer با استفاده از Grafana میتواند وضعیت کل Kubernetes Cluster را به صورت لحظهای مشاهده کند.
Logging در Kubernetes
علاوه بر Metric ها، بررسی Log ها برای عیبیابی سرویسها بسیار مهم است.
ابزارهای رایج Logging در Kubernetes:
- Elastic Stack (ELK)
- Fluent Bit
- Loki
- Graylog
با استفاده از سیستم Logging میتوان خطاهای برنامه، رخدادهای امنیتی و رفتار کاربران را بررسی کرد.
Backup در Kubernetes
پشتیبانگیری از Kubernetes فقط شامل فایلهای برنامه نیست، بلکه باید اطلاعات Cluster و دادههای برنامهها نیز محافظت شوند.
موارد مهم در Backup:
- Backup از دیتابیس etcd
- Backup از YAML Configuration ها
- Backup از Persistent Volume ها
- Backup از Secret ها
یکی از ابزارهای معروف Backup در Kubernetes، Velero است که امکان پشتیبانگیری و بازیابی منابع Cluster را فراهم میکند.
Disaster Recovery در Kubernetes
Disaster Recovery یا بازیابی پس از بحران، مجموعه اقداماتی است که برای بازگرداندن سرویسها پس از خرابی استفاده میشود.
راهکارهای مهم:
- داشتن چند Control Plane
- Replication اطلاعات etcd
- Backup منظم Storage
- استفاده از چند Availability Zone
- تست دورهای فرآیند Recovery
جمعبندی بخش هشتم
در این بخش با امنیت شبکه Kubernetes، Network Policy، احراز هویت کاربران، مانیتورینگ با Prometheus و Grafana، سیستم Logging و روشهای Backup و Disaster Recovery آشنا شدیم. این موارد برای مدیریت حرفهای Kubernetes در محیطهای واقعی ضروری هستند.
Kubernetes در محیط Production
استفاده از Kubernetes در محیط آزمایشگاهی بسیار سادهتر از محیط واقعی سازمانی است. در محیط Production باید مواردی مانند دسترسپذیری بالا، امنیت، مانیتورینگ، Backup، مدیریت منابع و تحمل خطا به صورت حرفهای طراحی شوند.
یک Kubernetes Cluster سازمانی باید بتواند در برابر خرابی یک یا چند سرور، همچنان سرویسها را بدون توقف ارائه دهد.
معماری High Availability در Kubernetes
در معماری High Availability یا HA، بخشهای حیاتی Kubernetes روی چندین سرور قرار میگیرند تا خرابی یک سرور باعث از کار افتادن کل Cluster نشود.
اجزای مهم در طراحی HA:
- چند Control Plane Node
- Load Balancer برای API Server
- کلاستر چند عضوی etcd
- چند Worker Node
- Replication برای Application ها
User Request
↓
Load Balancer
↓
Kubernetes API Server
↓
Control Plane Cluster
↓
Worker Nodes
Helm در Kubernetes چیست؟
Helm یک Package Manager برای Kubernetes است که فرآیند نصب و مدیریت برنامهها را ساده میکند.
در Kubernetes معمولا برای اجرای یک Application نیاز به چندین فایل YAML داریم. Helm این فایلها را در قالب یک بسته آماده به نام Chart مدیریت میکند.
با Helm میتوان برنامههایی مانند موارد زیر را سریع نصب کرد:
- Database ها
- Monitoring Tools
- Web Server ها
- Message Broker ها
- Application های سازمانی
اجزای Helm Chart
هر Helm Chart معمولا شامل فایلهای زیر است:
- Chart.yaml:
اطلاعات اصلی Chart - values.yaml:
تنظیمات قابل تغییر برنامه - templates:
فایلهای YAML مربوط به Kubernetes - charts:
وابستگیهای برنامه
دستورات مهم Helm
| دستور | کاربرد |
|---|---|
| helm repo add | افزودن Repository |
| helm install | نصب Application |
| helm list | نمایش برنامههای نصب شده |
| helm uninstall | حذف Application |
CI/CD و Kubernetes
یکی از مهمترین کاربردهای Kubernetes در دنیای DevOps، استفاده در Pipeline های CI/CD است.
در روش سنتی، انتشار نسخه جدید نرمافزار نیاز به عملیات دستی زیادی داشت، اما با Kubernetes میتوان فرآیند Deployment را کاملا خودکار کرد.
ابزارهای رایج CI/CD:
- Jenkins
- GitLab CI/CD
- Azure DevOps
- GitHub Actions
- Argo CD
روند CI/CD با Kubernetes
- برنامهنویس کد را در Git قرار میدهد.
- Pipeline اجرا شده و برنامه Build میشود.
- Docker Image ساخته میشود.
- Image در Registry ذخیره میشود.
- Kubernetes نسخه جدید را Deploy میکند.
- Health Check انجام شده و سرویس فعال میشود.
Kubernetes و VMware
در بسیاری از سازمانها Kubernetes در کنار زیرساختهای VMware اجرا میشود.
سناریوهای رایج:
- اجرای Kubernetes روی ماشینهای مجازی VMware
- استفاده از vSphere Storage
- اتصال Kubernetes به VMware Tanzu
- مدیریت منابع با vCenter
در محیطهای دیتاسنتری میتوان Kubernetes را روی زیرساختهای مجازیسازی شده، SAN Storage و شبکههای VLAN سازمانی اجرا کرد.
جمعبندی بخش نهم
در این بخش با اجرای Kubernetes در محیط Production، معماری High Availability، ابزار Helm، فرآیند CI/CD و ارتباط Kubernetes با VMware آشنا شدیم. این مفاهیم پایه اصلی استفاده سازمانی از Kubernetes هستند.
بهترین روشهای مدیریت Kubernetes در محیطهای سازمانی
مدیریت Kubernetes در مقیاس سازمانی نیازمند رعایت استانداردهای مشخصی است. یک Kubernetes Cluster زمانی پایدار و امن خواهد بود که علاوه بر نصب صحیح، فرآیندهای نگهداری، امنیت، مانیتورینگ و بروزرسانی آن نیز به شکل اصولی انجام شود.
۱- استفاده از Infrastructure as Code
در محیطهای حرفهای بهتر است تنظیمات Kubernetes به صورت کد مدیریت شوند. استفاده از ابزارهایی مانند Terraform و Ansible باعث میشود ایجاد و مدیریت زیرساخت سریعتر، دقیقتر و قابل تکرار باشد.
۲- مدیریت منابع با Resource Limit
یکی از مشکلات رایج در Kubernetes مصرف بیش از حد منابع توسط یک Application است. برای جلوگیری از این مشکل باید برای Pod ها محدودیت CPU و Memory تعریف شود.
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
با این تنظیمات Kubernetes میتواند منابع را بهتر مدیریت کرده و از تاثیر یک سرویس بر سایر سرویسها جلوگیری کند.
مسیر یادگیری Kubernetes Administrator
برای تبدیل شدن به یک Kubernetes Administrator حرفهای، بهتر است یادگیری را مرحله به مرحله انجام دهید.
مرحله اول: یادگیری Linux
- مدیریت سرویسها
- کار با Command Line
- مدیریت شبکه Linux
- مدیریت Storage
مرحله دوم: یادگیری Container ها
- Docker
- Dockerfile
- Docker Image
- Container Runtime
مرحله سوم: یادگیری Kubernetes
- Pod
- Deployment
- Service
- Storage
- Networking
- Security
مرحله چهارم: ابزارهای DevOps
- Git
- CI/CD
- Jenkins
- GitLab
- Terraform
- Prometheus
مدارک معتبر Kubernetes
برای افرادی که قصد فعالیت حرفهای در حوزه Cloud و DevOps دارند، مدارک Kubernetes میتوانند ارزش زیادی داشته باشند.
- CKA:
Certified Kubernetes Administrator برای مدیران Kubernetes - CKAD:
Certified Kubernetes Application Developer برای توسعهدهندگان - CKS:
Certified Kubernetes Security Specialist برای امنیت Kubernetes
سوالات متداول Kubernetes
Kubernetes چه کاربردی دارد؟
Kubernetes برای مدیریت، اجرا، مقیاسپذیری و مانیتورینگ برنامههای Container شده استفاده میشود.
آیا Kubernetes جایگزین Docker است؟
خیر. Docker وظیفه ساخت و اجرای Container را دارد، اما Kubernetes مدیریت و هماهنگی تعداد زیادی Container را انجام میدهد.
آیا Kubernetes فقط برای Cloud استفاده میشود؟
خیر. Kubernetes میتواند در دیتاسنترهای داخلی، سرورهای فیزیکی، VMware و محیطهای Cloud اجرا شود.
آیا یادگیری Kubernetes برای مدیر شبکه مفید است؟
بله. با گسترش Cloud، DevOps و معماری Microservice، یادگیری Kubernetes یکی از مهارتهای مهم برای مدیران شبکه و زیرساخت محسوب میشود.
کاربرد Kubernetes در سازمانها
امروزه بسیاری از سازمانها برای اجرای سرویسهای حساس خود از Kubernetes استفاده میکنند.
- راهاندازی سرویسهای Web بزرگ
- اجرای Application های Microservice
- مدیریت API های سازمانی
- اجرای سیستمهای هوش مصنوعی و پردازش داده
- پیادهسازی زیرساخت Cloud Native
- افزایش سرعت توسعه نرمافزار
نتیجهگیری آموزش Kubernetes
Kubernetes یکی از مهمترین فناوریهای دنیای Cloud Computing و DevOps است که امکان مدیریت هوشمند برنامههای کانتینری را فراهم میکند.
در این مقاله با مفاهیم پایه و پیشرفته Kubernetes مانند معماری Cluster، Control Plane، Worker Node، Pod، Deployment، Service، Storage، Security، Monitoring و CI/CD آشنا شدیم.
یادگیری Kubernetes برای مدیران شبکه، متخصصان سرور، مهندسان DevOps و برنامهنویسانی که قصد فعالیت در زیرساختهای مدرن را دارند، یک مهارت بسیار ارزشمند محسوب میشود.
مقالات پیشنهادی مرتبط
- آموزش Docker از صفر تا حرفهای
- آموزش VMware ESXi و مدیریت سرورهای مجازی
- آموزش لینوکس برای مدیران شبکه
- آموزش DevOps و CI/CD Pipeline
- آموزش نصب و کانفیگ سرورهای لینوکسی
- معرفی بهترین ابزارهای مانیتورینگ شبکه و سرور
- آموزش مدیریت SAN Storage در دیتاسنتر
پیشنهاد سئو برای مقاله Kubernetes
برای افزایش رتبه این مقاله در گوگل پیشنهاد میشود تصاویر آموزشی با فرمت WebP، لینکسازی داخلی به مقالات مرتبط، جدول مقایسه Kubernetes و Docker، و ویدیوهای آموزشی در صفحه اضافه شود.
همچنین استفاده از Schema نوع Article و FAQ Schema میتواند باعث نمایش بهتر محتوا در نتایج جستجو شود.
مقالات پیشنهادی برای مطالعه بیشتر
اگر قصد دارید Kubernetes را به صورت حرفهای یاد بگیرید و در زمینه مدیریت زیرساختهای مدرن، Cloud، DevOps و دیتاسنتر فعالیت کنید، مطالعه مقالات زیر میتواند مسیر یادگیری شما را کاملتر کند.
۱- آموزش Docker از صفر تا صد؛ ساخت و مدیریت Container ها
Docker پایه اصلی کار با Container ها است و قبل از یادگیری Kubernetes بهتر است مفاهیم Image، Container، Dockerfile و Docker Compose را به خوبی یاد بگیرید.
۲- آموزش VMware ESXi و مجازیسازی سرورها
بسیاری از سازمانها Kubernetes را روی زیرساختهای مجازی VMware اجرا میکنند. آشنایی با ESXi، vCenter، vMotion و Storage برای مدیران زیرساخت بسیار مهم است.
۳- آموزش لینوکس برای مدیران شبکه و سرور
Kubernetes بر پایه Linux اجرا میشود. یادگیری مدیریت سرویسها، شبکه، فایل سیستم و امنیت Linux برای Kubernetes Administrator ضروری است.
۴- DevOps چیست؟ راهنمای کامل فرهنگ و ابزارهای DevOps
Kubernetes یکی از مهمترین اجزای اکوسیستم DevOps است. آشنایی با CI/CD، Git، Pipeline و Automation مسیر ورود به DevOps را هموار میکند.
۵- آموزش نصب و کانفیگ سرور لینوکس
راهاندازی سرویسهای Kubernetes نیازمند آشنایی با نصب، تنظیمات شبکه، Firewall، SSH و مدیریت منابع سرورهای Linux است.
۶- آموزش مانیتورینگ شبکه و سرور با Prometheus و Grafana
مانیتورینگ یکی از بخشهای مهم مدیریت Kubernetes است. با ابزارهایی مانند Prometheus و Grafana میتوان سلامت Cluster را بررسی کرد.
۷- آموزش مدیریت SAN Storage و اتصال آن به سرورها
در محیطهای Enterprise، Kubernetes معمولا برای ذخیره اطلاعات دائمی به Storage های مرکزی مانند SAN متصل میشود.
۸- آموزش مفاهیم Cloud Computing و زیرساخت ابری
Kubernetes یکی از ستونهای اصلی Cloud Native است. آشنایی با Cloud، IaaS، PaaS و SaaS درک بهتری از کاربردهای Kubernetes ایجاد میکند.
۹- آموزش امنیت شبکه و Kubernetes Security
امنیت Container ها، مدیریت دسترسیها، RBAC، Network Policy و محافظت از API Server از مهمترین موضوعات امنیت Kubernetes هستند.
۱۰- آموزش Git و CI/CD برای مهندسان DevOps
برای استقرار خودکار برنامهها در Kubernetes، یادگیری Git، Pipeline و ابزارهای اتوماسیون ضروری است.
مسیر پیشنهادی یادگیری Kubernetes
برای یادگیری حرفهای Kubernetes پیشنهاد میشود این مسیر را دنبال کنید:
Linux
⬇️
Docker
⬇️
Networking
⬇️
Kubernetes Fundamentals
⬇️
Storage و Security
⬇️
Helm و CI/CD
⬇️
DevOps Engineer