کوبرنتیس چیست؟
نسخههای متعددی از «کوبرنتیس» پیشپیکربندی شده وجود دارد که از جمله مهمترینِ آنها میتوان به «Minikube» و «Microk8s» اشاره کرد. مقاله حاضر بر آن است تا فرایند نصب و راهاندازی را از ابتدا توضیح دهد و جزئیات بیشتری را در اختیار خوانندگان قرار دهد.
کوبرنتیس یکپارچه نیست و اجزای متعددی کنار هم کار میکنند تا به هدف مورد نظر برسند. بسیاری از جنبههای آن تا حدی به جادو شبیه است. در این مقاله به بررسی این جنبهها خواهیم پرداخت.
کوبرنتیس
برای اینکه گام به گام در این مقاله پیش برویم، ضروری است به VM توجه داشته باشید. این مورد در بخشهای بعدی بیشتر توضیح داده خواهد شد. باید اطلاعات پیشرفتهای هم در خصوص لینوکس، خط فرمان لینوکس و شبکه داشته باشید. همچنین توصیه میکنیم بسیار صبور باشید. در آغاز کار، میخواهیم جزئیات یک VM را با Ubuntu 18.04، دو vCPU، حافظه 4G و 50 گیگ هارد توضیح دهیم. ما از KVM استفاده میکنیم.
[irp posts=”8179″]مراحل زیر را برای راهاندازیِ آن در هاستِ اصلی طی کردیم:ماشین مجازیِ ما «kubel» نام دارد. تغییراتی که در این ماشین ایجاد کردیم، به این صورت است: RAM به 4096، اندازه دیسک به 50 و Vcpu به 2 تغییر پیدا کرد. باید از نصبِ سرور OpenSSH اطمینان حاصل کنید.
با پایان این کار و برخورداری از آدرس IP، میتوانید آن را به فایل /etc/hosts اضافه کنید تا با نام خودش به آن دسترسی داشته باشید. اگر میخواهید اطلاعات بیشتری درباره KVM و چگونگی نصب آن بدست آورید، میتوانید به این مقاله مراجعه کنید: «Playing with VMs and Kubernetes».
در این مقاله به هاستی که KVM رو آن نصب شده است میزبان اصلی نامیده میشود و هاستی که از آن جهت توسعه برنامه استفاده میشود (که میتوان یک لپ تاپ یا PC باشد) رایانه محلی نامیده میشود. اگر از ماشین مجازی ابری استفاده میکنید، میزبان اصلی نخواهید داشت.
در چنین مواردی باید بدانید چه اقدامی در پانل کنترل ابری یا خط فرمانِ رایانه محلی لازم است تا به صورت یک میزبان اصلی عمل کند (مثل فرمان gloud در پلتفرم ابری گوگل). اولین چیزی که به آن نیاز است، فرمانهای kubeadm/kubectl/kubelet است. جهت راهنمای نصب از official installation (نصب رسمی) استفاده میکنیم اما برای Ubuntu 18.04 VM. برای اینکه ماشین مجازی خود را برای نصب آماده کنید، در ابتدا باید از خاموش بودنِ سوآپ (swap) مطمئن شوید.
ls / # make sure your swapfile is called swapfile sudo swapoff -v /swapfile sudo vi /etc/fstab # remove the line for the swapfile sudo rm /swapfile
اگر میخواهید بیش از یک گره بسازید، باید مطمئن شوید که ماشینهای مجازیتان با آدرسهای منحصربفرد MAC و محصول UUID ساخته شدهاند. KVM این کار را برای شما انجام میدهد. احتمالاً اکثر ماشینهای مجازی منحصربفرد خواهند بود، مگر اینکه ماشین مجازی فعلی را کلون کنید. در اقدام بعدی، باید پلها و overlyها را با افزودن چند خط به فایل /etc/modules-load.d/modules.conf فعال کنید.
overlay br_netfilter
چند خط دیگر به فایل /etc/sysctl.conf اضافه کنید:
# added for kubernetes bridge net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1
سپس، ماشین مجازیتان را مجدداً بوت کنید. باید این ماشین مجازی جدید هیچ قاعده iptables نداشته باشد. برای بررسی این موضوع میتوانید از فرمان sudo iptables -L استفاده کنید.
Chain INPUT (policy ACCEPT) target prot opt source destinationChain FORWARD (policy ACCEPT) target prot opt source destinationChain OUTPUT (policy ACCEPT) target prot opt source destination
اگر قدری دلهره دارید، میتوانید پورتها را فقط به موارد لیستشده در «نصب رسمی» محدود کنید، اما این کار مثل پا گذاشتن روی مین است. چون کوبرنتیس یک سیستم هماهنگی کانتینر است، به سیستم کانتینری احتیاج داریم که بتواند کار هماهنگی و مدیریت را به خوبی انجام دهد. میتوانید از چند سیستم کانتینر استفاده کنید، اما در مقاله حاضر از containerd استفاده میشود. برای نصب آن در Ubuntu 18.04 اجرای دو خط زیر کافی است:
sudo apt-get update sudo apt-get install containerd
باید نتیجۀ زیر به دست آید:
/var/run/containerd/containerd.sock.
حالا میتوانید kubeadm/kubectl/kubelet را نصب کنید:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl gnupg2 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
بسته kubeadm به عنوان API اصلی در کوبرنتیس استفاده میشود. در واقع بسته kubectl یک رابط خط-فرمان در API کوبرنتیس است. بسته kubelet با سیستم مدیریت کانتینر پیوند میخورَد تا پادها به اجرا درآیند. اکنون فرصت را غنیمت میشماریم تا نگاهی به واژهها و اصطلاحات تخصصی در این بخش بپردازیم.
کل مجموعه در کوبرنتیس «cluster» یا خوشه نام دارد. هر خوشه میتواند یک یا چند گره داشته باشد. دو نوع گره با نامهای «control-plane» و «worker» وجود دارد. فقط باید یک گره «control-plane» وجود داشته باشد. )البته میتوانید از چند «control-plane» در سیستم HA استفاده کنید.
[irp posts=”14736″]این گره «control-plane» همان چیزی است که در مقاله حاضر به بررسیاش میپردازیم. اگر گرههای «worker» را بعدها اضافه کنیم، همه این مراحل باید تکرار شود. برای اینکه ببینیم آیا kubeadm به constrained که پیشتر نصب کردیم دسترسی دارد یا خیر، میتوانیم sudo kubeadm config images pull را اجرا کنیم. این بخش قدری نیاز به اندیشه دارد.
کوبرنتیس به رابط شبکه کانتینر یا CNI نیاز دارد تا همه پادها بتوانند با یکدیگر ارتباط داشته باشند. اما برای اینکه خوشه را راهاندازی کنیم، باید اطلاعاتی درباره چگونگیِ استفادۀ آن از CNI داشته باشیم.
بنابراین، باید سرانجام یک CNI انتخاب کنیم تا کار با آن ادامه پیدا کند چرا که CNI های مختلفی وجود دارد. ما Flannel انتخاب میکنیم. به صورت پیش فرض Flannel از CIDR های 10.244.0.0/16 استفاده میکند بنابراین از فرمان init استفاده کنیم. بیایید این فرایند را با هم امتحان کنیم و ببینیم چه نتیجهای به دست میآید.
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
بله، کار با موفقیت به انجام رسید، اما باید چند مرحله دیگر در خصوص یکی از گرهها طی کنیم. چند مرحله نیز در پایان فرمان init وجود دارد که اهمیت زیادی دارد. اگر میخواهید گرههای «worker» را در بخشهای بعد ایجاد کنید، مطمئن شوید که فرمان join را کپی کرده باشید تا بعد به آن مراجعه کنید.
توکنی که فهرستبندی شد، تنها 24 ساعت دوام میآورد. پس اگر میخواهید گره تازهای بعد از آن بسازید، باید توکن جدیدی با فرمان kubeadm token create درست کنید.
حالا بیایید پیکربندی را در جایی قابل دسترس برای استفادۀ kubectl قرار دهیم.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
این کار موجب ایجاد فایل پیکربندیِ پیشفرض خواهد شد که kubectl از آن استفاده میکند. سپس نیاز به اجرای kubectl config view داریم. خروجیِ حاصل از فرمان init این پیام را به ما میدهد که باید CNIرا به کار ببریم. در پایانِ این کار، به پیکربندی مورد نیاز در GitHub دسترسی خواهیم داشت. اکنون نوبت به بکارگیری آن رسیده است:
حالا ببینید که آیا این امکان وجود دارد همه چیز را با kubectl get all –all-namespaces اجرا کنید یا خیر. باید فهرستی از مظنونهای احتمالی درست کنید. فایل پیکربندی را به میزبان اصلی کپی کنید. در این صورت میتوانید به خوشه جدیدتان دسترسی پیدا کنید. ما آن را در فایل ~/.kube/kube1config کپی کرده و متغیر KUBECONFIG را به کار خواهیم بست تا نیازی به ادغام با فایلهای پیکربندیِ موجود نباشد.
اکنون، اجرایِ kubectl get all –all-namespaces در میزبان اصلی باید فهرست یکسانی را حاصل آورد. حالا میخواهیم همه مراحل ذکر شده در این مقاله را تا kubeadm init تکرار کنیم. پس از پایان این کار، ماشین مجازی جدیدی تحت عنوان «kube2» ایجاد شده و به نصب contianerd, kubeadm, kubectl میپردازیم. به جای استفاده از فرمان kubeadm init ، از فرمان kubeadm join که در kubeadm init ذخیره کردیم، استفاده میکنیم. حالا بیایید ببینیم چه نتیجهای حاصل آمد:
NAME STATUS ROLES AGE VERSION kube1 Ready master 73m v1.18.1 kube2 Ready <none> 65s v1.18.1