Kubernetes یا k8s که همچنین برای سادگی Kube گفته می شود ، یک پلت فرم منبع باز ارکستراسیون کانتینر است که برای مقیاس گذاری خودکار و استقرار کانتینرها استفاده می شود. در این مقاله نحوه نصب کلاستر Kubernetes بر روی سرور اوبونتو 20.04 (Focal Fossa) با استفاده از kubeadm را نشان خواهیم داد.

من از سه سرور Ubuntu 20.04 LTS استفاده کرده ام. در زیر الزامات سیستم در هر سیستم اوبونتو آورده شده است.

حداقل 2 گیگابایت RAM
2 هسته (2 vCPU)
فضای آزاد 15 گیگابایتی روی var/
کاربر با دسترسی sudo
اتصال به اینترنت پایدار

Ubuntu 20.04 LTS Server – K8s-master – 192.168.122.40
Ubuntu 20.04 LTS Server – K8s-node-0 – 192.168.122.41
Ubuntu 20.04 LTS Server – K8s-node-1 – 192.168.122.42

مرحله 1) تنظیم Hostname و تغییر فایل etc/hosts

دستور hostnamectl را برای تنظیم نام host در هر node اجرا کنید.

sudo hostnamectl set-hostname "k8s-master"     // Run this command on master node
sudo hostnamectl set-hostname "k8s-node-0"     // Run this command on node-0
sudo hostnamectl set-hostname "k8s-node-1"     // Run this command on node-1

ورودی های زیر را در پرونده های etc/hosts در هر node اضافه کنید.

192.168.122.40    k8s-master
192.168.122.41    k8s-node-0
192.168.122.42    k8s-node-1

مرحله 2) نصب Docker به عنوان Container Runtime (CRI) روی node های master و worker

برای نصب docker به هر node وارد شوید و دستورات زیر را اجرا کنید.

sudo apt update
sudo apt install -y docker.io

اکنون سرویس docker را در هر node با استفاده از دستور systemctl فعال و شروع کنید.

sudo systemctl enable docker.service --now

برای تأیید وضعیت سرویس docker و نسخه آن ، دستورات زیر را اجرا کنید.

systemctl status docker
docker --version

مرحله 3) Swap را غیرفعال و IP forwarding را در همه node ها فعال کنید

Swap Space را در همه node ها از جمله node های worker غیرفعال می‌کنیم، دستورات زیر را اجرا می‌کنیم:

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

برای فعال کردن ip forwarding به طور دائم، فایل “etc/sysctl.conf” را ویرایش کرده و به دنبال خط “net.ipv4.ip_forward = 1” بگردید و آن را از حالت کامنت خارج کنید. پس از انجام تغییرات در فایل، دستور زیر را اجرا کنید.

sudo sysctl -p

مرحله 4) Kubectl ، kubelet و kubeadm را روی همه node ها نصب کنید

دستورات زیر را بر روی همه‌ی node ها اجرا کنید تا kubectl ، kubelet و kubeadm را نصب کنید.

sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt update
sudo apt install -y kubelet kubeadm kubectl

توجه: هنگام نوشتن این مقاله ، مخزن Kubernetes Ubuntu 16.04 (Xenial Xerus) در دسترس بود اما در آینده ، وقتی مخزن kubernetes برای اوبونتو 20.04 در دسترس قرار گرفت از مخزن اختصاصی استفاده نمایید.

مرحله ۵) راه‌اندازی کلاستر Kubernetes

وارد master node خود شوید و دستور زیر را اجرا کنید.

sudo kubeadm init

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

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

برای پیوستن node های worker به کلاستر، دستور مربوط به worker node ها را از خروجی کپی کرده و آن را روی هر دو worker node قرار دهید:

ubuntu@k8s-node-0:~$ sudo kubeadm join 192.168.122.40:6443 --token kgj2rx.z141xy45bm8hre2x --discovery-token-ca-cert-hash sha256:3349d12258209a4ecefe64115422c0ed8856b3a049e77bfec61e59a6958b27ad 
ubuntu@k8s-node-1:~$ sudo kubeadm join 192.168.122.40:6443 --token kgj2rx.z141xy45bm8hre2x --discovery-token-ca-cert-hash sha256:3349d12258209a4ecefe64115422c0ed8856b3a049e77bfec61e59a6958b27ad

اکنون به master بروید و دستور kubectl را اجرا کنید:

ubuntu@k8s-master:~$ kubectl get nodes
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   10m     v1.19.4
k8s-node-0   NotReady   <none>   3m13s   v1.19.4
k8s-node-1   NotReady   <none>   3m2s    v1.19.4

همانطور که می بینیم node های worker و master به کلاستر اضافه شده‌اند، اما وضعیت آنها “NotReady” است. برای ایجاد وضعیت “Ready” ، باید افزونه های Pod شبکه Container Network Interface (CNI) مانند calico را مستقر کنیم.

مرحله ۶) استقرار Calico

در master node دستور kubectl را اجرا می‌کنیم:

kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

هنگامی که pod شبکه با موفقیت استقرار یافت، وضعیت node ها به Ready تغییر می‌کند. برای بررسی وضعیت node ها ، دستور kubectl را دوباره اجرا کنیم.

kubectl get nodes

برای تأیید وضعیت Pod ها در همه namespace ها، دستور زیر را اجرا کنید.

kubectl get pods --all-namespaces

خروجی بالا تأیید می کند که همه Pod ها در حال کار و سالم هستند.

بیایید سعی کنیم pod، سرویس و deployment مستقر کنیم تا ببینیم کلاستر Kubernetes ما خوب کار می کند یا خیر.

توجه: برای فعال کردن bash-completion در master، موارد زیر را اجرا کنید.

echo 'source <(kubectl completion bash)' >>~/.bashrc

مرحله ۷) تست کلاستر Kubernetes

بیایید یک استقرار به نام nginx-web با ایمیج nginx در namesoace پیش فرض ایجاد کنیم، دستور kubectl زیر را در master node اجرا کنید.

kubectl create deployment nginx-web --image=nginx

برای تأیید وضعیت استقرار ، دستور زیر را اجرا کنید.

kubectl get deployments.apps
kubectl get deployments.apps  -o wide
kubectl get  pods

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

بیایید تعداد استقرار را افزایش دهیم، replicas را روی 4 تنظیم کنیم. دستور زیر را اجرا کنید:

kubectl scale --replicas=4 deployment nginx-web

اکنون وضعیت استقرار خود را با استفاده از دستورات زیر بررسی کنید

kubectl get deployments.apps nginx-web
kubectl describe deployments.apps nginx-web

خروجی بالا تأیید می کند که استقرار مبتنی بر nginx با موفقیت افزایش یافته است.

حالا یک تست دیگر انجام دهیم، یک Pod به نام “http-web” ایجاد کنیم و آن را از طریق سرویس با نام “http-service” با پورت 80 و NodePort به بیرون Expose کنیم.

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

kubectl run http-web --image=httpd --port=80

با استفاده از دستور زیر یک سرویس ایجاد کنید و Pod ایجاد شده با پورت 80 را expose کنید.

kubectl expose pod http-web --name=http-service --port=80 --type=NodePort
kubectl get service http-service
kubectl describe service http-service 

Node IP یا hostname پاد http-web را که بر روی آن مستقر شده دریافت کنید و سپس از طریق NodePort به سرور وب دسترسی پیدا کنید (32365)

kubectl get pods http-web -o wide
curl http://k8s-node-1:32365

همانطور که انتظار می رفت خوب کار می کند. در این پست ما کلاستر Kubernetes را با موفقیت در سرور LTS اوبونتو 20.04 راه اندازی کرده ایم.

نوشته‌های مشابه

3 دیدگاه

  1. سلام
    ممنون از مطلبتون
    لطفا برای استفاده از ingress و loadbalancing هم بنویسید.
    همچنین استفاده از istio

    تشکر

  2. سلام
    اگر بخواییم 2 تا مستر مثلا داشته باشیم و باقی ورکر چیکار باید کرد؟

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

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