نسخه‌های متعددی از «کوبرنتیس» پیش‌پیکربندی شده وجود دارد که از جمله مهم‌ترینِ آنها می‌توان به «Minikube» و «Microk8s» اشاره کرد. مقاله حاضر بر آن است تا فرایند نصب و راه‌اندازی را از ابتدا توضیح دهد و جزئیات بیشتری را در اختیار خوانندگان قرار دهد. کوبرنتیس یکپارچه نیست و اجزای متعددی کنار هم کار می‌کنند تا به هدف مورد نظر برسند. بسیاری از جنبه‌های آن تا حدی به جادو شبیه است. در این مقاله به بررسی این جنبه‌ها خواهیم پرداخت.

برای اینکه گام به گام در این مقاله پیش برویم، ضروری است به VM توجه داشته باشید. این مورد در بخش‌های بعدی بیشتر توضیح داده خواهد شد. باید اطلاعات پیشرفته‌ای هم در خصوص لینوکس، خط فرمان لینوکس و شبکه داشته باشید. همچنین توصیه می‌کنیم بسیار صبور باشید. در آغاز کار، می‌خواهیم جزئیات یک VM را با Ubuntu 18.04، دو vCPU، حافظه ۴G و ۵۰ گیگ هارد توضیح دهیم. ما از KVM استفاده میکنیم. مراحل زیر را برای راه‌اندازیِ آن در هاستِ اصلی طی کردیم:ماشین مجازیِ ما «kubel» نام دارد. تغییراتی که در این ماشین ایجاد کردیم، به این صورت است: RAM به ۴۰۹۶، اندازه دیسک به ۵۰ و Vcpu به ۲ تغییر پیدا کرد. باید از نصبِ سرور 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 = ۱

net.ipv4.ip_forward = ۱

net.bridge.bridge-nf-call-iptables = ۱

سپس، ماشین مجازی‌تان را مجدداً بوت کنید. باید این ماشین مجازی جدید هیچ قاعده 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 <

 

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 استفاده کنید.( این گره «control-plane» همان چیزی است که در مقاله حاضر به بررسی‌اش می‌پردازیم. اگر گره‌های «worker» را بعدها اضافه کنیم، همه این مراحل باید تکرار شود. برای اینکه ببینیم آیا kubeadm  به constrained  که پیشتر نصب کردیم دسترسی دارد یا خیر، می‌توانیم sudo kubeadm config images pull  را اجرا کنیم. این بخش قدری نیاز به اندیشه دارد. کوبرنتیس به رابط شبکه کانتینر یا CNI نیاز دارد تا همه پادها بتوانند با یکدیگر ارتباط داشته باشند. اما برای اینکه خوشه را راه‌اندازی کنیم، باید اطلاعاتی درباره چگونگیِ استفادۀ آن از CNI داشته باشیم. بنابراین، باید سرانجام یک CNI انتخاب کنیم تا کار با آن ادامه پیدا کند چرا که CNIهای مختلفی وجود دارد. ما Flannel انتخاب می‌کنیم. به صورت پیش فرض Flannel از CIDR های ۱۰.۲۴۴.۰.۰/۱۶ استفاده می‌کند بنابراین از فرمان init استفاده کنیم. بیایید این فرایند را با هم امتحان کنیم و ببینیم چه نتیجه‌ای به دست می‌آید.

 

 

 

sudo kubeadm init --pod-network-cidr=۱۰.۲۴۴.۰.۰/۱۶

بله، کار با موفقیت به انجام رسید، اما  باید چند مرحله دیگر در خصوص یکی از گره‌ها طی کنیم. چند مرحله نیز در پایان فرمان init  وجود دارد که اهمیت زیادی دارد. اگر می‌خواهید گره‌های «worker» را در بخش‌های بعد ایجاد کنید، مطمئن شوید که فرمان join را کپی کرده باشید تا بعد به آن مراجعه کنید. توکنی که فهرست‌بندی شد، تنها ۲۴ ساعت دوام می‌آورد. پس اگر می‌خواهید گره تازه‌ای بعد از آن بسازید، باید توکن جدیدی با فرمان 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 apply -f

حالا ببینید که آیا این امکان وجود دارد همه چیز را با 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 ۷۳m v1.۱۸.۱

kube2 Ready ۶۵s v1.۱۸.۱

منبع: hooshio.com