DevOpsلینوکس

راه‌اندازی kubernetes cluster

راه‌اندازی RKE2 kubernetes cluster

در این مقاله قصد داریم یک kubernetes cluster را با حداقل منابع برای مقاصد آموزشی و محیط آزمایشی راه‌اندازی کنیم.

تعریف سناریو:

۳ ماشین مجازی با مشخصات زیر و با سیستم عامل لینوکس و توزیع Debian 12 :

data/

var/

/ directory

RAM

CPU

10 GB

20 GB

20 GB

4 GB

2 cores

Master node

10 GB

30 GB

20 GB

8 GB

4 cores

Worker node 1

10 GB

30 GB

20 GB

8 GB

4 cores

Worker node 2

نصب RKE2 Kubernetes server service بر روی master node و سپس نصب rke2 agent service بر روی worker node ها و همچنین اضافه کردن این worker ها به master node

پیش‌نیازها

قبل از هرکاری پیشنهاد می‌کنیم صفحه رسمی rke2 را مطالعه کنید تا بصورت دقیق با تمام پیش‌نیازها و … آشنا شوید. (صفحه رسمی RKE2)

اما اصلی‌ترین موارد را در ادامه ذکر می‌کنیم.

قبل از هرکاری از یکتا بودن hostname های سرورهایی که قرار است در cluster کوبرنتیز سهیم باشند اطمینان حاصل کنید.

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

sudo nano /etc/hosts
sudo nano /etc/hostname

همچنین توجه داشته باشید که machine-id ها نیز برای هر ماشین باید یکتا باشد وگرنه در زمان اضافه کردن worker ها به master node به مشکل خواهیم خورد. برای تغییر machine-id دستور های زیر را وارد کنید و سپس سیستم را یکبار راه اندازی مجدد یا restart کنید تا مقادیر جدید بصورت خودکار ساخته شوند.

sudo truncate -s 0 /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo ln -s /etc/machine-id /var/lib/dbus/machine-id

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

* دقت کنید که حداقل cpu مورد نظر ۲ هسته است (ولی ۴ هسته پیشنهاد می‌شود) و همینطور حداقل RAM 4GB است (ولی حداقل 8GB توصیه می‌شود)

حداقل سیستم مورد نیاز برای راه اندازی master node در rke2 kubernetes
حداقل سیستم مورد نیاز برای راه اندازی master node در rke2 kubernetes

* نکته دیگری که باید رعایت شود این است که توصیه می‌شود برای جلوگیری از باراضافه روی پردازنده، node ها را در دسته های ۵۰ تایی اضافه کنید

* همچنین باید به این نکته توجه داشته باشید که همیشه بیشتر از یک master node داشته باشید و همیشه تعداد فرد را برای ایجاد master node ها انتخاب کنید.

اگر از firewall استفاده می‌کنید حتمأ به جدول زیر توجه کنید و پورت های مورد نیاز cluster را در rule های firewall خود مجاز کنید.

پورت های مورد استفاده در RKE2
پورت های مورد استفاده در RKE2

همچنین مهم است که ساعت تمام سرورها با یکدیگر sync باشند و به روز باشند زیرا ممکن است بعدأ به مشکل بر بخورند.

نکته آخر این است که برای راه اندازی kubernetes cluster باید حتمأ دسترسی super user داشته باشید.

نصب بر روی server node

نصب rke2-server.service بر روی master node

برای نصب سرویس server، به master node متصل می‌شویم. و دستور زیر را وارد می‌کنیم تا پروسه دانلود و نصب آغازشود.

curl -sfL https://get.rke2.io | sh -
فعال کردن rke2-server.service
systemctl enable rke2-server.service
راه‌اندازی service
systemctl start rke2-server.service
دنبال کردن لاگ‌ها (دلبخواهی)

ذر صورت نیاز می‌توانید با استفاده از این دستور، لاگ‌ها را دنبال کنید. (مفید برای ایرادیابی)

journalctl -u rke2-server -f

بعد از انجام دادن مراحل بالا:

  • سرویس rke2-server نصب خواهد شد. سرویس rke2-server جوری تنظیم خواهد شد که بعد از راه‌اندازی مجدد (چه به دست کاربر و چه درصورت crash کردن) دوباره اجرا شده و شروع به کار کند.
  • ابزار اضافه در مسیر /var/lib/rancher/rke2/bin/ نصب خواهند شد. که شامل : kubectl , crictl و ctr می‌شوند. البته این‌ها بصورت پیش‌فرض روی مسیر نصبی شما نخواهند بود.
  • دو اسکریپت پاکسازی با نام های rke2-killall.sh و rke2-uninstall.sh نیز در مسیرهای زیر اضافه خواهند شد:
    • برای فایل سیستم‌های عادی : /usr/local/bin/
    • برای فایل سیستم‌های btrfs و فقط خواندنی: /opt/rke2/bin/
  • فایل kubeconfig را می‌توانید در آدرس /etc/rancher/rke2/rke2.yaml/ پیدا کنید.
  • یک فایل Token نیز برای اضافه کردن node‌های دیگر شامل master یا worker نیز در آدرس /var/lib/rancher/rke2/server/node-token/ ساخته خواهد شد.
نکته: درصورت تمایل برای اضافه کردن بیش از یک server node، حتمأ تعداد فرد را انتخاب کنید چرا که در این صورت خواهد بود که quorum حفظ خواهد شد. (منبع)

 

نصب بر روی worker node

دقت داشته باشید که تمام دستورات را با دسترسی sudo اجرا کنید.

اجرای نصاب
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -
فعال کردن rke2-agent.service
systemctl enable rke2-agent.service
پیکربندی rke2-agent.service
mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

محتوای فایل config.yaml

server: https://<server>:9345
token: <token from server node>

* حتمأ به فاصله‌ها دقت فراوان کنید.

نکته: پراسس‌های rke2 server برای رجیستر کردن node‌های جدید، روی پورت 9345 گوش می‌دهند. همچنین kubernetes API روی پورت 6443 در دسترس خواهد بود.
شروع کردن سرویس
systemctl start rke2-agent.service
دنبال کردن لاگ‌ها (در صورت نیاز)
journalctl -u rke2-agent -f
نکته: دوباره به این موضوع اشاره می‌کنیم که هر ماشین باید hostname منحصر به فرد خود را داشته باشد.

اما اگر ماشین های شما hostname منحصر به فرد نداشت در فایل config.yaml، مقدار node-name را اضافه کنید و یک hostname منحصر به فرد و مجاز انتخاب کنید.

 

همچنین برای مطالعه بیشتر درباره config.yaml می‌توانید از این بخش اقدام کنید.


فعال کردن kubectl روی سیستم لینوکسی خود

 

برای اینکه جهت اعمال تنظیمات cluster خود مجبور نباشید هر دفعه به سرور master خود ssh بزنید، کافیست فایل‌ پیکربندی تولید شده در زمان راه‌اندازی cluster را از روی master node برداشته و به سیستم لینوکسی خود اضافه کنیم.

فایل کانفیگ را به سیستم خود منتفل کنید: فایل کانفیگ در master node در آدرس /etc/rancher/rke2/rke2.yaml/ می‌باشد.

فایل را باز کنید و در بخش server ، آدرس پورت lan سرور master node خود را وارد کنید.

$ mkdir -p ~/.kube/config/
$ scp <Masternode-Username>@<Masternode-IP>:/etc/rancher/rke2/rke2.yaml ~/.kube/config/ 
سپس با استفاده از یک ویرایشگر متن مانند nano فایل را ویرایش کنید
$ echo "export KUBECONFIG="~/.kube/config/rke2.yaml"" >> ~/.bashrc
$ source ~/.bashrc

حالا درصورت انجام مراحل به درستی با استفاده از دستور زیر می‌توانید تمام node های عضو cluster را مشاهده کنید.

$ kubectl get node

رامین

سلام. من رامین نعمتی هستم. فارغ التحصیل کارشناسی الکترونیک از دانشکده فنی شماره ۲ تهران. از همون اوایل دوره کارشناسی با بحث شبکه های کامپیوتری آشنا شدم و بشدت دلباخته اش شدم D: و شروع کردم به یادگیری مباحث مربوطه. یه مدت بخاطر مسائل شخصی از این فیلد دور بودم ولی الان بازهم شروع کردم به یادگیری بیشتر. این سایت رو هم راه اندازی کردم تا بخشی از مطالبی که توی کار برام پیش آمده و حلش کردم یا مورد جدیدی یاد گرفتم و میخوام که ملکه ذهنم بشه و فراموشش نکنم را توی این سایت منتشر میکنم شاید به درد یک نفر دیگه هم بخوره. خیلی خیلی خوشحال میشم که اگر نظر یا پشنهاد یا انتقادی دارید بهم بگید. میتونید از طریق تلگرام و آی دی t.me/linusp با من در ارتباط باشید. خاک امین و هر چه در وی کاشتی / بی خیانت جنس آن برداشتی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا