نسخه آنلاین در حال بارگذاری زمان... تهران: ۲۶°C
۲۸ کاربر آنلاین

PNo.30Light

نشریه تخصصی هوش مصنوعی، سیستم‌های سرور و مهندسی داده

تازه ترین‌ها
زیرساخت و سرور
زمان مطالعه: ۲۷ دقیقه ۰ بازدید

Kubespray: استقرار Production Kubernetes با Ansible — راهنمای کامل

نویسنده: تحریریه فنی P30Light
Kubespray: استقرار Production Kubernetes با Ansible — راهنمای کامل
✦ خلاصه نکات کلیدی مقاله
  • Kubespray = playbookهای Ansible برای کلاستر production-ready روی bare metal و cloud — نه یک distribution جدا مثل K3s/RKE2.
  • از v2.3 داخل از kubeadm استفاده می‌کند؛ OS hardening، etcd HA، CNI و add-on را Ansible پوشش می‌دهد.
  • Composable: Calico/Cilium/Flannel/Kube-OVN/…؛ air-gap، scale، upgrade و reset با playbookهای اختصاصی.

kubeadm کلاستر را bootstrap می‌کند، اما هنوز OS، CNI، HA etcd، گواهی، add-on و تکرارپذیری روی ده‌ها سرور باقی می‌ماند. تیم‌هایی که bare metal یا VM چندابری دارند، معمولاً به لایهٔ Infrastructure as Code نیاز دارند.

Kubespray پاسخ رسمی جامعهٔ Kubernetes (زیر kubernetes-sigs) است:

Deploy a Production Ready Kubernetes Cluster

یعنی مجموعهٔ playbookهای Ansible برای استقرار کلاستر HA، قابل ترکیب، روی اکثر توزیع‌های لینوکس — از AWS تا bare metal.

Docs: kubespray.io · Repo: github.com/kubernetes-sigs/kubespray · Slack: #kubespray · لایسنس: Apache-2.0


Kubespray چیست؟ (و چه چیزی نیست)

هستنیست
ابزار نصب و lifecycle مبتنی بر Ansibledistribution بسته‌بندی‌شده مثل K3s یا RKE2
orchestrator روی kubeadm + پیکربندی OSجایگزین managed EKS/GKE/AKS
انتخاب آزاد CNI، CRI، add-onتک‌باینری «یک‌خطی» برای edge
مناسب bare metal / multi-cloud / air-gapجایگزین کامل platform (Rancher/OpenShift)

شعارهای README:

  • استقرار روی AWS، GCE، Azure، OpenStack، vSphere، Equinix Metal، OCI (experimental)، Baremetal
  • کلاستر Highly available
  • Composable (مثلاً انتخاب network plugin)
  • پشتیبانی از بیشتر توزیع‌های محبوب لینوکس
  • CI/e2e مستمر (اسپانسرهایی مثل CNCF، Equinix Metal، OVHcloud، ELASTX)

مشکل: از kubeadm تا production

فقط kubeadm:
  OS prep دستی × N
  etcd HA دستی
  CNI جدا
  cert rotation / upgrade پراکنده
  تکرارپذیری ضعیف

با Kubespray:
  inventory + group_vars


  ansible-playbook cluster.yml

       ├─ kernel / swap / packages
       ├─ containerd | cri-o | docker
       ├─ etcd HA
       ├─ kubeadm control plane + workers
       ├─ CNI (Calico/…)
       └─ CoreDNS، metrics، اختیاری MetalLB/Helm/…

Idempotent است: اجرای دوبارهٔ playbook باید به همان وضعیت برسد و استقرار قطع‌شده قابل ادامه است.


مقایسه: Kubespray در برابر گزینه‌ها

در برابر kubeadm و kops (از docs رسمی)

طبق comparisons.md:

Kubespraykubeadmkops
نقشCM + clustering + bootstrap«cluster operator» دامنهٔ K8sprovisioner ابری خودش
بسترAnsible روی bare metal و بیشتر cloudهادستورات روی نودتنگاتنگ با cloudهای پشتیبانی‌شده
انعطاف پلتفرمبالابالا ولی دستیکمتر اگر فقط یک cloud
از v2.3داخل از kubeadm استفاده می‌کند

جمع‌بندی رسمی: Kubespray دانش lifecycle را از kubeadm می‌گیرد و کارهای عمومی OS را با Ansible جدا می‌کند — هر دو طرف سود می‌برند.

در برابر distributionها

معیارKubesprayK3sRKE2
نوعPlaybooks AnsibleDistribution سبکDistribution سازمانی
نصبcluster.ymlیک اسکریپت/باینریget.rke2.io
Datastoreetcd (کلاسیک)SQLite یا etcdetcd
CIS/FIPS توکاراز طریق hardening varsمحدودقوی
انتخاب CNIبسیار بازFlannel پیش‌فرضCanal/…
بهترین جاbare metal سفارشی، IaC AnsibleEdge / labCompliance / datacenter

اگر تیم از قبل Ansible دارد و می‌خواهد upstream Kubernetes با کنترل کامل → Kubespray. اگر می‌خواهد باینری امن و opinionated → RKE2. اگر edge سبک → K3s.


معماری منطقی و نقش نودها

Ansible control machine (laptop / CI)
        │ SSH + become

┌─────────────────────────────────────────┐
│ inventory                               │
│  kube_control_plane (فرد برای HA)       │
│  etcd (اغلب هم‌جا با CP در lab)         │
│  kube_node (workers)                    │
└─────────────────────────────────────────┘

        ▼ playbooks
   OS → CRI → etcd → kubeadm → CNI → addons
گروه Ansibleنقش
kube_control_planeAPI Server، scheduler، controller-manager
etcdquorum — در production معمولاً ۳ یا ۵
kube_nodeworkerها
k8s_clusterترکیب رایج

برای HA API اغلب load balancer (HAProxy/Nginx/kube-vip) جلوی چند control plane می‌نشیند — docs: HA mode.

Playbookهای اصلی

Playbookکار
cluster.ymlنصب/همگام‌سازی کامل کلاستر
scale.ymlافزودن نود
upgrade-cluster.ymlارتقای نسخه
remove-node.ymlحذف نود
reset.ymlپاک‌سازی نصب Kubespray روی نودها
recover-control-plane.ymlبازیابی control plane

اجزای پشتیبانی‌شده (نسخهٔ فعلی README)

اعداد با release عوض می‌شوند؛ نمونه از README فعلی repo:

دستهنمونه‌ها
CoreKubernetes ~1.36.x، etcd، containerd، docker، cri-o (experimental روی برخی OS)
CNICalico (پیش‌فرض)، Cilium، Flannel، Kube-OVN، kube-router، Multus، macvlan، custom_cni، kube-vip
AppCoreDNS، cert-manager، Helm، MetalLB، Argo CD، registry
Storage CSIAWS EBS، Azure Disk، Cinder، GCP PD، local-path، local-volume، NFD

حداقل Kubernetes پشتیبانی‌شده در README فعلی: v1.34.0+. CRI-O باید minor با Kubernetes هم‌تراز باشد.

جزئیات CNI: مقایسه CNI · Cilium · Kube-OVN. Runtime: containerd · CRI-O. etcd: etcd.


سیستم‌عامل‌های پشتیبانی‌شده

طیف گسترده (خلاصه از README):

  • Debian / Ubuntu LTS جدید
  • RHEL / CentOS Stream / Alma / Rocky / Oracle Linux
  • Fedora / Fedora CoreOS / Flatcar
  • openSUSE Leap / Tumbleweed
  • چند مورد experimental: Amazon Linux 2، Kylin، UOS، openEuler، Rocky 10

پشتیبانی نمی‌شود: init از نوع Upstart/SysV. برای کرنل < 4.19 docs کرنل را بخوانید.

حداقل حافظهٔ safeguarded: Control plane ۲ GB، Worker ۱ GB — برای production واقعی بالاتر بروید.


پیش‌نیازها

موردجزئیات
Ansiblev2.14+، Jinja 2.11+، python-netaddr روی ماشین کنترل
شبکه نوددسترسی اینترنت برای pull image — وگرنه air-gap
ForwardingIPv4 (و در صورت نیاز IPv6)
Firewallتوسط Kubespray مدیریت نمی‌شود — برای نصب اولیه اغلب باید موقتاً باز/خاموش باشد
Privilegeکاربر غیر root → ansible_become / -b

شروع سریع

با کانتینر رسمی

docker run --rm -it \
  --mount type=bind,source="$(pwd)"/inventory/sample,dst=/inventory \
  --mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa \
  quay.io/kubespray/kubespray:v2.31.0 bash

# داخل کانتینر:
ansible-playbook -i /inventory/inventory.ini \
  --private-key /root/.ssh/id_rsa cluster.yml

نسخهٔ image را با آخرین tag عوض کنید.

مسیر Ansible کلاسیک (مفهومی)

git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
python3 -m venv .venv && source .venv/bin/activate
pip install -U -r requirements.txt

cp -rfp inventory/sample inventory/mycluster
# ویرایش inventory/mycluster/inventory.ini و group_vars/

ansible-playbook -i inventory/mycluster/inventory.ini \
  --become --become-user=root cluster.yml

ابزار inventory_builder / اسکریپت‌های contrib می‌توانند از لیست IP، inventory بسازند. برای lab محلی: Vagrant (vagrant up پس از نصب Ansible).

نمونهٔ نقش‌ها در inventory:

[kube_control_plane]
cp1 ansible_host=10.0.0.11
cp2 ansible_host=10.0.0.12
cp3 ansible_host=10.0.0.13

[etcd:children]
kube_control_plane

[kube_node]
worker1 ansible_host=10.0.0.21
worker2 ansible_host=10.0.0.22

[k8s_cluster:children]
kube_control_plane
kube_node

متغیر شبکه (مثال):

# inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
kube_network_plugin: calico   # یا cilium، flannel، kube-ovn، …
container_manager: containerd

پس از موفقیت، kubeconfig معمولاً از اولین control plane قابل کپی است (مسیر دقیق در docs Getting Started).


عملیات روزمره

کارروش
افزودن workerنود به inventory + scale.yml
ارتقاupgrade-cluster.yml (docs Upgrades)
حذف نودremove-node.yml
شروع از صفرreset.yml (مخرب — احتیاط)
بازیابی CPrecover-control-plane.yml
Air-gapدانلود artifacts / mirror داخلی
Hardeningdocs Hardening + CIS-oriented vars
Large clusterdocs Large deployments

Terraform در contrib/terraform و پروژه‌هایی مثل Kubean روی Kubespray سوار شده‌اند.

برای GitOps بعد از بالا آمدن کلاستر: Flux · Helm · Argo. برای TLS: cert-manager.


چه وقت Kubespray را انتخاب کنیم؟

Managed cloud کافی است؟ ──yes──► EKS/GKE/AKS
         │ no

تیم Ansible + bare metal / چند cloud؟ ──yes──► Kubespray
         │ no

نیاز FIPS/CIS باینری opinionated؟ ──yes──► RKE2
         │ no

Edge / منابع کم؟ ──yes──► K3s
         │ no

یادگیری تک‌نود؟ ──► kubeadm / kind

Kubespray می‌درخشد وقتی مالک زیرساخت هستید و تکرارپذیری + انتخاب CNI/CRI مهم است.


یکپارچگی با استک P30Light

لایهمقاله
Distribution جایگزینK3s · RKE2
Runtimecontainerd · CRI-O
Datastoreetcd
شبکهCNI deep dive · Cilium · Kube-OVN
Package / GitOpsHelm · Flux
Multi-cluster بعد از نصبKarmada
Terraform/IPMI ──► VM/Bare metal
Ansible (Kubespray) ──► Kubernetes upstream + CNI
Flux/Argo ──► workloads

خلاصه

موضوعجمع‌بندی
چیستAnsible playbooks برای کلاستر production Kubernetes
کجاkubernetes-sigs؛ docs در kubespray.io
موتورkubeadm + پیکربندی OS توسط Ansible
نقطهٔ قوتHA، composable CNI، multi-OS، air-gap، idempotent
نقطهٔ ضعف نسبیمنحنی یادگیری Ansible؛ سنگین‌تر از تک‌باینری
رقباkubeadm (سطح پایین)، kops (cloud-centric)، K3s/RKE2 (distribution)

قدم بعدی

  1. با image quay.io/kubespray/kubespray روی ۳ VM lab یک cluster.yml خشک اجرا کنید.
  2. kube_network_plugin را بین Calico و Cilium در دو inventory جدا مقایسه کنید.
  3. یک worker با scale.yml اضافه و با remove-node.yml حذف کنید.
  4. مسیر air-gap را اگر دیتاسنتر بدون اینترنت دارید از docs Offline بخوانید.
  5. upgrade-cluster.yml را روی lab قبل از production تمرین کنید.
  6. پس از پایداری، GitOps و observability را جدا از Kubespray لایه کنید.

منابع

منتشر شده در P30Light — بخش زیرساخت و سرور

لینک گزارش با موفقیت کپی گردید!