آموزش نصب Kubernetes در اوبونتو 22.04

کوبرنتیز یکی از نوآورانه‌ترین فناوری‌هایی است که می‌توانید برای استقرار، مقیاس‌گذاری و مدیریت برنامه‌ها بدون در نظر گرفتن پلتفرم زیرساختی استفاده کنید. اگر یک مهندس DevOps یا توسعه‌دهنده نرم‌افزار هستید، با موقعیت‌هایی مواجه می‌شوید که باید Kubernetes را روی پلتفرم‌های مختلف با وابستگی‌های مورد نیاز نصب کنید. این مطلب دستورالعمل‌های گام به گام نحوه نصب کوبرنتیز در اوبونتو را در اختیار شما قرار می‌دهد.


کوبرنتیز چیست؟

کوبرنتیز(Kubernetes) یک سیستم متن‌باز است که توسط گوگل توسعه یافته و اکنون تحت نظارت CNCF است. ارکستراسیون کانتینر را ساده می‌کند. بنابراین، توسعه دهندگان می‌توانند بدون پرداختن به پیچیدگی‌های زیرساخت، اپلیکیشن بسازند. این سیستم،  مدیریت و زمان بندی کانتینر را فراهم می‌کند. کاربران می‌توانند رفتارهای برنامه را در یک کلاستر دیکته کنند. Kubernetes زیرساخت‌های اساسی را خلاصه و  وظایف کانتینر و استقرار برنامه را ساده می‌کند.

مزایای کوبرنتیز

  • کوبرنتیز در مدیریت کانتینرها در گره‌های مختلف خوب است.
  • کوبرنتیز با بسیاری از زیرساخت‌های ابری عمومی و خصوصی سازگار است.
  • کوبرنتیز به شما این امکان را می‌دهد که برنامه خود را در زمانی که به منابع بیشتری برای اجرای موفقیت آمیز نیاز دارد به طور خودکار مقیاس کنید.
  • قابلیت خوددرمانی(self-healing) کوبرنتیز به طور خودکار کانتینر معیوب را ریستارت و کانتینر ناسالم را جایگزین می‌کند.


پیش نیازها

برای نصب Kubernetes بر روی دستگاه اوبونتو، مطمئن شوید که شرایط زیر را برآورده می کند:

  •  2 عدد سی پی یو
  • حداقل 2 گیگابایت رم
  • حداقل 2 گیگابایت فضای دیسک
  •  یک اتصال اینترنتی قابل اعتماد

اگر دستگاه شما شرایط فوق را برآورده می‌کند، آماده هستید تا این آموزش را دنبال کنید. بیایید با روند گام به گام نحوه نصب کوبرنتیز در اوبونتو شروع کنیم.

سرور مجازی یک ماشین مجازی کامل است که امکان انتخاب و نصب سیستم عامل روی آن فراهم است.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

آموزش نصب کوبرنتیز در اوبونتو

نصب Kubernetes کار ساده‌ای نیست. برای ایجاد یک کلاستر انعطاف پذیر و با کارایی بالا، باید چندین مرحله غیر از نصب اجزای کوبرنتیز را دنبال کنید. همچنین، ما باید ماشین‌ها را به گونه‌ای پیکربندی کنیم که بتوانند با یکدیگر ارتباط برقرار کنند.

به طور کلی، نصب Kubernetes در اوبونتو شامل مراحل زیر است:

  • غیرفعال کردن Swap
  • تنظیم نام میزبان (hostname)
  • راه اندازی IPV4 bridge در تمام گره‌ها
  • نصب کامپوننت‌های Kubernetes در تمام گره‌ها
  • نصب Docker یا یک ابزار مناسب کانتینرسازی
  • راه اندازی کلاستر Kubernetes
  • پیکربندی Kubectl و Calico
  • اضافه کردن گره‌های worker

 

مرحله 1: غیرفعال کردن Swap

شما ممکن است در مورد فضای swap در هارد دیسک‌ها بدانید، که سیستم عامل‌ها سعی می‌کنند از آن مانند RAM استفاده کنند. سیستم‌های عامل سعی می‌کنند داده‌هایی را که کمتر به آن‌ها دسترسی دارند، به فضای swap منتقل نموده تا RAM را برای کارهای فوری‌تر آزاد کنند. با این حال، دسترسی به داده ها در swap بسیار کندتر از دسترسی به داده‌ها در RAM است زیرا هارد دیسک‌ها کندتر از RAM هستند.
Kubernetes بر اساس درک منابع موجود کار می‌کند. اگر حجم کاری شروع به استفاده از swap کند، تصمیم گیری دقیق زمان بندی برای کوبرنتیز می‌تواند دشوار شود. بنابراین، توصیه می‌شود قبل از نصب کوبرنتیز، swap را غیرفعال کنید.

با دستور زیر می توانید این کار را انجام دهید. دستور sudo swapoff - به طور موقت swap را در سیستم شما غیرفعال می‌کند. سپس دستور sudo sed -i '/ swap / s/^/#/' /etc/fstab یک فایل پیکربندی را تغییر می‌دهد تا swap حتی پس از ریبوت سیستم خاموش بماند.


sudo swapoff –
sudo sed -i '/ swap / s/^/#/' /etc/fstab


مرحله 2: تنظیم نام میزبان (hostname)

احتمالا نام هاست‌نیم را شنیده‌اید، نام‌هایی که توسط انسان قابل خواندن هستند که ما به یک ماشین برای شناسایی آن در یک شبکه می‌دهیم. هنگامی که ما با کلاستر Kubernetes کار می‌کنیم، باید hostname‌های منحصر به فردی برای گره‌ها قرار دهیم تا کوبرنتیز بتواند از این نام‌ها برای شناسایی گره‌ها استفاده کند.

بیایید نام میزبان برای گره اصلی و گره worker بدهیم.

در گره اصلی خود (نمونه ماشین یا ماشین مجازی که انتخاب میکنید به عنوان گره اصلی باشد)، دستور sudo hostnamectl set-hostname "master-node" را اجرا کنید تا نام میزبان آن گره را روی "master-node" تنظیم کنید. دستور exec bash را برای ریفرش جلسه فعلی bash خود اجرا کنید تا بتواند بلافاصله نام میزبان جدید را تشخیص داده و از آن استفاده کند.

sudo hostnamectl set-hostname "master-node"
exec bash

همان دستورات را روی گره‌های دیگری که در این کلاستر Kubernetes استفاده کرده‌اید اجرا کنید. با این حال، نام میزبان را بر این اساس تغییر دهید. به عنوان مثال، من دستور sudo hostnamectl set-hostname "worker-node1" را روی گره ورکر خود اجرا می‌کنم.

مرحله 3: به روز رسانی فایل  /etc/hosts برای ریزالو hostname

تنظیم hostname کافی نیست. ما باید نام هاست را به آدرس IP آنها نیز نگاشت کنیم. همانطور که در زیر نشان داده شده است، باید فایل/etc/hosts را از تمام گره‌ها (یا حداقل گره اصلی) به روز کنید. (به یاد داشته باشید که باید از آدرس‌های IP گره‌های خود استفاده کنید.) می‌توانید با دستور sudo nano /etc/hosts فایل هاست را برای ویرایش باز کنید.

sudo nano /etc/hosts

 

10.0.0.2 master-node  
10.0.0.3 worker-node1

برای ذخیره تغییرات از کلیدهای Control و X استفاده کنید.

مرحله 4: راه اندازی IPV4 bridge روی همه گره‌ها

برای پیکربندی IPV4 bridge روی تمام گره‌ها، دستورات زیر را روی هر گره اجرا کنید.


cat < overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# sysctl params required by setup, params persist across reboots
cat < net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system

مرحله 5: Kubelet، Kubeadm و Kubectl را روی هر گره نصب کنید

بیایید kubelet، kubeadm و kubectl را روی هر گره نصب کنیم تا یک کلاستر Kubernetes ایجاد کنیم. آنها نقش مهمی در مدیریت یک کلاستر کوبرنتیز دارند.

Kubelet عامل گره‌ای است که روی هر گره اجرا می‌شود و مسئول اطمینان از اجرای کانتینرها در یک Pod است که توسط مشخصات Pod مشخص شده است. (Pods کوچکترین واحدهای قابل استقرار در یک کلاستر کوبرنتیز هستند).

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

Kubectl یک ابزار CLI برای کوبرنتیز برای اجرای دستورات برای انجام اقدامات مختلف مانند استقرار برنامه‌ها، بازرسی منابع و مدیریت عملیات کلاستر به طور مستقیم از ترمینال است.

قبل از نصب، باید فهرست بسته را با دستور sudo apt-get update به روز کنید.

در مرحله بعد، ما باید مطمئن شویم که می‌توانیم بسته‌ها را از اینترنت به طور ایمن دانلود و نصب کنیم.


sudo apt-get install -y apt-transport-https ca-certificates curl

در مرحله بعد، ما باید دایرکتوری ایجاد نمائیم که در آن یک کلید ویژه ذخیره کنیم که صحت بسته‌های کوبرنتیز را تایید می‌کند. مانند چک کردن یک کارت شناسایی قبل از ورود کسی به یک ساختمان است.


sudo mkdir /etc/apt/keyrings

بیایید کلید عمومی را از گوگل واکشی کرده و آن را در پوشه‌ای که در مرحله قبل ایجاد کردیم ذخیره کنیم. این کلید برای تایید اینکه بسته‌های کوبرنتیز که دانلود می‌کنیم واقعی هستند و دستکاری نشده‌اند، مهم است.


curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

در مرحله بعد، ما باید به مدیر بسته apt بگوییم که بسته‌های Kubernetes را برای دانلود کجا پیدا کند.


echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

بیایید با اجرای مجدد دستور sudo apt-get update، فهرست بسته apt را برای مشاهده موارد جدید بازخوانی کنیم.

اکنون با اجرای دستور sudo apt install -y kubelet=1.26.5-00 kubeadm=1.26.5-00 kubectl=1.26.5-00 آماده نصب kubelet، kubeadm و kubectl هستیم.

مرحله 6: Docker را نصب کنید

پلتفرم Docker به شما اجازه می‌دهد تا برنامه‌ها را در کانتینرها ایجاد، توزیع و اجرا کنید. این کانتینر یک محیط سبک وزن و قابل حمل را ارائه می‌دهند که عملکرد ثابت را در تنظیمات مختلف تضمین می‌کند. Docker به عنوان زمان اجرای کانتینر عمل نموده و با تسهیل مدیریت کارآمد و استقرار اپلیکیشن‌های کانتینری، نقشی حیاتی در Kubernetes ایفا می‌کند.

Docker را با دستور زیر نصب کنید


sudo apt install docker.io

سپس، Containerd را روی همه گره‌ها پیکربندی کنید تا از سازگاری آن با Kubernetes اطمینان حاصل شود. ابتدا با دستور زیر یک پوشه برای فایل پیکربندی ایجاد کنید.


sudo mkdir /etc/containerd

سپس، یک فایل پیکربندی پیش‌فرض برای Containerd ایجاد و با استفاده از دستور زیر آن را به‌عنوان config.toml ذخیره کنید.


sudo sh -c "containerd config default > /etc/containerd/config.toml"

پس از اجرای این دستورات، باید فایل config.toml را تغییر داده تا ورودی را پیدا کنید که "SystemdCgroup" را روی false قرار می‌دهد و مقدار آن را به true تغییر می‌دهد. این مهم است زیرا Kubernetes به تمام اجزای خود نیاز دارد و زمان اجرای کانتینر از systemd برای cgroup‌ها استفاده می‌کند.


sudo sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml

در مرحله بعد، سرویس‌های Containerd و Kubelet را ریستارت کنید تا تغییراتی که ایجاد کرده‌اید در همه گره‌ها اعمال شود.


sudo systemctl restart containerd.service
sudo systemctl restart kubelet.service

هر زمان که دستگاه بوت می‌شود، می‌خواهید سرویس kubelet را استارت کنید، که می‌توانید با اجرای دستور زیر این کار را انجام دهید

.
sudo systemctl enable kubelet.service

 مرحله 7: کلاستر Kubernetes را در گره اصلی راه اندازی کنید

هنگامی که یک صفحه کنترل Kubernetes را با استفاده از kubeadm مقداردهی اولیه می‌کنید، چندین مولفه برای مدیریت و هماهنگ کردن کلاستر مستقر می‌شوند. برخی از نمونه‌های این اجزا عبارتند از: kube-apiserver، kube-controller-manager، kube-scheduler، etcd، kube-proxy. ما باید ایمیج‌های این اجزا را با اجرای دستور زیر دانلود کنیم.


sudo kubeadm config images pull

سپس، گره اصلی خود را مقداردهی اولیه کنید. پرچم --pod-network-cidr محدوده آدرس IP را برای شبکه pod تنظیم می‌کند.


sudo kubeadm init --pod-network-cidr=10.10.0.0/16

برای مدیریت کلاستر، باید kubectl را روی گره اصلی پیکربندی کنید. دایرکتوری .kube را در پوشه اصلی خود ایجاد و پیکربندی مدیریت کلاستر را در پوشه شخصی .kube خود کپی کنید. سپس، مالکیت فایل پیکربندی کپی شده را تغییر داده تا به کاربر اجازه استفاده از فایل پیکربندی برای تعامل با کلاستر را بدهد.

در ادامه دستوراتی وجود دارد که برای انجام این کار نیاز دارید.


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

مرحله 8: Kubectl و Calico را پیکربندی کنید

برای استقرار عملگر Calico دستورات زیر را روی گره اصلی اجرا کنید.


kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml

در مرحله بعد، فایل منابع سفارشی برای Calico را دانلود کنید، که شامل تعاریف منابع مختلفی است که Calico استفاده خواهد کرد.


curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml -O

با استفاده از دستور زیر، CIDR را در منابع سفارشی دانلود شده تغییر دهید تا با شبکه پاد شما مطابقت داشته باشد. در ادامه، شما از دستور sed برای تغییر مقدار CIDR پیش‌فرض در منابع سفارشی Calico استفاده می‌کنید تا با CIDR که در دستور init kubeadm استفاده کرده‌اید مطابقت داشته باشد.


sed -i 's/cidr: 192\.168\.0\.0\/16/cidr: 10.10.0.0\/16/g' custom-resources.yaml

در نهایت به kubectl بگویید منابع تعریف شده در فایل custom-resources.yaml را ایجاد کند.


kubectl create -f custom-resources.yaml

مرحله 9: گره‌های worker را به کلاستر اضافه کنید

هنگامی که گره اصلی را پیکربندی کردید، می‌توانید گره‌های ورکر را به کلاستر اضافه کنید. هنگام راه اندازی Kubeadm در گره اصلی، یک توکن دریافت خواهید کرد که می‌توانید از آن برای اضافه کردن گره‌های ورکر استفاده کنید.
برای افزودن گره‌های ورکر به خوشه Kubernetes، از دستور kubeadm join استفاده کنید. (دستور شبیه زیر است. می‌توانید مقادیر متغیر را از مراحل بالا دریافت کنید)


sudo kubeadm join : --token --discovery-token-ca-cert-hash

مرحله 10: کلاستر را تایید و آزمایش کنید

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


kubectl get no

به همین ترتیب، با اجرای دستور زیر، می‌توانیم پادها را از تمام فضاهای نام در کلاستر فهرست کنیم.


kubectl get po -A


جمع‌بندی

این راهنما نحوه نصب کوبرنتیز در اوبونتو 22.04 و راه اندازی یک کلاستر را توضیح می‌دهد. ما بررسی‌های سیستم، تنظیمات نام میزبان، نصب اجزا، راه‌اندازی کلاستر و اعتبارسنجی را بررسی کردیم. با انجام این مراحل می‌توانید یک کلاستر قابل اعتماد ایجاد کنید. Kubernetes یک پلتفرم قابل اعتماد برای استقرار برنامه‌های میکروسرویس ارائه می‌دهد که آن را برای مشاغل رقابتی ضروری می‌کند.